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

[Feat/#412] 이메일 OPEN, DELIVERY DELAY 이벤트 처리 #419

Merged
merged 19 commits into from
Sep 27, 2024

Conversation

belljun3395
Copy link
Collaborator

@belljun3395 belljun3395 commented Sep 20, 2024

🎫 연관 이슈

resolved: #412

💁‍♂️ PR 내용

  • 이메일 OPEN, DELIVERY DELAY 이벤트 처리

🙏 작업

  • 이메일 DELIVERY, SEND 이벤트는 단순히 기록만 합니다.
  • 이메일 DELIVERYDELAY 이벤트는 현재는 단순히 기록만 하지만 추후 관련된 처리 할 예정 (ex 기록후 해당 멤버는 ses가 아닌 java email로 전송)
  • 이메일 OPEN 이벤트는 send_article_event_history에만 누적중
    • @hun-ca article_view_his에도 누적하는게 좋을까요..? 총 뷰 계산할때 뷰 테이블이 분산되면 문제가 될 수 있지 않을까 해서요..?!

🙈 PR 참고 사항

📸 스크린샷

스크린샷 2024-09-21 오전 12 41 56

다른 것은 기존 로그 컨트롤러와 동일해서 OPEN 이벤트만 확인하였습니다.

🤖 테스트 체크리스트

  • 체크 미완료
  • 체크 완료

@github-actions github-actions bot added config 설정 파일과 관련된 내용을 다룰 때 사용됩니다 feature 새로운 기능을 만들 때 사용됩니다 labels Sep 20, 2024
Comment on lines +1 to +12
-- 전송 아티클 이벤트 히스토리 테이블
CREATE TABLE SEND_ARTICLE_EVENT_HISTORY
(
id BIGINT NOT NULL AUTO_INCREMENT,
member_id BIGINT NOT NULL,
article_id BIGINT NOT NULL,
message_id VARCHAR(255) NOT NULL,
event_type_cd TINYINT NOT NULL,
send_type_cd TINYINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전송 아티클 이벤트 히스토리 테이블 추가하였습니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 테이블은 아직 조회하는 경우는 없는건가요? 따로 설정된 인덱스가 없는거 같아 여쭤봅니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네네! 이번 PR은 우선 해당 이벤트들을 누적하는 것까지 생각하고 구현한 PR이라 인덱스는 따로 추가하지 않았어요!

).let {
when (EmailLogEventType.fromCode(record.eventType)) {
EmailLogEventType.DELIVERYDELAY -> {
TODO("배송지연 이벤트 발생시 처리 로직 추가")
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

배송지연 이벤트가 발생하면 해당 이벤트를 받은 멤버는 ses가 아닌 java로 메일을 보낼려고 합니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우리 SES는 언제 추가됐었지..

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

자바로 보내니까 넘 오래걸려서..! AWS로 인프라 옮기고 바로했었어요..!!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가격 얼마나 나가나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가격은 다 프리티어 안으로 사용가능한 수준임다!
아 그리고 지금 인프라 총 가격은 10달러고 계정이 2개라 20달러 나오고 있습니다!!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생각보다 많이나오네 이거 최대한 빠르게 공유해서 N빵 하던지 해야 할거 같네요

Comment on lines +35 to +43
articleLogService.insertOpenEvent(
InsertOpenEventDto(
memberId = memberId,
articleId = record.articleId,
messageId = record.messageId,
eventType = EmailLogEventType.OPEN.code,
sendType = record.sendType
)
)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

send_article_event_history 말고 기존의 뷰 기록을 누적하는 article_view_his에도 동일한 기록을 추가해야하나 고민중입니다...
view 기록이 두개의 테이블에 나뉘어들어가는 것이 맘에 걸려서..

Copy link
Member

@hun-ca hun-ca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일단 제 생각은 정책상 아티클 조회수 카운팅은 유저 별 아티클 당 최대 1회로 제약이 없기 때문에, 메일 내에서 아티클을 읽는 경우에도 뷰 카운트가 올라가는게 맞을거 같습니다

Comment on lines +1 to +12
-- 전송 아티클 이벤트 히스토리 테이블
CREATE TABLE SEND_ARTICLE_EVENT_HISTORY
(
id BIGINT NOT NULL AUTO_INCREMENT,
member_id BIGINT NOT NULL,
article_id BIGINT NOT NULL,
message_id VARCHAR(255) NOT NULL,
event_type_cd TINYINT NOT NULL,
send_type_cd TINYINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 테이블은 아직 조회하는 경우는 없는건가요? 따로 설정된 인덱스가 없는거 같아 여쭤봅니다

Comment on lines +7 to +13
enum class SendEventType(val code: Byte, val type: String) {
OPEN(0, "open"),
DELIVERY(1, "delivery"),
CLICK(2, "click"),
SEND(3, "send"),
DELIVERYDELAY(4, "deliverydelay"),
;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지연된 경우가 지금 발생할 수 있는 경우인가요? 추가로 DELIVERY, SEND 차이가 궁금합니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AWS는 이메일을 전송(SEND) -> 전달(DELIVERY) -> 오픈 -> 클릭 으로 구분하는 것 같아요!
이때 늦게 전달되는 경우를 전달지연(DELIVERYDELAY) 이라 합니다.!

Copy link
Member

@hun-ca hun-ca Sep 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 그 이벤트를 저희가 콜백으로 전달받나요? 어떻게 알 수 있지? 아니면 AWSSES에 메일 전송 요청 보내면 동기 응답으로 오나요?

Copy link
Collaborator Author

@belljun3395 belljun3395 Sep 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 요것은 제가 AWS에서 이벤트 브릿지 SNS랑 람다로 저희 API로 요청을 보내는 것을 만들었어요.!

인프라 관련된것도 언제 날 잡아서 공유하는 시간 가져요.!!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 그럼 람다코드에서 상태 업데이트 됨?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AWS가 SES에서 이메일 보낼때 설정하면 이벤트를 발행해주고 SNS에 보내줘요
그럼 람다가 SNS를 구독하고 있어서 이벤트를 받고 우리 API로 쏩니다

SES -> SNS -> Lamda -> API 이런 식으로 흘러가요

@hun-ca
Copy link
Member

hun-ca commented Sep 25, 2024

아니 왜 커맨트 따로 달리지 대댓글로 안달리고

@belljun3395
Copy link
Collaborator Author

일단 제 생각은 정책상 아티클 조회수 카운팅은 유저 별 아티클 당 최대 1회로 제약이 없기 때문에, 메일 내에서 아티클을 읽는 경우에도 뷰 카운트가 올라가는게 맞을거 같습니다

이것은 그래도 PM에게 확인해보고 진행할까요??!

@hun-ca
Copy link
Member

hun-ca commented Sep 25, 2024

일단 제 생각은 정책상 아티클 조회수 카운팅은 유저 별 아티클 당 최대 1회로 제약이 없기 때문에, 메일 내에서 아티클을 읽는 경우에도 뷰 카운트가 올라가는게 맞을거 같습니다

이것은 그래도 PM에게 확인해보고 진행할까요??!

제가 잘 이해한게 맞나요? 메일 내에서 아티클을 바로 볼 경우 뷰를 올리는게 맞냐 << 이거

@belljun3395
Copy link
Collaborator Author

일단 제 생각은 정책상 아티클 조회수 카운팅은 유저 별 아티클 당 최대 1회로 제약이 없기 때문에, 메일 내에서 아티클을 읽는 경우에도 뷰 카운트가 올라가는게 맞을거 같습니다

이것은 그래도 PM에게 확인해보고 진행할까요??!

제가 잘 이해한게 맞나요? 메일 내에서 아티클을 바로 볼 경우 뷰를 올리는게 맞냐 << 이거

네네 맞아요!
그리고 저희가 뷰 관련된 테이블이 히스토리랑 카운트 2개가 있는데 카운트에도 이메일로 본 기록을 반영할 것인지!

@hun-ca
Copy link
Member

hun-ca commented Sep 25, 2024

일단 제 생각은 정책상 아티클 조회수 카운팅은 유저 별 아티클 당 최대 1회로 제약이 없기 때문에, 메일 내에서 아티클을 읽는 경우에도 뷰 카운트가 올라가는게 맞을거 같습니다

이것은 그래도 PM에게 확인해보고 진행할까요??!

제가 잘 이해한게 맞나요? 메일 내에서 아티클을 바로 볼 경우 뷰를 올리는게 맞냐 << 이거

네네 맞아요! 그리고 저희가 뷰 관련된 테이블이 히스토리랑 카운트 2개가 있는데 카운트에도 이메일로 본 기록을 반영할 것인지!

아 이거 내가 어떻게 개발했었더라.. 히스토리에 저장해야 뷰 카운트가 자동으로 올라가게 되어 있지 않나.. 코드 다시 보고 말씀드릴게요

@hun-ca
Copy link
Member

hun-ca commented Sep 25, 2024

일단 제 생각은 정책상 아티클 조회수 카운팅은 유저 별 아티클 당 최대 1회로 제약이 없기 때문에, 메일 내에서 아티클을 읽는 경우에도 뷰 카운트가 올라가는게 맞을거 같습니다

이것은 그래도 PM에게 확인해보고 진행할까요??!

제가 잘 이해한게 맞나요? 메일 내에서 아티클을 바로 볼 경우 뷰를 올리는게 맞냐 << 이거

네네 맞아요! 그리고 저희가 뷰 관련된 테이블이 히스토리랑 카운트 2개가 있는데 카운트에도 이메일로 본 기록을 반영할 것인지!

아 이거 내가 어떻게 개발했었더라.. 히스토리에 저장해야 뷰 카운트가 자동으로 올라가게 되어 있지 않나.. 코드 다시 보고 말씀드릴게요

보니까 아래처럼 히스토리에 인서트하고 뷰카운트에는 count + 1 업데이트하네요
image

@belljun3395 belljun3395 merged commit ac38810 into dev Sep 27, 2024
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
config 설정 파일과 관련된 내용을 다룰 때 사용됩니다 feature 새로운 기능을 만들 때 사용됩니다
Projects
None yet
Development

Successfully merging this pull request may close these issues.

이메일 OPEN, DELIVERY DELAY 이벤트 처리
2 participants