소프트웨어 마에스트로 14기 때 "마이브러리"를 기획/개발하면서, 개발 능력 향상 뿐만 아니라 우리 팀의 목표는 직접 사용자에 대한 피드백으로 앱을 디벨롭하고 실사용자로부터 생기는 이슈를 해결하고자 했다. 그러한 과정에서 사용자가 자주 접속하는 앱을 만드는 것이 중요하다고 생각하고 푸시 알림 기능을 추가하기로 했다.
AWS SNS와 SQS를 사용하게 된 이유 (기술 선택 이유)
푸시 알림 기능을 개발할 때, 가장 중요하게 생각했던 부분은 알림 서비스와 다른 서비스 간의 느슨한 결합과 비동기 처리였다.
- 알림 서비스는 기존에 존재하는 서비스에 부가적으로 더해지는 기능이기 때문에 알림 서비스로 인해 기존 핵심 기능의 성능이 떨어지면 안된다고 판단하여 비동기 처리가 중요하다고 생각했다.
- 알림 서비스가 구축됨으로써, 각 마이크로 서비스는 서로 의존하게 된다. 도서 서비스가 알림 서비스를 의존하거나, 유저 서비스를 의존하거나. 각 서비스 간의 의존으로 확장성은 무너지게 된다고 생각했다.
다음과 이유로 우리 팀은 AWS SNS와 SQS 를 사용하여, 알림 서비스를 구현하고 위의 문제점을 해결하고자 했다.
다른 메시징 플랫폼도 많지만 AWS SNS와 SQS를 선택한 이유는 아래와 같다.
- 실제 사용한 만큼 비용을 지불하기 때문에 비용적인 측면에서도 효율적이라고 생각했다.
- 다른 메시징 플랫폼 (kafka, rabbitMQ 등) 보다는 사용하는 것과 설정하는 것이 매우 간단하다고 생각했다.
- AWS SNS와 SQS은 관리형 서비스이기 때문에 트래픽에 따라 자동으로 확장이 가능하다.
이번 포스팅에서는 AWS 콘솔에서 AWS SNS와 SQS를 생성하고 연동하는 과정을 기록하려고 한다.
1) AWS SNS Topic 생성
AWS 콘솔 검색창에 "SNS"을 검색한 이후에 왼쪽 바에 주제를 선택하면 아래와 같은 화면을 볼 수 있다.
이후, 아래와 같이 이름과 표시 이름을 입력한다. 저는 우선적으로 팔로우 기능과 전체 공지 기능에 대한 알림 서비스를 제공하고자 Topic을 annoucement와 follow 두 개를 만들었다.
또한 아래 선택 사항은 전부 기본값으로 두고 생성하였다.
그럼 간단하게 SNS의 Topic을 생성할 수 있다.
다음은 SQS를 생성해야하는데, 그전에 SNS와 SQS가 어떻게 동작하는지에 대해서 아래 도식과 함께 작성하려 한다.
- 만약 유저 서비스에서 Follow Topic을 생성하여 publish 하면, 해당 Topic이 구독한 SQS에 메시지가 distribute 된다.
- 이후 각 서비스는 자신에게 할당된 SQS에서 메시지를 가져와 처리한다.
- 이를 통해 유저 서비스는 Follow Topic만 발행하더라도, 여러 서비스에 해당 메시지를 분배해 처리할 수 있도록 하고, Follow Topic이 필요한 서비스가 추가되더라도 유저 서비스의 코드는 수정없이 확장 가능하다.
따라서 이제는 SQS를 생성하고 방금전에 만든 SNS Topic을 SQS에 구독만 하면 끝이 난다.
2) AWS SQS 생성
동일하게 AWS 콘솔 검색창에 "SQS"을 검색한 이후에 대기열 생성 버튼을 클릭한다.
아래와 같이 채워야 하고 설정할 부분이 있다.
- 유형 선택 : 메시지의 순서가 중요한 경우에는 FIFO, 그렇지 않은 경우에는 표준을 선택한다.
- 표준 : 최소 1회 전달, 최대 처리량
- FIFO : 정확히 1번 전달 보장, 선입선출 전송으로 메시지 순서 유지
- 이름 입력
- 구성
- 표시 제한 시간 : 한 컨슈머가 대기열에서 수신한 메시지가 다른 메시지 소비자에게 보이지 않게 되는 시간
- 메시지 보존 기간 : 대기열에 남아 있는 메시지를 유지하는 기간
- 전송 지연 : SQS가 대기열에 추가된 메시지를 전송하기 전에 지연하는 시간
- 최대 메시지 크기 : 대기열의 최대 메시지 크기
- 메시지 수신 대기 시간 : 대기열이 수신 요청을 받은 후 Amazon SQS가 메시지를 사용할 수 있을 때까지 기다리는 최대 시간
- 리드라이브 허용 정책 : 처리가 실패한 메시지를 어떻게 처리할 것인지 설정하는 정책이다. 활성화 시, 처리하지 못한 메시지 대기열로 사용할 대기열을 선택해야 한다.
- 배달 못한 편지 대기열 : 전송할 수 없는 메시지를 수신할 수 있도록 대기열을 설정하는 부분이다.
저는 우선은 두 설정 모두 비활성화하였다. 메시지의 처리가 중요한 경우 사용하는 것이 바람직하다고 생각한다. 이 후 생성한다.
3) SNS Topic과 SQS 연동
AWS SQS 대기열에서 연동할 SQS 선택하면 다음과 같은 화면을 확인할 수 있고, Amazon SNS 주제 구독을 클릭한다.
이후, SNS Topic을 선택해서 저장하면 된다!
AWS 콘솔을 통해 쉽게 AWS SNS와 AWS SQS를 생성하고 연동이 가능하다.
연동 이후에 테스트는 아래 레퍼런스를 통해서 확인할 수 있다. 현재 AWS SNS와 AWS SQS가 동작하고 있기 때문에 SQS을 구독하고 있는 서비스가 메시지를 바로 처리하기 하여 연동 테스트는 불가능했다. 아래 링크를 참고하면 좋을 것 같다.
https://curiousjinan.tistory.com/entry/aws-message-driven-3-sns-sqs-integration-testing
다음에는 포스팅에서는 Spring Boot와 AWS SNS & SQS를 연동하여 푸시 알림을 구현한 부분을 포스팅 하려고 한다.
'개발 > Cloud' 카테고리의 다른 글
[AWS] ECR, Docker Image Push & Pull 하기 (0) | 2023.07.09 |
---|---|
Docker - 서버관리의 역사 (0) | 2023.05.11 |