Skip to content

[BE] 이메일 서비스 적용 과정

Jeongmin edited this page Dec 13, 2023 · 8 revisions

이메일 서비스 적용 계기

프로젝트 4주차를 마무리하며 대부분의 API를 완성하였다. 물론 iOS-서버 연결 과정에서 발생하는 추가 수정 / 에러 해결 작업이 남아있는 상태였으나 iOS측 요청이 들어오기 전까지 손 놓고 기다리기만 할 수는 없다고 생각했기 때문에 어떤 기능을 추가할 수 있을지 고민해보았다.

물론 초기 기획 단계에서 시간이 남으면 구현해보자고 얘기했던 기능들이 있었지만, 백엔드만 작업이 마무리가 된 상태였고 iOS측 작업이 아직 남아있었기 때문에 최대한 iOS 작업을 줄일 수 있는 추가 기능을 새로 고민해보아야 했다.

고려해보았던 추가 기능

  • 카카오 로그인 추가

    공식 문서를 읽어보니 생각보다 iOS측이 처리해야 할 요소가 많아 보여서 포기하였다.

  • 휴면계정 처리

    1년 이상 미접속한 회원들에게 휴면 처리 안내 메일을 보내고 휴면 계정의 데이터를 블라인드 처리하는 기능을 구현해보려고 했으나, 검색 도중에 법이 개정되어 더 이상 별도의 휴면회원 관리가 필요하지 않게 되었다는 사실을 알게 되었다. 구현을 해 볼수는 있겠으나, 굳이 필요한 기능이 아니라고 생각되어 포기하였다.

  • 카카오 알림톡 서비스

    우리 서비스와 카카오 알림톡을 연계하여 사용해보고 싶어 연결 방법을 찾아본 결과 사업자 등록이 필요하다는 것을 알게 되고 포기하였다.

최종적으로 추가하게 된 기능

앞선 '휴면계정 처리' 아이디어를 포기하기가 아쉬워서 고민하던 끝에, 새로운 IP 환경에서 로그인 할 경우 보안 경고 이메일을 보내는 기능을 구현해보기로 결정했다.

구현 방식 고민

채택한 기능의 핵심 포인트는 서버에서 메일을 보낼 수 있어야 한다! 였다. 그래서 어떤 방법이 있는지 찾아본 끝에 크게 두 가지 방법이 있다는 것을 알게 되었다.

nodemailer와 @nest-modules/mailer 모듈 사용

우리가 프로젝트 내내 참고했던 교재인 NestJs로 배우는 백엔드 프로그래밍에서 소개한 모듈이기도 하고, 구글 검색 & GPT 질문 결과 알게 된 방식이었다. 구현 방법을 찾아보니 큰 어려움 없이 구현 가능했지만 치명적인 문제점이 있었다.

모듈을 설치하니 아래와 같은 경고 메세지가 떴고,

Untitled

NestJs로 배우는 백엔드 프로그래밍 교재에서도 이 모듈을 실사용하는것을 추천하지 않는다는 내용을 발견하였다.

image

그래서 멘토님께 조언을 구해본 결과 외부 이메일 서비스가 존재한다는 사실을 알게되었다.

외부 이메일 서비스 사용

검색 결과 알게 된 이메일 서비스는 아래 4가지 정도였다.

  • Sendgrid
  • Mailchimp
  • NCP Outbound Maileer
  • AWS SES (Simple Email Service)

Sendgrid와 Mailchimp의 경우 한국어 자료를 찾을 수 없어서 후순위로 미뤄두었고, AWS와 NCP 사이에서 고민하다가 크레딧을 제공받는 중인 NCP에서 이메일 서비스를 이용하기로 하였다.

그런데 NCP 콘솔에서 Outbound Mailer 서비스를 신청이 안되는 것이다...! 신청한 서비스 수가 많아서 그런가 싶어 고객센터에 문의해보았다.

Untitled

아쉽게도 현재 서비스 사용이 불가능하다는 답변을 받아 AWS SES를 이용하기로 결정했다.

구현 과정

물론 최종적으로는 AWS SES를 이용해야겠다고 결심했으나, 자료가 많지 않아 구현에 얼마나 시간이 소요될 지 예상하기 어려운 상황이었다. 그래서 일단은 모듈을 사용해서 구현해두고, 추후 이메일 서비스로 마이그레이션 하기로 결정했다.

Clone this wiki locally