Spring Event Deep Dive
·
Spring
Spring EventSpring Framework에서 제공하는 이벤트(Event) 객체가 있습니다.이 객체는 `ApplicationContext`가 제공하는 기능의 일부인데요, Spring에 내장된 이벤트들을 이용해 특정 상황에서 원하는 동작을 수행하도록 개발할 수 있는 기능입니다.Spring Event 동작 원리동작 과정이벤트는 하나의 쓰레드에서 동작합니다. 즉, 동기적으로 동작합니다.한 쓰레드 내부에서 발행자가 이벤트를 발행(publish)하면 수신자가 이벤트를 수신(listen)하여 이벤트를 처리합니다.이벤트 발행자(Event Publisher)a. ApplicationEventPublisher 에서 이벤트를 발행한다.실제로 이벤트를 발행하는 코드를 작성할 땐 `ApplicationEventPub..
[Spring] MockMvc 사용 시 Page 인터페이스의 직렬화 문제
·
Spring
환경Spring Boot 3.3.4Amazon Corretto 17.0.11문제 발생@BeforeEachvoid setUp() { mockMvc = MockMvcBuilders.standaloneSetup(replyController) .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) .build(); // 생략 ..}@DisplayName("published 값에 따른 편지와 1:1로 대응하는 답장을 페이징으로 응답할 수 있다")@ParameterizedTest@ValueSource(booleans = {true, false})void success_p..
[Spring] 회원탈퇴 시 Kakao OAuth2 연결끊기: REST API로 연결끊기 (OpenFeign)
·
Spring
이 포스팅은 회원탈퇴 로직을 구현할 때 kakao REST API 로 `연결 끊기`를 Spring 프로젝트에서 적용하는 방법에 대한 글입니다.kakao rest api 공식 문서 바로가기 Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com 공식 문서에 따르면 REST API로 `연결 끊기`를 하려면 카카오 인증 서버(https://kapi.kakao.com/v1/user/unlink)에 요청을 보내야 합니다.요청과 응답 예시는 공식 문서에서 가져왔습니다. 사용자 로그인 시 액세스 토큰을 세션이나 RDB, Memory DB 등에 저장할 수 있지만, 서비스..
[Spring] 직렬화/역직렬화 시 'is' prefix 가 안붙는 이유
·
Spring
분명 DTO 에 'is'가 있거든요유저의 정보 변경 `DTO` 에 `boolean` 타입의 필드들이 있습니다.Lombok의 `@Getter`도 붙여줬기 때문에 이 DTO가 직렬화되면 JSON 필드 이름은 `isAgreeToTerms` 같이 될 것이라고 예상했습니다.직렬화는 됐는데 'is'가 없어요직렬화된 JSON 필드를 `swagger ui`를 통해 확인해 보겠습니다. 확인해 보니, `is` prefix 가 제외돼서 직렬화된 것을 확인할 수 있었습니다.예상과 다른 필드 이름은 백엔드와 프론트엔드의 데이터 교환에서 장애를 발생시킵니다.프론트엔드 개발자는 `swagger`에 있는 대로 필드 이름을 사용하기 때문입니다. 위의 예시 코드에선 `boolean` 타입이 문제가 될 수 있습니다.`is`가 없는 JSO..
[예약 대기 시스템] 4. 컨테이너 환경에서 테스트하기 (Testcontainers)
·
Project
이전 포스팅에서 애플리케이션을 컨테이너화 하기 위해 도커를 사용했습니다.(이전 포스팅 : 2024.09.13 - [Project] - [예약 대기 시스템] 3. 프로젝트 설정 (어드민 시스템)) [예약 대기 시스템] 3. 프로젝트 설정 (어드민 시스템)2024.09.11 - [Project] - [예약 대기 시스템] 1. 답답하니까 직접 만들게요2024.09.12 - [Project] - [예약 대기 시스템] 2. 어드민 시스템 데이터 모델링 (개체-관계 모델, ERD) 이전 포스팅에선 어드민 시스템dev-gallery.tistory.com 테스트 코드를 작성하며 컨테이너 환경에서 테스트를 하는 것이 보통 귀찮은 일이 아님을 느꼈습니다.매번 테스트를 할 때마다 MySQL 컨테이너를 띄워야 하고, 독립된 ..
[RabbitMQ] 3. 스프링 부트에서 RabbitMQ 설정 방법
·
Message Broker
이전 포스팅에선 AMQP 에 대해 살펴봤는데요, 2024.08.15 - [Message Broker] - [RabbitMQ] 1. 메시지 브로커(Message Broker)에 대해2024.08.16 - [Message Broker] - [RabbitMQ] 2. AMQP 란? 이번엔 스프링 부트(Spring Boot 3.x)에서 RabbitMQ 를 설정하는 법을 알아보겠습니다. 1. RabbitMQ 의존성 추가먼저, https://start.spring.io/ 에서 프로젝트를 초기 설정할 때를 예시로 들겠습니다.ADD DEPENDENCIES 버튼을 눌러 "rabbitmq" 로 검색하여 의존성을 추가합니다.그러면 build.gradle 에는 다음과 같이 적용되어 있습니다.dependencies { impl..
[Spring Batch] ItemWriter 가 List<T> 를 전달받으려면? (Spring Batch 5)
·
Spring
스프링 배치를 사용하다보면 ItemWriter 에 List 같은 Collection 을 전달할 때가 있습니다.저는 테스트를 위해 숙소 예약건 생성을 배치로 처리하는 과정에서 필요했었는데요, 이 과정에서 만난 문제와 해결 방법을 기록하기 위해 글을 작성했습니다.마주친 문제 : ItemWriter 는 이미 Chunk 으로 받는다설명은 Spring Batch 5 에서 구현체 JdbcBatchItemWriter 기준으로 설명합니다.해당 구현체의 `writer()` 메서드는 아래와 같습니다.구현체 JdbcBatchItemWriter 의 write() 메서드 살펴보기public void write(final Chunk chunk) throws Exception { if (!chunk.isEmpty())..