시작하기 앞서
본 글은 2024년 4월 말~ 5월 1주 차에 작성했습니다.
Spring boot 2, Java 17과 AWS SDK v2를 사용했습니다.
언제 이런 기능이 생긴거지..?
회사에서 AWS SNS를 이용해 Slack메시지 전송을 구현하려다 우연히 모바일 푸시를 발견했다.
새 기능 알럿을 보니, FCM 사용이 가능하다는데, 기존 FCM만 사용하는 것과 차이가 궁금하다.
퇴근하고 조금씩 조사한 내용을 정리해 보자
AWS SNS 모바일 푸시
공식 문서를 보니, 푸시 메시지 플랫폼을 AWS SNS로 연결해서 AWS 인프라로 Push 알림을 전송할 수 있는 것 같다.
구현해보자
0. Firebase에서 FCM을 전송할 프로젝트를 먼저 구성해야 한다.
프로젝트 생성 후 설정, "서비스 계정"에서 "새 비공개 키 생성"을 통해 json키를 먼저 받는다.
1. AWS SNS에서 "푸시 알림"을 선택하고 "플랫폼 어플리 케이션 생성"을 선택한다.
2. 푸시 알림 플랫폼을 "FCM"으로 선택하고 자격증명은 "토큰"으로 한 뒤 Firebase에서 미리 받은 json키를 업로드한다.
3. Spring Boot에서 사용하기 위해 AWS SDK v2를 gradle에 추가한다.
implementation "software.amazon.awssdk:lambda:2.20.122"
4. FCM에서 발급받은 토큰을 AWS SNS에 엔드포인트로 만들고 전송한다.
CreatePlatformEndpointResponse platformEndpoint = snsClient.createPlatformEndpoint(CreatePlatformEndpointRequest.builder()
.platformApplicationArn("{aws sns 콘솔에서 확인 가능한 arn 값}")
.token(token)
.build());
Notification notification = new Notification("제목", "내용");
PublishResponse publishResponse = snsClient.publish(
PublishRequest.builder()
.targetArn(platformEndpoint.endpointArn())
.message(notification.toJson())
.build()
);
AWS SNS를 사용할 이유가 있는가..?
결국 FCM를 AWS SNS로 감싸서 사용하는 형태니, 다음과 같은 특징을 가지고 있다.
1. AWS 인프라와 연계성이 좋다. (장점)
>> spring boot가 아닌 AWS Lambda로 서버리스 환경을 구성하면, 고가용성에 대한 고민이 사라진다.
>> Cloud Watch 연동이 가능하다.
2. AWS 내 인프라 사용에 제약을 인지하고 사용해야 한다.
>> push를 topic기반으로 전송할 경우 AWS는 구독자의 수를 제한하고 FCM은 최대 구독수를 제한다.
>> 이건 프로젝트의 성격에 따라 FCM도 AWS 도 둘 다 좋은 선택지가 될 수 있다.
3. 비용
>> FCM은 무료다. AWS SNS는 백만건당. $0.5를 청구한다.(한국 리전 기준)
정리
AWS SNS는 기존 AWS 인프라를 사용하길 원하며, 다양한 주제(몇 만개)를 만들어서 앱을 일괄로 묶어서 푸시 전송할 경우에는 사용할 가치가 있어 보인다. 다만, 프로젝트의 규모가 작으면(구독할 주제가 적을 경우) 굳이 부가적은 AWS SNS 비용을 지불하며 사용할 필요는 없어 보인다.
참고한 사이트
'인프라' 카테고리의 다른 글
EC2를 이용한 AWS ECS 기반 Spring Boot 3 DataDog 적용 (1) | 2024.10.03 |
---|---|
기본적인 AWS VPC 구성기 (0) | 2024.07.27 |
AWS SQS 256KB 이상 대용량 메시지 처리와 Spring Boot (0) | 2024.07.06 |
AWS Bedrock + Spring Boot + Amazon Bedrock Guardrails를 이용해 간단한 AI 사용해보기 (3) | 2024.06.16 |
Linode Objects Storage 구성 및 Spring Cloud aws와 연동 (0) | 2023.07.12 |