❖ 개요 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 (호출결과에 따른 상태 관리) 호출의 결과가 성공이 아닐 경우(오랜 시간 결과..
● 개요 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..
● 개요 일정기간 변경되지 않는 데이터에 대해 잦은 호출로 인하여 서버 자원 낭비를 방지하고자 cache를 활용하고자 한다. ● java cache 라이브러리 java cache에 활용되는 라이브러리를 살펴 보았다. 1. springboot cache springboot에서 지원하는 cache로 auto cofingired되어 설정에 대한 부분이 편리하다. (https://spring.io/guides/gs/caching/) 2. caffeine cache 캐시를 읽고 쓰는 속도에서 가장 좋은 성능을 보여주는 라이브러리로 설정도 편리하다. 속도 측정 참고- https://github.com/ben-manes/caffeine/wiki/Benchmarks 3. ehcache cache 라이브러리중 가장 많은..
● 개요 deep copy의 종류와 장단점을 확인 하고 실행시간을 체크한다. ● git 주소 https://bitbucket.org/technology-team/deep-copy/src/master/ ● deep copy 종류 더 많은 라이브러리가 deep copy지원하지만 개인적으로 자주 사용하는 라이브러리로 추려보았다. java 지원 deep copy library를 deep copy - Cloneable Interface - Copy Constructor - Copy Factory - lombok - ObjectMapper deep copy 시나리오 account안에 company object가 존재하며 deep copy 실행 후 account와 company가 모두 deep copy가 되는지 확인..
java에서 이미지 메타 정보를 추출할 경우 rgb와 cmyk의 포멧이 다를 경우 지원하지 않는 타입(Unsupported Image Type) 에러가 발생한다. rgb와 cmyk의 read는의 경우 다르게 구현하여야 한다. ● 이미지 포멧 RGB 이미지 메타 추출 try { String imageUrl = "http://RGBimageURL"; imageUrl = UriUtils.encodePath(imageUrl, Charset.forName("utf-8")); InputStream input = new URL(imageUrl).openStream(); BufferedImage image = ImageIO.read(input); int width = image.getWidth(); int height..
- Exception 발생시 특정 횟수만큼 재시도를 진행하고자 한다. - 저같은 경우 주로 다른 애플리케이션을 API로 통신시 네트워크등의 이슈로 문제가 발생시 재시도를 진행하고자 할때 사용한다. - 방법은 두가지가 존재한다. spring에서 지원하는 spring-retry 와 net.jodah.failsafe 의 RetryPolicy이다. ● git 주소 technology-team / failsafe-retry — Bitbucket ● @Retryable 어노테이션 1. dependencies 설정 - spring-retry 사용 시 aspectjweaver 가 필요하다. implementation 'org.springframework.boot:spring-boot-starter' implementa..