Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

메일 발송 히스토리를 기록한다. #306

Closed
woowahan-pjs opened this issue Aug 31, 2021 · 3 comments · Fixed by #377
Closed

메일 발송 히스토리를 기록한다. #306

woowahan-pjs opened this issue Aug 31, 2021 · 3 comments · Fixed by #377
Assignees
Labels
관리 화면 기능 New feature or request

Comments

@woowahan-pjs
Copy link
Contributor

(1-1, 1-2 중 선택해서 구현)

1-1. Amazon ES + Kinesis 사용해 이메일 전송 내역을 저장한다.

1-2. 데이터베이스에 전송 실패 또는 성공 기록을 저장한다.

  • 간단하지만, 사용성에 있어 1-1 방식이 더 좋다고 생각함.

관련 이슈: #281

@knae11
Copy link
Contributor

knae11 commented Sep 12, 2021

현황파악

  • 아마존 SES 에서 전송 내용에 대한 모니터링 서비스를 활용하여 알 수 있는 듯 합니다. 링크
  • 아마존 SES API를 통해 ErrorCode로 구분되어 오류내역을 알 수 있습니다. emailSender 부분에서 client.sendEmail(request) 부분에서 예외를 잡아 실패여부를 알 수 있는듯 합니다.
  • 예외가 발생할 경우, 이메일 실패 그 외에는 성공을 판단으로 진행하면 된다고 생각했습니다.

구상

  • 현재 서비스를 이용하지 않고 성공으로 가정한 뒤 DB에 전송 내역 테이블을 구상하겠습니다.
  • 현재 구현되어 있는 방식이 1명의 대상자에게 보내는 경우이므로, 여러명에게 동시에 보낼 경우에도 EmailHistory 단위로 성공, 실패 여부가 나온다고 판단하였습니다.
    image
  • 이메일 별, 사용자 별로 n:m 관계가 발생한다고 생각하여, email_history_applicant 테이블로 나눠 저장할 예정입니다.

고려사항

  • 다만, 이 경우 보내는 수 만큼 query 가 발생한다는 단점이 존재합니다.
  • 추후 user 영역이 생긴다면, email 정보는 user 테이블로 이동할 것이므로 applicant_id 부분은 user_id 로 변경해야 할 듯 합니다.
  • 이후, user 정보가 삭제되어 email이 삭제된다면 email_history 와 매핑되어 있는 user_id(applicant_id)는 유효하지 않은 값이 되는 현상이 발생합니다. 해당 내용에 대한 고려도 필요한지 궁금하네요 :)
  • 이런 방식으로 된다면, admin에 emailhistory를 관리하는 페이지 또한 생겨야 할 듯 합니다.
  • title 이 중복되는 것에 대해서는 신경을 안써도 된다고 하여 title 중복은 신경쓰지 않겠습니다. (이 경우, title 이 같다면 확인하고 싶은 이메일 정보를 sentTime 등으로 알게 되는 걸까요?)

@knae11
Copy link
Contributor

knae11 commented Sep 12, 2021

목적

  • 메일이 누락되었음(메일 전송에 실패하였음)을 파악하기 위함
  • 문의가 왔을 때, 메일 전송여부를 파악하기 위함
  • AWS를 사용하더라도 플랫폼에서 관리를 하기 위함

필요한 기능

  • 메일 전송과 관련하여 해당 이메일로 메일전송에 성공하였거나 실패하였는지 확인할 수 있어야 함

DB에 저장할 경우

  • 예시: 같은 OT 메일을 10명에게 보내면 10개의 row 가 생성된다. 위와 같이 n:m 관계를 형성하지 않는다.
  • 메일 템플릿(종류)와 관련한 내용도 다른 테이블에서 관리될 수 있다.

[email_history]

  • id(PK)
  • title
  • 메일종류(enum): 현재 설정되어 있는 메일 종류에 한하여 먼저 설정
  • email: email 값
  • 성공여부
  • note: 실패의 경우 사유도 알 수 있다면 좋음

기타

  • email 전송 API 가 먼저 개발된 후 진행한다. 예외발생에서 확인 가능한 부분과 어떤 방식으로 발생하는지 확인하고 구체화하기 위함.
  • 보내야 하는 이메일이 50개가 넘어가면 50개 단위로 끊어서 보낸다. 50명중 3개만 실패한다면 47개의 성공, 3개의 실패 기록이 남는다.
  • DB에 저장하는 것보다 반송 메일함을 지정하거나 훅을 통해 알림을 받는 방법으로 설정할 수도 있다.

참고링크

@knae11
Copy link
Contributor

knae11 commented Oct 6, 2021

이메일 히스토리 기획

  • 이메일이 성공, 실패 여부는 기록하지 않는다. (성공, 실패 여부는 AWS에서 확인한다.)
  • 모집, 평가 등과 비슷한 형식으로 관리된다.

간략한 기획 화면

  • 메일전송 탭에 들어가면 그리드로 전송한 메일이력을 보여준다.
    image
  • 메일보내기 버튼을 누르면 기존 구현된 메일발송 페이지로 이동된다. 로키구현PR
    image
  • 자세히 보기 버튼을 누르면 첨부파일을 제외한 메일 정보를 확인할 수 있다.
    • 메일 본문
    • 보낸 이메일 등 상세정보 확인가능

참고

  • 그리드에 받는 사람 수(row count)를 추가한다.
  • 메일 발송 버튼을 누르면 아래 과정이 실행된다. (즉, 1000명에게 이메일을 보내더라도 1개의 히스토리만 저장된다.)
    1. 발송 이력 저장
    2. AWS 메일 발송(50개씩)
  • 추후 예약발송등의 기능으로 확장 가능성을 염두하였다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
관리 화면 기능 New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants