Project/커뮤니티 게시판

[커뮤니티 게시판] 알림 기능 관련 정리

SN.Flower 2023. 8. 22.

💡   알림 기능은 어떻게 구현했나요?

알림 도메인은 회원 도메인으로 1대다 단방향 관계로 설정했습니다.

ApplicationEvenetPublisher와 @Async 어노테이션 기능을 사용해서 비동기 이벤트 기반으로 댓글 알림을 처리했습니다.

알림 기능이 댓글 생성과 같은 쓰레드에서 작동을 하면 알림 생성에 에러가 생기면 게시글 생성도 되지 않으므로 분리를 해야합니다.

따라서 AsyncConfigurer을 상속받는 AsyncConfig를 생성하고 AsyncExecutor 설정과 ExceptionHandler를 오버라이딩해서 알림 인프라를 세팅했습니다.

AsyncExecutor 설정에서는 ThreadPoolTaskExecutor를 생성해서 CorePoolSize, MaxPoolSize, QueueCapacity와 유지시간을 설정했습니다.

ExceptionHandler는 비동기 함수에서도 예외를 확인하기 위해서 커스터마이징한 로그가 나올 수 있도록했습니다.

 

댓글이 생성될 때 ApplicationEvenetPublisher의 publishEvent 메소드의 매개변수로 댓글 알림에 표시할 정보들을 담은 dto를 생성해서 넣었습니다.

이벤트가 생성됐을 때의 로직들은 댓글 이벤트 리스너 클래스를 만들어서 처리했습니다.

알림 dto를 초기화해서 알림 Service의 알림 생성 메소드에 넘겨주었고, 알림 생성 메소드에서는 @Builder 어노테이션을 통해 알림 엔티티를 만든 후 JpaRepository를 상속받는 Repository에서 save() 메소드를 통해 알림을 저장했습니다.

댓글