이메일 송신 관련 로직

2023년 12월 13일 수요일

Today I Learned

날짜

2023년 12월 14일 수요일

내용

데모버전 어드민 페이지 생성과 관련된 PR의 머지를 기다리던 중, 새로운 Task를 받아 파악하고 있었다.

Notification Email Activation

  • 문제 인지

    우리 서비스에선 소비자에게 보내는 메일이 다양한데, 이 중 하나가 무언가 통지하는 이메일이다. 3가지로 분류되는데, 회원이 아닌 사람이 작성한 리뷰에 인증(Verification)을 요구하기 위해 보내는 메일이 그 중 하나이다. 다른 2가지와는 다르게 이 기능에만 활성화(activation) 조절 기능이 없는 상황이라 만들어야 한다. 여기에, 활성화 조절 시 현재 발송될 예정인 메일들에 대한 조치를 묻는 과정도 추가해야 한다.

  • 파악 순서

    목표를 인지했으니 이를 위한 기반 지식을 파악하고자 했다. 다음 5가지 과정으로 추렸다.

    1. Email은 언제, 어떻게, 무엇이 보내지는가?
    2. 기존의 ON/OFF 기능은 어떻게 작동되는가?
    3. 이를 적용할 수 있는가?
      1. 불가능하다면, 어떻게 구현할 것인가?
    4. 발송 스케쥴은 어떻게 관리되고 있는가?
    5. 이를 어떻게 컨트롤 할 수 있는가?
  • mail은 언제, 어떻게, 무엇이 보내지는가?

    메일을 보내는 함수는 어디에 있지? 검색해보니 register_email() 이라는 함수가 있다. 함수내에서 request를 받는 엔드포인트를 파악하고, 프론트의 어디서 여기로 요청을 보내는지 확인했다. 간단히 정리하면 다음과 같다. AWS의 SES를 이용하여 메일을 보내는 로직은 다음과 같다..

    1. 프론트에서 호출하여 서버에 보냄.
    2. payload에 email_sender_email를 포함시킴
    3. 백에서 받음
    4. query로 포함된 shop_id를 index로 하여 shop 찾음
    5. 이메일 데이터가 있다면 삭제 없으면 생성
    6. ses를 통해 발송
  • 이미 활성화 조절 기능이 있는 다른 Email의 로직은 무엇인가?

    우선 타겟으로 하는 데이터들을 받아오는 과정을 파악했다. 활성화가 바뀌는 대상은 누구이고 어떻게 받아올까?

    1. Touchpoints 메뉴에 들어가면 shop_access_codeNotification Type 으로 메세지들을 요청한다. (Type은 메뉴에 들어가서 처음 보는 화면에 Notification 이기 때문)
    2. Response.body의 메세지들을 messagingList에 담는다.
    3. messagingList를 setting_type(여기선 Notification)과 setting_type_detail을 조건으로 filtering 하여 selectedMessaging에 담는다.
    4. 이것을 딥카피하여 originSelectedMessaging으로 설정한다.

    아직 딥카피가 왜 발생하는지는 파악하지 못했다. 일단 기존에 activation을 조절하는 버튼이 있었기 떄문에, 버튼이 일어난 후 발생하는 호출을 확인하였다. 로직은 다음과 같다.

    1. activation 버튼을 누르면 데이터바인딩으로 use_setting_type_detail 이 바뀐다.
    2. 호출되는 함수에서, use_email 의 값이 use_setting_type_detail 값으로 변경된다.
    3. 서버에 보내 저장한다.

    이제 이 use_email 를 누가 어떻게 사용해서 메일을 보내는 지를 파악해야 한다! cron에 관련 로직이 정의되있는 것 같은데 그래서 언제 보내는데…

Production 배포

지난번 테스트서버에서 QA까지 완료한 Task가 실서버에 배포되었을 때 문제가 발생했다. 좌상단에 해당 계정의 다른 store들을 select-box의 형태로 출력해야 하는데 출력이 안되는 문제가 발생했다. 테스트서버에서도 없던 문제라 많이 당황했다.

빠르게 원인을 파악했는데, 데이터를 받아와야 할 session의 key가 존재하지 않았다. 이번 Task에서 내가 추가한 데이터라 설정이 잘못되었는지 찾아봤지만 로컬과 테스트 서버에선 전혀 발생하지 않는 문제였다. 실서버기 때문에 빠르게 해결하는게 중요했고 HELP 요청 했다.

배포 시점의 ECS 로그 상으로, 문제를 감지하고 이전 버전으로 롤백된 것으로 판단되었다고 하는데.. 결국 재배포 하니 말끔히 해결됐다. 말끔히 맞겠지..?

회고

앞으로 이메일 관련된 로직들을 많이 살펴보게 되었다. 어려워 보이는데 그래도 기대됌!