❖ Clean Go Code- 해당 링크의 go언어의 클린코드 내용을 요약한 것입니다.- URL : https://github.com/Pungyeon/clean-go-article❖ 왜 깨끗한 코드를 작성해야 할까?가독성 높은 코드는 개발자가 작업을 이해하는 데 필요한 시간을 절약해 줍니다.클린 코드 작성은 가독성뿐만 아니라 일관성과 재사용성을 강화해 유지보수에도 이점을 제공합니다.클린 코드를 생각하지 않고 편리하게 코드를 작성하게 되면 코드 리뷰라 테스트가 어려워질 수 있습니다.클린 코드를 작성하는 데 초기 비용이 들 수 있지만, 유지보수 비용을 감안하면 장기적으로 오히려 시간을 절약할 수 있습니다.❖ 클린코드 소개☻테스트 주도 개발 짧은 주기로 테스트를 통과하는 코드를 작성하고 이를 반복해서 기능을 ..
❖ MAPF란?MAPF는 여러 에이전트가 각자의 목표 위치까지 충돌없이 이동하는 가장 효율적인 경로를 찾는 문제입니다.로봇의 경로 계획, 비디오 게임에서의 캐릭터 이동, 공항 또는 항구에서의 차량 관리등 다양한 분야에서 활용됩니다.MAPF의 주된 도전 과제는 '충돌'입니다. 두 에이전트가 동시에 같은 시간에 동일한 경로를 사용할 수 없습니다. 따라서 각 에이전트의 이동 경로는 다른 에이전트와 상호 작용을 고려하여 계획되어야 합니다. 이 문제를 해결하기 위한 다양한 접근 방법이 존재합니다.최적화 기반 접근법: 최적의 해결책을 찾는 것을 목표로 합니다. A* 알고리즘과 같은 기존의 단일 에이전트 경로 찾기 알고리즘을 확장하여 사용합니다.충돌 회피 기반 접근법: 충돌을 최소화하는 것을 목표로 합니다. 에이전트..
예전에는 구글없으면 개발할 수 없었는데 요즘은 chatGPT 없으면 개발할 수 없을것 같다. ㅋㅋㅋ 너무나 강력한 녀석 재밌는 이슈가 있어서 공유하려고 한다. chatGPT는 어떻게 질문하냐에 따라 답변이 달라질 수 있다는 예제인거 같아 글을 올린다. - 첫번째 질문 redisHash의 인덱스 기능에 대해 설명해줘 라고 간단히 적어봤는데 그런 기능은 제공하지 않는다고 나온다. 내가 사용했는데 무슨소리야!!! - 두번째 질문 그래서 import 주소를 입력해 줬더니 바로 사과하고 알려준다. ㅋㅋㅋ 빠른 사과에 풀렸다. 내가 질문한 정보를 바탕으로 계속 답변을 해줘서 너무 좋은거 같다. 개인적으로 아직까진 bard보다 opanAI가 훨씬 똑똑하다.
❖ 개요 redis를 jpa처럼 사용할 수 있는 방법을 알아보려고 한다. value를 조금 더 쉽게 관리할 수 있고 데이터 관리(DB, REDIS) 부분이 통일성 있게 관리되어 가독성 측면에서도 좋아 보인다. ❖ GIT 주소 https://bitbucket.org/basic-setup/redis-repository/src/master/ ❖ 설정하기 1. dependency 추가 implementation("org.springframework.boot:spring-boot-starter-data-redis:3.1.1") 2. application.yaml 수정 - redis 접속 정보를 입력한다. spring: redis: host: localhost 3. 모델 및 repository정의 - @RedisH..
❖ 사용안 계층구조에서 다른 하위클래스를 여러개 가지고 있을 경우 이를 처리하기 위해서 사용합니다. 예를 들어 동물 하위에 강아지, 고양이, 토끼라는 하위 클래스가 있고 이들이 가지고 있는 필드와 처리하는 함수가 다를 경우 이를 하나의 필드로 구분하여 사용할 수 있습니다. ❖ 어노테이션 설명 @JsonTypeInfo : 다형성을 지원하는 Jackson 라이브러리로 json 직렬, 역직렬을 지원합니다. use : 다형성을 나타내는 정보를 어떻게 사용할지 지정합니다. - JsonTypeInfo.Id.NAME : 타입 이름을 사용하여 다형성을 처리합니다. - JsonTypeInfo.Id.CLASS: 클래스 정보를 사용하여 다형성을 처리합니다. - JsonTypeInfo.Id.MINIMAL_CLASS: 최소한의..
❖ 설명 문서 자동화를 위해 rest docs과 swagger를 함께 진행하였다. 설명이 조금 길긴 하지만 단계적으로 정리하여 이해하기 쉽도록 정리하였습니다. ● rest docs을 작성하고 swagger로 변환하는 과정이다. 1. restdocs-api-spec을 정의(test code 작성 및 문서설명) 2. OpenAPI3 spec으로 변환 RESTful API를 정의된 규칙에 맞게 API spec을 json이나 yaml로 표현하는 방식을 의미합니다. 3. OpenAPI3 spec 변환 문서를 swaggerUI에 적용 4. build 및 테스트 ❖ git url https://bitbucket.org/basic-setup/kotlin-restdoc-swagger/src/master/ ❖ 구현 1. ..
● resilience4j 소개 Resilience4j 는 사용하기 쉽고 가볍게 만들어진 장애허용(fault tolerance) 라이브러리이다. Netflix Hystrix 영감을 받았으며 java8과 함수형 프로그램밍을 위해 설계되었다. 다른 외부 라이브러리의 종속성이 없는 Vavr(https://www.vari.io)만 사용하여 가볍다. 코어모듈 코어모듈 간략 설명 circuitbreaker 호출결과에 따른 상태 관리 ratelimiter 호출횟수 제한 bulkhead 병렬(스레드) 제한 timelimiter 실행시간 제한 retry 호출 재시도 cache 캐시 구현제 정의 ● 코어모듈 소개 1. circuitbreaker (호출결과에 따른 상태 관리) 호출의 결과가 성공이 아닐 경우(오랜 시간 결과..
● LOCUST란? Locust는 사용하기 쉽고 스크립트 가능하며 확장 가능한 성능 테스트 도구입니다. Python 코드를 활용하여 개발자가 원하는 서버의 성능 테스트를 진행할 수 있습니다. 이번 문서에서는 기본적인 설치 및 성능 테스트 방법만 진행하여 기본 구조만 익히는것이 목표입니다. 더 자세한 테스트는 커스텀하여 활용할 수 있도록 참조 URL로 대체하겠습니다. ● LOCUST 설치 1. 테스트 스크립트 작성 Locust를 통해 서버 성능을 테스트할 스크립트를 작성합니다. 간단하게 http 로 "/ping" 을 실행하여 서버의 결과를 확인하는 것입니다. locustfile.py 파일 생성 from locust import HttpUser, task, between class Quickstart(Htt..
● 개요 QueryDsl의 전체 카운팅을 위해 fetchCount를 잘 사용하다가 해당 함수가 deprecated 되어 전체 카운트를 구하는 방법에 대해 고민이 많아졌다. 해당 이슈에 대해 많은 분들이 고민하지 않을까 생각이 든다. 누군가 명확한 해결책을 제시해 주길 바랬지만 아직 찾지 못했습니다. 그동안 사용한 QueryDsl을 걷어내고 nativeSql을 사용해야 하는것일까? 아니면 counting만 nativeSql을 사용해야 하는것일까? 그렇게 되면 동적 쿼리나 파라미터 세팅을 이중으로 관리하게 되어 더 복잡해 보여 hql을 nativeSql로 변경하여 counting 하는 방법일 고민해보았다. ● queryDsl로 counting 구하기 getTotalCount(JPAQuery jpaQuery)..
● 개요 캐시를 활용하여 데이터를 저장할때 로그인사용자, 메소드, 파라미터값등 다양한 필드별로 유니크한 key를 조합하여 데이터를 저장해야 하는 경우 cache key를 한곳에서 생성 관리해주고자 한다. spring cache의 활용편으로spring cache 적용은 이곳(https://myborn.tistory.com/24) 을 참고해 주세요. ● Custom KeyGenerator를 활용하기 1. Custom KeyGenerator 생성 - KeyGenerator 를 상속받아 구현합니다. target - instance, mehtod - 호출 메소드, params - 호출 메소드의 파라미터 인자입니다. 생성된 키값을 리턴하여 캐시의 key로 사용됩니다. import java.lang.reflect.M..