본문 바로가기

개발 관련/spring10

Caffeine(캐시 라이브러리) 사용 이번에 회사에서 학습기에 들어가는 화면에 대한 관리를 하는데, 자주 바뀌는 사항이 아니다보니, 캐쉬를 적용하자는 말이 나왔다. 캐시라고 하면 레디스(redis) 를 생각했었는데, caffeine 이라는 것이 나와서, 적용해볼겸 정리해보려고 한다 . 1. Caffeine Java 8을 기반으로 하는 High Performance 캐싱 라이브러리 빈도 및 최근 데이터에 따라 사이즈가 넘어갈 경우 eviction(방출?) 최근 접근 or 쓰기 에 따라 만료 시간 설정 비동기적으로 refresh 가능 key, values 가 자동적으로 weak reference 로 wrap cache access 에 대한 statistics 제공 등등.. 이 있다. 2. 사용 우선, maven 을 사용하므로 pom.xml 에 .. 2022. 7. 14.
eventPublisher 와 eventListenr 사용 서론 최근 마이크로미터를 사용하여 해당 서비스의 접속 카운트를 표시할까 해봤다. (오로지 흥미 위주로..) 처음에는 MeterRegistry 와 Counter 를 직접 사용하여 해당 메소드에 추가해주는 식으로 구현했었다. 구현하고 보니 정작 이거 counter 부분에서 에러가 나면 어떻게 되지? 중요 비즈니스 로직과는 무관하게 진행되야 하는건데 라는 생각이 들어서 다른 방법을 알아보던 차에 다른 방법을 생각해봤다. 처음에는 인터셉터의 afterCompletion 을 사용해봤으나, lateinit 을 이용하고 해도 계속 초기화 문제가 발생해서 이리저리 해보다가 결국은 이렇다할 해결책을 못 찾고(코틀린과 스프링에 대한 지식이 부족...), 다른 방법을 찾다가 EventListener 을 통해 비동기 방식으로.. 2022. 7. 14.
Feign 사용 (2) Circuit Breaker 적용 API 통신에서 서킷 브레이커를 적용해야 한다는 얘기를 들었고, 이 역시 처음 듣는 용어라 일단 이해를 위해.. Circuit Breaker 란? 회로차단기로 불리며, 전기적 회로를 과전압 등으로부터 보호하기 위한 장치 시스템에서 장애의 확산을 막기위해 (결함을 격리) 사용되는 패턴의 일종 Netflix 의 Hystrix가 있음 즉, 통신에 문제가 있을 때, pool 을 계속 점유하는 현상을 막기 위해, 차단기를 open 하여 격리한다고 생각하면 될 거 같다. 뭔가 개념적으로는 이해가 되면서도 헷갈리는 개념이랄까나.. (이해안됐다는 소리...?) 여하튼 본론으로 들어가서 이전에 적용했던 Feign 에 서킷브레이커를 적용시켜보도록 함. resilience4j-feign 을.. 2022. 7. 14.
Feign 사용 (1) 이번 API 통신을 하면서 Feign 을 사용해봤는데, 어떻게 사용했는지 적어보고자 함. Feign 이란? Java to HTTP client binder Netflix 에서 개발함 https://github.com/OpenFeign/feign 이라고 간단하게만, API 통신을 이용해서 개발할 필요가 생겼는데, API 를 통하여 개발해 본 적이 없기에 그래서 무작정 구글링 시작 -> httpClient 를 이용해서 통신하는 것을 알게 됨 -> 관련 코드를 보면서 분석 시작 -> Spring 에서는 restTemplate 를 이용한다는 얘기를 들음 -> restTemplate 구글링 및 테스트 코드 작성 -> Feign 이라는 것을 들음 -> Feign 적용해보자 라는 흐름으로 진행. (무려 하루만에 진행.. 2022. 7. 14.
HandlerMethodArgumentResolver 사용 이전에 회사에서 다른 프로젝트 소스를 보다가 http 헤더에서 보낸 정보를 controller 단에서 바로 vo 로 매핑해주는 코드를 발견했다. 당시에 이거 꽤 유용하게 쓸 수 있겠네. 하고 지나가기만 했었는데, 이번에 기회가 생겼다. 목표 클라이언트의 IP 를 컨트롤러 단에서 바로 받아서 처리하고자 함. 1. ClientInfo 생성 @Data @NoArgsConstructor @AllArgsConstructor public class ClientInfo { private String clientIp; } 바인딩될 객체를 생성 2. ClientResolver 어노테이션 생성 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) publi.. 2022. 7. 14.
JPA 어노테이션 1. NotFound org.hibernate.annotations 에 포함되어 있음 @JoinColumn 등으로 조인을 했을 시, 조인한 테이블의 값이 null 일 경우 EntityNotFoundException 이 발생하는데, 이럴 경우 @JoinColumn("dto_id") @NotFound(action = NotFoundAction.IGNORE) private DTO dto; 을 해주면 Exception 이 발생하지 않음. Ignore, Exception 2개의 값이 있는데 default 는 Exception 인 모양이다. 2. Transient javax.persistence 에 포함되어 있음 Entity 에 변수는 있으나, 컬럼과의 매핑을 원하지 않는 경우 사용 @Transient privat.. 2022. 7. 14.