이메일 전송 기능 구현 (Mailgun, Feign)

모두·2025년 2월 14일

안녕하세요. 오늘의 포스팅은 feign 을 도입해서 프로젝트에서 이메일 전송 기능을 구현해보고자 합니다. 먼저 Feign 이라는 친구를 가볍게 소개하고 기능 구현 과정도 소개하려합니다.

소개

  1. Feign 은 Netflix 에서 개발된 Http client binder 입니다.
  2. Feign 을 사용하면 웹 서비스 클라이언트를 보다 쉽게 작성할 수 있습니다.
  3. Feign 을 사용하기 위해서는 interface 를 작성하고 annotation 을 선언 하기만 하면됩니다.
  4. 마치 Spring Data JPA 에서 실제 쿼리를 작성하지 않고 Interface 만 지정하여 쿼리실행 구현체를 자동으로 만들어주는 것과 유사합니다.

RestTemplate 을 만들어 보셨던 분들은 많은 코드의 축소를 느끼게 되실겁니다.

의존성

기본적으로 필요한 의존성이 있습니다. 아래 의존성은 feign 을 사용하기 위한 최소의 의존성입니다.

또한 외부 라이브러리 이기 때문에 springCloudVersion의 버전을 확인해서 넣어준다.
// https://spring.io/projects/spring-cloud 의 Release Trains 부분을 보세요.

  • springCloudVersion 의 경우 spring boot 버전에 맞는 버전을 사용을 하셔야 합니다.
  • 주석에 있는 링크로 이동하셔서 사용하시는 spring boot 버전에 맞는 버전을 사용해주세요.

Feign 사용하기

  1. @EnableFeignClients 을 사용하셔야합니다.
    root package 에 있어야 하며, 그렇지 않은 경우 basePackages 또는 basePackageClasses 를 지정해주셔야 합니다.
  2. @EnableFeignClients 은 지정된 package 를 돌아다니면서 @FeignClient 를 찾아 구현체를 만들어 줍니다.

기본설정 값 및 override

  • feign 를 하다보면, 기본으로 설정되는 bean 들이 있습니다.
  • Spring 을 사용하는 환경이라면, org.springframework.cloud.openfeign.FeignClientsConfiguration 에서 어떤 Bean 이 만들어지는지 보면 됩니다.
  • default 설정을 override 하고 싶다면, configuration 에 설정된 값을 넣으면 됩니다.

메일 보내기

  • 서비스를 구현하여 mailgun 에서 요구하는 from, to, subject, text 를 담아서 보낼 준비를 하면 됩니다
  • 이 때 from 에서 제공되는 도메인 값을 잘 보시고 담아주세요 .
  • 현재 API KEY 값은 안나와 있는데 저는 KEY 값을 FeignConfig 라는 파일을 만들어 따로 빼주었습니다.

그래서 구현 동작의 flow 를 살펴보면 FeignConfig 에 대한 Configuration 으로 Qualifier 가 "mailgun" 일 때 (MailClient를 보면 됨) BasicAuthRequestInterceptor 를 사용하여 header 에 api 라는 이름으로 필요한 KEY 를 주입시켜서 진행하여 간단히 되는지 테스트 하였습니다. 이후 메일이 잘 보내지는 걸 확인 한 뒤 KEY 값이 노출되지 않도록 간단한 암호화를 진행하였습니다.

암호화

암호화를 방법은 여러가지가 있는데 이번에는 VM Option 을 활용하여 암호화를 해보았다. mailKey 라는 필드를 만들고 @Value 어노테이션을 추가하여주었다 . 이후 edit 에 VM 을 추가해주고 -Dmailgun.key="key값" 을 추가하면 런타임시 key 값이 주입되어서 잘 작동하는 것을 볼 수 있다.

결과

이후에 스웨거로 다시 한번 메일을 전송하여 봐도 200 이 뜨면 잘 발송되는 것을 확인 할 수 있다.

그렇다면 제가 보낸 이메일 함을 확인해 볼까요?? 결과는 아래와 같이 잘 와있는 것을 확인할 수 있습니다.

0개의 댓글