슬랙으로 RSS 알림 보내기 (6) - 배포
지난 글에서는 DynamoDB를 활용하여 중복 알림을 방지하는 기능을 구현해 보았습니다. 이번 글은 이 시리즈의 마지막으로, AWS에 최종 배포한 후, 실행하여 정상적으로 동작하는지 테스트하는 과정을 살펴보겠습니다.
- 프로젝트 설정
- RSS 피드 가져오기
- 슬랙에 메시지 전송하기
- 중복 알림 방지하기
- 배포
1. 배포 시 CSV 파일 포함시키기
앞에서 구현했던 것 처럼 RSS 피드를 가져올 레포지토리와 슬랙 채널 목록을 CSV 파일로 관리하고 있습니다. 하지만, 코드 이외의 파일들은 배포 시 자동으로 패키지에 포함되지 않습니다. 이를 해결하기 위해서 serverless.yml에 설정을 추가해야 합니다. 서버리스 프레임워크는 배포 시 모든 함수의 코드를 zip 파일로 패키징하는데, 이 zip 파일을 보다 세부적으로 제어하기 위해서 package 섹션을 사용합니다. 자세한 내용은 공식 문서를 참고해 주세요.
아래와 같이 serverless.yml 파일의 package 섹션에 CSV 파일이 위치한 경로를 입력합니다. 이 설정은 .env 파일은 제외하고 src/data/ 폴더 아래에 있는 모든 파일을 포함합니다.
[serverless.yml]
...
package:
patterns:
- "!.env*"
- "src/data/**/*"
...
2. Lambda에 DynamoDB 접근 권한 부여하기
"슬랙으로 RSS 알림 보내기 (5) - 중복 알림 방지하기" 부분에서 이미 설정한 내용이지만, 다시 한 번 정리하겠습니다. Lambda에서 DynamoDB에 접근하기 위해서는 권한을 부여해야 합니다. 이를 위해 serverless.yml 파일의 provider 섹션에 아래의 설정을 추가합니다.
[serverless.yml]
...
provider:
...
iam:
role:
statements:
- Effect: Allow
Action:
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:DeleteItem
Resource:
- !GetAtt DynamoDBTable.Arn
...
3. 실행 스케쥴 설정
함수가 실행될 스케쥴을 설정합니다. 이전에는 테스트를 위해서 1시간마다 실행되도록 설정했지만, 저는 하루에 한 번만 실행하면 충분할 것 같아서, 아래와 같이 오전 8시에 실행되도록 변경하였습니다. 이전과 달리 Cron 표현식(Cron Expression)을 사용했고, 타임존은 UTC 기준이라는 점에 유의하세요.
[serverless.yml]
functions:
notifyAll:
handler: src/handler.notifyAll
events:
- schedule:
rate: cron(0 23 * * ? *)
enabled: true
environment:
AWS_DYNAMODB_REGION: ${env:AWS_DYNAMODB_REGION}
AWS_DYNAMODB_TABLE: ${env:AWS_DYNAMODB_TABLE}
SLACK_OAUTH_TOKEN: ${env:SLACK_OAUTH_TOKEN}
4. 배포 및 테스트
이제 모든 설정을 마쳤으니, 아래의 명령어를 통해 배포합니다.
$ sls deploy
배포가 완료되었다면, 정상적으로 실행되는지 확인하기 위해 아래와 같이 테스트합니다.
$ sls invoke --function notifyAll
마치며
이렇게 RSS 피드를 읽어 슬랙으로 알림을 보내는 자동화 시스템을 완성했습니다. 이번 프로젝트를 통해 서버리스 프레임워크, RSS Parser, 그리고 DynamoDB까지 새롭게 접하고 활용해볼 수 있었습니다.
원래는 기술 블로그와 깃허브 레포지토리의 릴리즈 알림을 받기 위해서 Zapier를 통해 간단히 구현했지만, 무료 플랜의 제한으로 직접 개발하게 되었습니다. 그 과정에서 새로운 기술들을 탐구하고 학습하며, 결국 하나의 프로젝트로 완성할 수 있었습니다. 이 글에서는 깃허브 레포지토리의 릴리즈 알림만 구현 하였지만, 이와 같은 방식으로 기술 블로그의 RSS 피드를 추가하여 직접 구현해보시는 것도 좋을거 같습니다.
기능만 보면 정말 별거 없는 작은 사이드 프로젝트지만, 전체적인 흐름을 직접 설계하고, 필요한 기술들을 탐색하며 하나의 시스템으로 완성시키는 과정은 저에게 값진 경험이 되었습니다. 이번 프로젝트를 통해 조금씩 더 큰 사이드 프로젝트를 진행할 용기를 얻었고, 앞으로도 이런 방식으로 새로운 기술을 배우고 적용하는 경험을 계속해 나가려고 합니다.
2025.02.15 - [Nodejs] - 슬랙으로 RSS 알림 보내기 (1) - 개요
2025.02.19 - [Nodejs] - 슬랙으로 RSS 알림 보내기 (2) - 프로젝트 설정
2025.02.23 - [Nodejs] - 슬랙으로 RSS 알림 보내기 (3) - RSS 피드 가져오기
2025.02.26 - [Nodejs] - 슬랙으로 RSS 알림 보내기 (4) - 슬랙에 메시지 전송하기
2025.03.01 - [Nodejs] - 슬랙으로 RSS 알림 보내기 (5) - 중복 알림 방지하기
2025.03.03 - [Nodejs] - 슬랙으로 RSS 알림 보내기 (6) - 배포