본문 바로가기

Spring19

Jedis, Lettuce, Redisson. 레디스를 위한 세 가지 자바 클라이언트 세 가지 레디스 자바 클라이언트Jedis제디스(Jedis)는 동기식 작업을 지원하는 레디스 클라이언트입니다. 다른 클라이언트에 비해 간단하고 사용하기 쉬운 API를 제공합니다. 제디스 인스턴스는 스레드 안전(Thread-safe)하지 않기 때문에 멀티 스레드 환경에서 사용하려는 경우 제디스풀(JedisPool)을 사용해야 합니다.Lettuce레투스(Lettuce)는 동기, 비동기, 반응형 작업을 지원하는 레디스 클라이언트입니다. 제디스와 달리 스레드 안전하기 때문에 여러 스레드에서 안전하게 사용할 수 있습니다.Redisson레디슨(Redisson)은 다양한 분산 객체를 제공하는 레디스 클라이언트입니다. 다른 두 클라이언트가 레디스의 기본 자료구조를 다루는 API만 제공하는 데 비해 레디슨은 분산된 환경에.. 2024. 10. 30.
스프링 @Retry를 이용한 재시도 처리하기 Spring RetrySpring Retry 프로젝트는 스프링 애플리케이션에 대해 명령형 또는 선언적 재시도 처리를 지원합니다. 의존성이를 사용하기 위해서는 다음의 의존성을 추가해주어야 합니다. Spring Retry는 스프링 AOP를 이용하여 선언적 방식을 제공합니다. 따라서 AOP 의존성이 필요하며 다른 스타터 의존성에 AOP 의존성도 포함되어있다면 생략해도 됩니다.implementation 'org.springframework.boot:spring-boot-starter-aop'implementation 'org.springframework.retry:spring-retry'Retryable사용 방식은 간단합니다. 별도의 configuration에 @EnableRetry를 추가한 뒤, 재시도 처리를.. 2024. 6. 12.
스프링 @Async를 이용한 비동기 실행 적용하기 Spring Async@Async비동기 실행을 위한 @Async를 사용하기 위해서는 먼저 적당한 @Configuration 클래스에 @EnableAsync를 추가해주어야 합니다.@EnableAsync @Configuration public class AsyncConfig {}그런 다음 비동기적으로 실행되길 원하는 메서드에 @Async 어노테이션을 추가하면 됩니다. 다음은 Spring Event의 이벤트 리스너의 비동기 실행을 적용하기 위해 @Async를 사용하는 코드입니다.@Async @TransactionalEventListener public void createDefaultLinkBundle(CreateMemberEvent event) { CreateLinkBundleCommand.. 2024. 6. 11.
스프링에서 외부 API 호출을 테스트하는 방법(feat. RestClient) RestClient는 Spring 6.1 버전부터 추가된 동기식 HTTP 클라이언트로 기존의 동기식 HTTP 클라이언트인 RestTemplate에 비해 훨씬 더 현대적인 API를 제공합니다.RestClient의 테스트 방법을 찾던 중 유효하게 사용할 수 있는 두 가지 방법에 대해 알게 되어 기록합니다. @RestClientTest@RestClientTest를 사용하면 Jackson, GSON 등의 클라이언트 테스트와 관련된 bean 구성만 적용하여 최소한의 컨텍스트로 테스트가 실행됩니다.이 때, 테스트를 위해 사용하는 MockRestServiceServer와 RestClient가 바인드되어야 하기 때문에 RestClient를 사용하는 bean은 생성자에서 RestClient.Builder를 파라미터로 .. 2024. 5. 20.
스프링 이벤트(Spring Event) 사용해보기 스프링 이벤트를 사용하면 관심사를 분리하고 패키지 간의 의존성을 줄일 수 있습니다. 개인 프로젝트를 진행하면서 이래저래 사용하고 있어 짤막하게 정리해보려고 합니다. 1. 스프링 이벤트 개요 다음의 내용은 스프링 공식 문서 Standard and Custom Events 항목의 소개를 번역한 것입니다. ApplicationContext의 이벤트 핸들링은 ApplicationEvent 클래스와 ApplicationListener 인터페이스를 통해 제공됩니다. ApplicationListener 인터페이스를 구현하는 bean이 컨텍스트를 통해 배포되면 ApplicationEvent가 컨텍스트에 발행될 때마다 bean이 알림을 받습니다. 이는 표준 옵저버 디자인 패턴입니다. 스프링 이벤트의 발행은 이벤트를 발행.. 2024. 2. 12.
로그 세팅하기 지난 금요일, 애니프렌즈 프로젝트의 백엔드와 프론트엔드 API 연동을 시작했습니다. 하지만 중간 중간 api가 연동이 잘 안될 때마다 문제를 확인하기 위해 INFO, WARN 여러 레벨의 로그가 기록된 콘솔을 들여다보는 것은 번거로운 일이라는 것을 절실히 느꼈습니다. 따라서 이번 이슈를 해결함으로써 달성하고자 하는 목표는 두 가지 입니다. 첫째, 예외와 API 요청 로깅하기 둘째, 로그 레벨 별 파일로 출력하기 이를 통해 클라이언트로부터의 요청에 응답하는 과정에서 어떤 문제가 발생했는지 훨씬 쉽게 파악할 수 있을 것이라 기대합니다. AOP 적용하기 프로젝트 초기, 예외 상황에 대해서는 AOP를 통해 로그를 남기는 것으로 계획하였습니다. 그러나 이번에 프론트엔드와 연동을 진행하며 어떤 요청이 들어왔는지에 .. 2023. 11. 19.