Spring Boot 3 버전에서 AWS SNS를 통한 SMS 발송하기 📌 서론 AWS에서 SMS 메시지를 보내는 기능을 구현할 때 흔히 "AWS SMS"라고 언급하는 것은 실제로 AWS SNS(Simple Notification Service)의 SMS 발송 기능을 사용하는 것을 의미한다. AWS에서는 SMS 메시지를 전송하기 위해 별도의 'SMSClient' 같은 클라이언트를 제공하지 않고, 이 기능은 SNS 서비스의 일부로 제공된다. AWS SNS는 다양한 형태의 알림을 지원하는 서비스로, 이메일, SMS, HTTP/S 알림 등을 보낼 수 있다. 특히 회원가입, 암호 재설정, 2단계 인증과 같은 상황에서 사용자에게 SMS를 보내야 할 때 많이 활용된다. AWS SMS 도입 이유 우리 프로젝트에서 회..
Spring/Spring Boot
헥사고날 아키텍처 - 클래스 의존성 주입 및 도메인, 엔티티의 객체 변환 과정 헥사고날 아키텍처를 도입할 때 주의해야 할 점에 대해서 알아보자 우리는 기존에 Spring에서 자주 사용되는 MVC 패턴을 사용하고 있었다. 그런데 팀원 중 한 분이 '헥사고날 아키텍처를 도입해 보는 것은 어떨까?'라는 아이디어를 제안하셨고, 그 아이디어를 함께 탐구하고자 한다. 이 글에서 다룰 내용은 해당 YouTube 영상에서 영감을 받았다. NHN FORWARD 22에서 김민중 개발자님의 '클린 아키텍처 애매한 부분 정해 드립니다' 발표 내용을 참고하여, 우리 프로젝트에 헥사고날 아키텍처를 도입했다. 아래 영상은 헥사고날 아키텍처를 적용하는 시점에 보면 굉장히 유용한 내용이니 꼭 봤으면 좋겠다. 유튜브 링크: https:..
스프링 부트 3 버전에서 p6spy를 적용하는 방법을 알아보자. build.gradle 아래 의존성을 build.gradle에 추가해 준다. // P6spy implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' 그리고 코끼리 모양의 'Load Gradle Changes'를 클릭해 주고 프로젝트를 실행한다. 그리고 쿼리가 실행되는 콘솔을 보면 이렇게 파라미터가 들어가 있다. 이렇게만 해도 사실 파라미터에 무슨 값이 들어가 있는지 확인은 가능하지면 여전히 한눈에 띄진 않는다. 콘솔 출력 형식을 바꾸려면 formatter를 커스텀해서 적용해 주면 된다. P6SpyFormatter 아래는 configure 설정 코드 내용이다. imp..
스프링 배치와 JPA를 활용해 누락된 SNS 이벤트 재발행 SNS 이벤트를 저장하는 이벤트 저장소에서 발행이 누락된 ('published = false') 이벤트를 재발행해주는 배치 작업을 생성해 보자 1. SNS 미발행 이벤트를 스프링 배치로 재발행하는 프로세스 설명 1-1. 이벤트 저장소와 SNS/SQS 메시지 처리 우리 프로젝트는 SNS 이벤트 발행 여부를 추적하는 이벤트 저장소를 갖추고 있다. 이벤트 저장소에 이벤트가 기록된다는 것은 해당 도메인 행위가 성공적으로 완료되었음을 의미한다. 이때, 이벤트의 'published' 속성은 기본적으로 'false'로 설정된다. 프로세스가 원활하게 진행되어 SNS 발행과 SQS 구독이 정상적으로 이루어진 경우, 해당 이벤트는 'published = true..
SNS MessageAttributes를 이용한 분산 시스템 추적용 Trace Id 전달 방법 프로젝트를 진행하면서 기존에 진행하던 방법에 많은 에러사항이 있다는 걸 느끼고 SNS, SQS를 사용하면서 Trace Id를 전달하는 새로운 방식인 MessageAttributes를 적용한 과정을 설명해 보겠다. 기존 로직과 코드에 대해서 상세한 설명은 아래 글에 작성되어 있다. [Spring Boot] 분산 시스템에서의 SNS/SQS 메시지 처리: 단일 책임 원칙과 Zipkin의 Trace ID 에러 핸들링을 중심으로 [Spring Boot] 분산 시스템에서의 SNS/SQS 메시지 처리: 단일 책임 원칙과 Zipkin의 Trace ID 에러 핸들링을 분산 시스템에서의 SNS/SQS 메시지 처리: 단일 책임 원..
스프링 배치에서 chunk와 JPA pageSize 설정의 관계성 배치 코드를 작성하면서 chunk와 JPA setPageSize 개념이 헷갈려 해당 내용을 자세히 정리해 봤다. 1. 스프링 배치의 setPageSize()와 chunk()의 차이점 스프링 배치에서 setPageSize()와 chunk() 설정은 종종 혼동될 수 있는데, 이 둘은 매우 다른 목적으로 사용된다. 1-1. setPageSize() 설정 (JpaPagingItemReader) setPageSize() 메서드는 JpaPagingItemReader를 사용할 때, 데이터베이스에서 한 번에 읽어올 레코드의 수를 설정한다. 이 설정은 데이터베이스와의 상호작용과 메모리 관리에 직접적인 영향을 미친다. 데이터베이스 효율성 측면에서 페이지 크..
스프링 부트 3에서 스프링 배치와 JPA를 사용하여 배치 테이블 자동 생성하기 스프링 부트 3 버전에서 적용되는 스프링 배치 적용 방법에 변경 사항이 있다. 더 자세한 내용은 아래 링크에 작성해 놨다. [Spring Boot] Spring Boot 3.X 버전에서 Spring Batch 적용하기 [Spring Boot] Spring Boot 3.X 버전에서 Spring Batch 적용하기 스프링 부트 3 및 스프링 배치 5의 새로운 기능과 변경사항을 알아보자 1. 공식에 따른 SpringBoot 3에서 스프링 배치의 변경된 점 스프링 부트 3과 함께 출시된 스프링 배치 5는 많은 중요한 인프라 yijoon009.tistory.com 1. 스프링 부트 3에서의 스프링 배치 변경 사항 스프링 부트 3에서는 ..
스프링 부트 3 및 스프링 배치 5의 새로운 기능과 변경사항을 알아보자 1. 공식에 따른 SpringBoot 3에서 스프링 배치의 변경된 점 스프링 부트 3과 함께 출시된 스프링 배치 5는 많은 중요한 인프라 변경사항을 포함하고 있다. 이러한 변경사항은 스프링 배치를 사용하는 개발자들에게 더 나은 데이터 관리, 효율적인 트랜잭션 처리, 그리고 유연한 배치 작업 구성을 가능하게 한다. 1-1. 데이터 소스 및 트랜잭션 매니저 업데이트 이전 스프링 배치 버전에서는 인메모리 작업 저장소가 사용되었다. 인메모리 작업 저장소는 데이터를 임시 메모리에 저장하는 방식으로, 애플리케이션을 재시작하면 데이터가 사라지는 단점이 있었다. 스프링 배치 5에서는 이 인메모리 작업 저장소 구현을 제거하고, 대신 JDBC(Java..