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

refactor/#22: 메일 푸쉬 알림 분리 #27

Merged
merged 5 commits into from
Feb 21, 2024
Merged

refactor/#22: 메일 푸쉬 알림 분리 #27

merged 5 commits into from
Feb 21, 2024

Conversation

pushedrumex
Copy link
Member

@pushedrumex pushedrumex commented Feb 21, 2024

📢 개요

  • 기존의 메일 푸쉬 알림은 한 트랜잭션 내에서 메일 전송 로직이 수행됩니다. 이 경우 제 3자 서비스(메일 전송)에 장애가 발생할 경우 커넥션이 물려있어 시스템 전체의 장애로 이어질 수 있습니다. 해당 문제를 해결하기 위해 @TransactionalEventListener@Async 를 사용하여 트랜잭션 외부로 분리하면서 메일 전송이 비동기적으로 처리되도록 리팩토링 하였습니다.
  • 메일 전송에 실패할 경우를 대비하여 재시도 메카니즘을 구현하였습니다.

📝 작업 내용

  • MailSendEvent, MailSendListener(@TransactionalEventListener(phase = AFTER_COMMIT)) 생성
  • AsyncConfig 생성
  • EventPublisher 를 사용하여 메일 전송 메서드 호출하도록 수정
  • @Async 적용하여 메일 전송이 비동기적으로 동작하도록 수정
  • 메일 전송에 실패할 경우 반복문을 통해 재시도 및 로깅 설정

💡 관련 이슈

@pushedrumex pushedrumex self-assigned this Feb 21, 2024
Copy link

github-actions bot commented Feb 21, 2024

Test Results

44 tests   44 ✅  6s ⏱️
21 suites   0 💤
21 files     0 ❌

Results for commit 92c9fe2.

♻️ This comment has been updated with latest results.

Copy link

@pushedrumex pushedrumex merged commit 46ee5cb into dev Feb 21, 2024
4 checks passed
@pushedrumex pushedrumex deleted the refactor/#22 branch February 21, 2024 11:56
pushedrumex added a commit that referenced this pull request Feb 22, 2024
* feat: 도메인 엔티티 생성 (#2)

* feat/#1: BaseTimeEntity 생성

* feat/#1: Contact Entity 생성

* feat/#1: Store Entity 생성

* feat/#1: Recommendation Entity 생성

* feat/#1: StoreImage Entity 생성

* feat/#1: Theme Entity 생성

* feat/#1: SongForm Entity 생성

* chore/#1: 테스트 커버리지 측정 제외 설정 (제거 예정)

* chore/#1: sonarCloud projectKey 수정

* chore: 서브 모듈 패키지명 변경

* feat: 메인 페이지 매장 목록 조회 API 구현 (#8)

* feat/#3: StoreRepository.findAllByOrderByCreatedAtAsc 구현

* feat/#3: StoreService.findSimpleStores 구현

* feat/#3: stores 정렬 기준을 storeId 로 변경

* feat/#3: DataBaseCleaner 구현

* feat/#3: StoreController.findSimpleStores 구현

* feat/#3: test application.yml 추가

* feat/#3: 테스트 커버리지 대상에 domain 패키지 추가

* feat/#3: 테스트 커버리지 대상에 vo 패키지 제외

* chore: jacoco 레포트를 sonarcloud 에 반영 (#10)

* chore/#9: jacoco 레포트를 sonarcloud 에 반영

* chore/#9: ci run 에 jacocoTestReport 추가

* feat: 매장 목록 조회 API 구현 (#11)

* feat/#4: StoreRepository.findAllByRegionOrderByStoreIdAsc 구현

* feat/#4: StoreService.findStores 구현

* feat/#4: Store 에 Theme, SongForm 정보 추가

* feat/#4: StoreController.storeService 구현

* feat/#4: jacocoExcludePatterns 추가

* feat/#4: jacoco 설정 변경

* feat: 음악 추천 API 구현 (#12)

* feat/#5: PhoneNumber 생성

* feat/#5: RecommendationInformation 생성

* feat/#5: Recommendation 생성

* feat/#5: RecommendationRepository 생성

* feat/#5: RecommendationService.registerRecommendation 구현

* feat/#5: RecommendationController.registerRecommendation 구현

* feat/#5: 테스트 커버리지 대상에 recommendation 패키지 추가

* feat: 문의 API 구현 (#13)

* feat/#6: ContactUserName 생성

* feat/#6: ContactContent 생성

* feat/#6: Contact 생성

* feat/#6: ContactRepository 생성

* feat/#6: ContactService.registerContact 구현

* feat/#6: ContactController.registerContact 구현

* feat/#6: 테스트 커버리지 대상에 contact 패키지 추가

* feat: 문의 등록, 음악 추천 메일 푸쉬 알림 기능 구현 (#14)

* feat/#7: MailService.sendMail 구현

* feat/#7: 문의 등록, 음악 추천 요청 시 이메일 알림 전송 기능 추가

* chore: dev, prod profile 설정 (#16)

* chore: 개발 서버 배포 스크립트 작성 (#18)

* chore/#17: 배포 스크립트 작성

* chore/#17: CD 설정

* chore: CodeDeploy 설정파일 변경 (#20)

* chore: appspec.yml 오타 수정

* chore: owner 수정

* chore: 배포 스크립트 수정

* chore: 배포 스크립트 수정

* docs: API 문서화 (#23)

* docs/#21: RestDocs 의존성 추가 및 BaseControllerTest 생성

* docs/#21: Controller 테스트 코드 작성 및 문서화

* docs/#21: 주석 제거

* docs/#21: index.html 생성

* chore: 배포 스크립트 수정 (#25)

* refactor/#22: 메일 푸쉬 알림 분리 (#27)

* refactor/#22: MailSendEvent, MailSendListener 생성

* refactor/#22: AsyncConfig 생성

* refactor/#22: SpringMailService.sendMail @async 적용 및 재시도 메카니즘 구현

* refactor/#22: EventPublisher 를 사용한 메일 메서드 호출

* refactor/#22: 메일 전송 재시도 테스트 코드 추가

* feat: 알림(Notification) 엔티티 생성 (#28)

* chore: 로그에 시간이 나오도록 배포 스트립트 수정 (#30)

* chore: 배포 환경 설정 (#32)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

refactor: 메일 푸쉬 알림 분리
1 participant