spring boot18 SMTP을 사용한 메일 통신은 어떻게 진행되는가?(With POP3, IMAP) 들어가기 일반 웹 통신(HTTP)와 다르게 메일 전송을 위해서는 SMTP를 사용한다.SMTP(Simple Mail Transfer Protocol)는 이메일을 전송하기 위해 사용되는 인터넷 표준 프로토콜이며, SMTP는 이메일 메시지를 작성한 후, 해당 메시지를 수신자에게 전달하는 과정에서 주로 사용된다. 이 프로토콜은 발신자의 이메일 서버에서 수신자의 이메일 서버로 메시지를 전송하는 역할을 한다.지난번 Spring boot를 상요하여 프로젝트를 진행할 때, JavaMailSender, Gmail을 통한 메일 전송 기능을 구현하였다. 구현하면서 드는 생각은, SMTP를 사용하였지만, SMTP 통신 과정이 어떻게 이루어지는지 정확히 파악하지 못하였다는 것이다. 학습을 하는 과정은 단순히 사용하는 것만이 아.. 2024. 10. 19. Spring boot - 로그백(Logback)을 통한 로그 파일 관리 들어가기 프로젝트를 진행 중, 실제 사용자로 인해 발생하는 예외 및 로그를 확실히 파악하기 위해서 로그를 기록한 파일을 정리하고자 하였다. 이를 위해 스프링에서 사용할 수 있는 로깅 프레임워크 중 하나인 Logback을 통해 진행하고자 한다. Logback은 SLF4J의 구현체이며 Spring Boot 환경이라면 별도의 dependency 추가 없이 기본적으로 포함되어 있어(spring-boot-starter-web), 간편하게 로그 처리를 진행할 수 있다. 아래와 같이 @Slf4j 어노테이션을 지정해 주는 것으로 해당 클래스 내에서 사용할 수 있으며, 로그 레벨(trace, debug, info, warn, error)에 따라 메서드를 사용하고 메시지를 남기면 쉽게 사용할 수 있다. @Slf4j@Re.. 2024. 10. 8. Spring boot - thymeleaf를 통한 html 파일 다국어 이메일 전송 들어가기 프로젝트 진행 중 메일 전송 기능을 진행하고 있다. 문제는 글로벌 사용자를 대상으로 하고 있기 때문에, 언어별 html 파일이 존재해야 한다. 하지만 언어별 html 파일을 만들고 비즈니스 로직에서 분기점을 만드는 방법은 번거로운 방법이며 가독성이 떨어질 것이다. 그래서 MessageSource를 활용하려고 한다. html 파일은 하나만 만들어 두고, 언어별 messages.properties 파일 내 html 텍스트를 지정하는 것이다. 이 글에선 이메일 전송을 위한 thymeleaf를 통한 html 파일 작성 시 한국어, 일본어, 영어 버전으로 작성하는 과정을 담고 있다. MessageSource에 대한 내용은 https://khdscor.tistory.com/133를 참고하길 바란다. S.. 2024. 9. 29. MessageSource와 Locale을 활용한 다국어 에러 처리(with Spring boot) 들어가기 현재 진행하는 프로젝트는 한국인만이 아니라 외국인 대상으로도 출시를 목표로 하고 있다. 그렇기에 평소에 하던 것처럼 한국어로만 앱을 구성하는 것이 아닌, 다국어 버전으로 작성해야 한다. 에러 메시지를 사용자에게 전달할 때, 언어에 따라 분기점을 만드는 것을 생각했지만, 이는 복잡성을 증가시킬 것이다. 이런 경우를 위해 Spring boot에서는 'MessageSource' 객체와 'Locale' 객체를 활용한 다국어 기능을 지원해 준다. MessageSource는 Spring 프레임워크에서 다국어 지원을 위한 메시지 처리를 담당하는 인터페이스이며, 이를 통해 다양한 언어에 맞는 메시지를 쉽게 관리하고, 사용자의 Locale에 해당하는 메시지를 반환해준다.Locale은 특정 언어나 국가, 지역.. 2024. 9. 19. Spring boot - @Async를 통한 메서드 비동기 실행 및 주의사항 이전 글(https://khdscor.tistory.com/131)에서 Spring boot에서 gmail smtp 서버를 통해 메일 전송 기능을 구현하였는데, 응답 시간이 오래 걸리는 것을 확인하였다.대략 4초가 걸렸는데, 사용자가 응답을 받는 데까지 기다리는 시간이 오래 걸리기 때문에 좋지 못한 상황이다. 그런데, 대부분의 사이트에서 인증 메일을 보낼 때는 대기 없이 바로 인증 메일을 전송했다는 응답을 받는다. 어떻게 이럴 수 있나 찾아보다가 @Async 어노테이션을 통해 특정 메서드를 비동기 방식으로 진행할 수 있다는 것을 알게 되었다. @Async 어노테이션이 추가된 메서드는 별도의 스레드에서 실행되므로, 사용자는 해당 메서드가 종료되기 전에 응답을 받을 수 있고, 비동기로 동작하는 메서드는.. 2024. 8. 29. Spring boot - email 발송 기능 구현(with Gmail) 들어가기 spring boot를 통해 프로젝트를 진행하던 중 초대장을 메일로 전송하는 기능을 구현해야 하여 메일 전송에 대해서 알아보고자 한다. 일반 웹 통신(HTTP)와 다르게 메일 전송을 위해서는 SMTP를 사용한다. SMTP(Simple Mail Transfer Protocol)는 이메일을 전송하기 위해 사용되는 인터넷 표준 프로토콜이며, SMTP는 이메일 메시지를 작성한 후, 해당 메시지를 수신자에게 전달하는 과정에서 주로 사용된다. 이 프로토콜은 발신자의 이메일 서버에서 수신자의 이메일 서버로 메시지를 전송하는 역할을 한다.아래의 사진을 봐보자. 1. 발신자는 자신의 이메일 클라이언트에서 이메일 메시지를 작성하고, 수신자의 이메일 주소를 입력한 후 메시지를 전송한다. 2. 메시지(및 첨부 파일.. 2024. 8. 27. 일일 단위로 환율 DB 저장을 위한 스케줄링 구현(with Spring boot) 들어가기 프로젝트 진행 중 예산 관리하는 기능에서 달러, 엔에 따라 변환해야 하는 기능이 있다.이를 위해 환율을 적용해야 하는데, 매일 변하는 환율에 따라 이를 적용해야 한다.이를 위해 한국수출입은행 환율 정보 조회 API를 사용하고자 한다.일일 1000번 호출이 가능하기에 데이터베이스에 저장해 놓았다가 환율 변환 시 저장된 값을 통해 변환을 할 수 있도록 할 것이다. 이를 위해선 데이터 베이스에 매일 환율이 업데이트가 필요하다. 그렇기에 스프링 부트에 내장되어 있는 @Scheduled 어노테이션을 사용할 것이다. 스프링 부트 및 JPA를 사용하였고 스프링 부트 버전은 3.2.5 이다. 본론 1. 한국수출입은행 환율 정보 조회 API 활용 우선 환율 정보를 조회하기 위한 API를 신청해야 한다. 아래.. 2024. 8. 11. JPA를 활용한 연관관계 데이터 저장: getReferenceById()를 쓰는 이유 왜 findById() 대신 getReferenceById()를 쓰는가 Spring boot와 JPA를 통해 프로젝트를 진행하는 중, Banner 엔티티와 Comment 엔티티, Member 엔티티가 있고 Comment 엔티티가 Banner, Member 엔티티와 다대일 관계를 맺고 있다고 하자. Comment를 저장하기 위해서는 Banner, Member 엔티티를 가져와야 한다. @Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class BannerComment { @Id @Column(name="banner_comment_id") @GeneratedValue(strategy = GenerationType... 2024. 7. 29. OpenFeign을 통한 외부 API (With Spring Boot) 들어가기 최근 프로젝트를 진행하면서 비즈니스 로직을 수행하는 도중 외부 API를 호출해야 하는 기능을 구현해야 하는 경우가 있었다. RestTemplate, WebClient 등 다양하게 있겠지만, Spring Data Jpa와 비슷하게 인터페이스와 어노테이션 기반으로 코드를 작성하는 OpenFeign이라는 것이 눈길을 끌었다. Spring Data Jpa를 자주 사용했던 나로서는 매우 직관적이고 간단하여 좋다고 생각하였고, 이번엔 OpenFeign를 사용해보기로 하였다.이 글에선 OpenFeign에 대해 공부한 내용과 적용 과정을 간단하게 작성한 글이다.OpenFeign을 포함하여 다른 외부 API를 호출하는 방법은 아래를 참고하길 바란다.https://jie0025.tistory.com/531 [.. 2024. 7. 13. 이전 1 2 다음