본문 바로가기

스프링9

Springboot - Sentry 연동 스프링 부트 프로젝트에서 에러 로그가 발생했을 시 센트리에 등록되고, 등록된 이슈를 슬렉으로 알람받을 수 있도록 합니다. 1. Sentry 프로젝트 생성하기 Project → Create Project 위와 같이 프로젝트를 생성하면, 의존성 추가 방법이나 사용 방법등이 나온 페이지가 나옵니다. 이제 의존성과 발급된 DSN을 스프링 프로젝트에 등록합니다. 2. Springboot 설정하기 센트리를 추가하고, 관련 설정은 logback을 통해 관리할 것입니다. dependencies { implementation 'io.sentry:sentry-spring-boot-starter:5.7.0' implementation 'io.sentry:sentry-logback:5.7.0' } build.gradle 에 .. 2022. 7. 15.
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.