캡스톤디자인(2)/개발
캡스톤디자인(2) 개발 - SNS (이벤트 발행)
ludvbg (이지현)
2023. 6. 7. 22:53
지난 번 게시글에서 MSA에서의 이벤트 발행을 알아보았다. 그때, 이벤트 발행을 위하여 snsService를 import하여 진행하였는데, 이번에 그 snsService를 알아볼 것이다.
1. 구조
지난 번 JWT와 마찬가지로 SNS도 모든 서비스에서 공용으로 사용하기 때문에 따로 라이브러리처럼 만들어서 진행하였다. libs/sns/src 폴더에 sns의 코드가 저장되어 있다.

2. module
module은 간단하게 providers와 exports에 snsService를 작성해주면 된다.

3. service
sns의 service에서 모든 이벤트를 발행한다. 먼저, 다음과 같이 SNSClient를 생성해준다.

그리고, 이전 게시물에서 보았던 publishMessage는 아래와 같이 구성되어 있다.

댓글이 생성되었을 때 발행하는 comment_created 이벤트의 경우를 예로 들면, payload 인자에 post_id를, topic 인자에 'comment_created'를 넘겨주었다. 이 두 가지 정보로 input에 이벤트 메시지를 만들어 저장한다.
그리고 PublishCommand()에 input을 넣어 생성한 것을 command에 저장하고, client에 보낸다. 그리고 응답을 받기를 기다리고, 받은 응답을 return 한다.
이렇게 모든 서비스에서 발행할 이벤트를 sns service에서 처리해주는 것이다.