슬랙으로 RSS 알림 보내기 (1) - 개요

2025. 2. 15. 18:09Nodejs

반응형

1. 프로젝트 소개

이 프로젝트는 기술 블로그, GitHub 레포지토리, 개발자 커뮤니티 등의 RSS 피드를 읽어 슬랙으로 알림을 보내는 프로젝트입니다. 이 프로젝트를 시작하게 된 이유는 여러가지가 있습니다.

첫 번째, 라이브러리 업데이트를 관리하기 위해

첫 번째 이유는 사용 중인 라이브러리의 버전 관리가 제대로 되고 있지 않다는 점이었습니다. Major 버전은 인터페이스 변경이 있을 수 있어 쉽게 업데이트하기 어렵지만, Minor 버전과 Patch 버전은 꾸준히 대응하는 것이 중요하다고 생각했습니다. 그러다 보니, 내가 사용하는 라이브러리의 업데이트 소식을 놓치지 않으려면 GitHub 레포지토리의 릴리즈 알림을 받아야겠다고 결론을 내렸습니다.

두 번째, 새로운 기술 소식에 둔감해지지 않기 위해

두 번째 이유는 새로운 기술 소식에 둔감해지고 있다는 점이었습니다. 프로젝트를 진행하면서 자연스럽게 익숙한 기술을 계속 사용하게 되는데요. 하지만 그 사이에도 새로운 라이브러리와 기술들은 계속해서 등장하고 있습니다. 그런데 익숙한 도구만 사용하다 보니, 새로운 라이브러리를 접할 기회가 점점 줄어들고 있는 것을 느꼈습니다. 또한, 막상 새로운 프로젝트를 시작할 때 최신 기술을 찾아보려고 해도 그동안 어떤 기술이 등장했는지 몰라 적절한 선택을 하기가 어려웠습니다. 그래서 기술 블로그나 개발자 커뮤니티를 통해 최신 트렌드와 다양한 해결 방식을 꾸준히 접하고 싶었습니다.

세 번째, 다양한 개발자들의 생각을 접하기 위해

세 번째 이유는 다양한 개발자들의 생각을 알고 싶었습니다. 새로운 기술을 배우는 것도 중요하지만, 기술적인 내용만큼이나 다른 개발자들의 경험과 고민을 접하는 것도 큰 도움이 된다고 생각합니다. 개발을 하다 보면 기술적인 문제뿐만 아니라, 어떤 방식으로 프로젝트를 진행할지, 개발자로서 어떻게 성장할지 고민하는 순간들이 많습니다. 그래서 단순한 기술 문서뿐만 아니라, 개발자들의 회고, 프로젝트를 진행하면서 겪은 시행착오, 개발자로서 도움이 되었던 경험 등 이런 글들을 접하고 싶었습니다.

정리해보면,

📌 이 프로젝트를 만들게 된 이유

  • 라이브러리 업데이트를 놓침 → 사용 중인 라이브러리의 버전이 너무 오래된 걸 인지하지 못하는 문제가 생김.
  • 새로운 기술 소식에 둔감해짐 → 항상 익숙한 기술만 사용하다 보니 새로운 기술이나 다양한 해결 방식을 알기 어려움.
  • 다양한 개발자들의 생각을 알고 싶었음 → 기술뿐만 아니라, 개발자의 성장 과정, 프로젝트 진행 방식, 시행착오 등을 접하며 더 넓은 시각을 갖고 싶었음.

 

2. 왜 직접 구현했을까?

사실 이런 기능을 제공하는 Zapier, IFTTT, n8n 등 다양한 서비스가 있습니다. 저는 처음에 Zapier를 이용해 간단히 구현했는데요. 코드를 작성할 필요 없이 드래그 앤 드롭만으로 쉽게 설정할 수 있었고, 슬랙과의 연동도 간단해서 빠르게 원하는 기능을 만들 수 있었습니다. (Zapier를 선택한 이유는 가장 대중적인 서비스 같았고, 회사에서도 사용하던 서비스라 익숙했습니다.) 

Zapier Zaps

 

하지만 무료 플랜에서는 일정 개수 이상의 알림을 받을 수 없는 제한이 있었고, 더 많은 알림을 받으려면 유료 플랜이 필요했습니다. 그런데 Zapier의 유료 플랜을 확인해보니 생각보다 가격이 비쌌습니다. 단순히 RSS 알림을 받는 용도로 사용하기엔 부담스러운 가격이었고, 이 정도 기능이라면 직접 구현하는 것이 훨씬 저렴하게 운영할 수 있을 것 같았습니다.

Zapier Pricing & Plans

정리해보면,

🚀 기존 서비스의 장점

  • Zapier는 간단하고 강력함 → 몇 번의 클릭만으로 RSS → 슬랙 알림 자동화를 구현할 수 있었음.
  • 무료 플랜으로도 기본적인 기능 사용 가능

⚡ 하지만 직접 구현을 선택한 이유

  • Zapier 무료 플랜의 제한 → 일정 개수 이상의 알림을 받으려면 유료 플랜이 필요했음.
  • 유료 플랜 비용이 생각보다 비쌌음 → 직접 배포하면 훨씬 저렴하게 운영 가능.

 

3. 어떻게 구현했을까?

이 프로젝트를 직접 구현하기 위해 다음과 같은 과정을 거쳤습니다.

(1) RSS 피드를 조회하고 슬랙으로 메시지 보내기

우선, RSS 피드를 읽고 슬랙으로 알림을 보내는 기능이 필요합니다. 이를 위해 두 가지 라이브러리를 사용했습니다.

  • rss-parser : RSS XML 피드를 JavaScript 객체로 변환하는 라이브러리
  • @slack/web-api : 슬랙의 Web API를 사용하기 위한 라이브러리

(2) 중복 알림 방지 - 이미 보낸 알림 제외하기

RSS 피드는 계속해서 새로운 항목이 추가되지만, 이미 알림을 보낸 피드는 다시 알릴 필요가 없습니다. 이를 위해 알림 내역을 저장할 스토리지가 필요합니다.

처음에 생각한 서비스는 S3였습니다. 하지만, S3에 파일 형태로 저장하면 파일이 커지는 것을 방지하기 위해서 파일을 분할하는 과정이 필요하고, 분할된 파일을 읽는 과정이 필요합니다. 이런 방식은 로직이 복잡해질 가능성이 높아 차선책으로 생각했습니다.

다음으로 생각한 서비스는 DynamoDB였습니다. DynamoDB는 AWS에서 제공하는 NoSQL 데이터베이스로, 빠른 읽기/쓰기 성능을 제공합니다. 라이브러리를 통해 CRUD를 제공하기 때문에 복잡한 로직없이 사용할 수 있고, 요금도 사용량 기반으로 책정되기 때문에 최종적으로 DynamoDB를 선택하게 되었습니다.

(3) 배포 - Serverless Framework

이 프로젝트는 매일 한 번씩 실행되는 작업이므로, 상시 실행되는 서버가 필요하지 않습니다. 따라서 EC2 같은 VM을 띄우기보다는 서버리스 환경이 더 적합하다고 판단했습니다. 이를 위해 AWS Lambda와 CloudWatch Events를 활용하기로 결정했습니다.

  • Lambda : 특정 이벤트가 발생했을 때 코드를 실행하는 서버리스 컴퓨닝 서비스
  • CloudWatch Events : Lambda를 일정 주기마다 자동으로 실행하는 스케줄링 서비스

Serverless Framework는 서버리스 서비스를 쉽게 관리하고 배포할 수 있도록 도와주는 프레임워크입니다. Lambda뿐만 아니라 CloudWatch Events, DynamoDB 같은 AWS 서비스를 코드로 정의하고 관리할 수 있으며, 배포와 테스트도 간단하게 할 수 있어 선택하게 되었습니다.

정리해보면,

🏗 구현 과정

  • RSS 피드 조회 및 변환, 슬랙으로 메시지 전송
  • 중복 알림 방지를 위한 스토리지 선택
  • 서버리스 환경에서 배포 및 운영

🛠 사용한 기술 스택

  • AWS Lambda + CloudWatch Events → 일정 주기로 RSS 피드를 가져와 알림을 보냄.
  • DynamoDB → 중복 알림을 방지하기 위해 알림을 보냈던 링크 저장.
  • Serverless Framework → 서버리스 서비스를 쉽게 배포하고 관리.

 

다음 글에서는

이번 글에서는 프로젝트의 개요와 기술 스택, 그리고 배포 방식까지 정리해봤습니다. 다음 글에서는 실제 로직을 구현하는 과정과 핵심 기능을 코드와 함께 자세히 살펴보겠습니다.

 

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) - 배포

반응형