1 분 소요

FastAPI와 Slack으로 알림 봇을 만든 이유

최근 회사 프로젝트에서 특정 이벤트가 발생했을 때 실시간으로 알림을 받을 수 있는 시스템이 필요했습니다. 기존 이메일 알림은 반응이 느렸고, Slack을 많이 사용하는 우리 팀 특성상 Slack 알림 봇이 더 적합하다고 판단했습니다.

이 글에서는 Slack API를 활용해 알림 메시지를 보내는 기능을 구현하고, FastAPI에서 해당 기능을 백그라운드 작업으로 처리하는 과정을 정리해 보았습니다.

구현 방법

1. Slack 앱 생성 및 설정

Slack API를 사용하기 위해서는 Slack 앱을 만들어야 합니다.

여기를 눌러 우측 상단에 Your apps를 눌러주세요.

Create New App 선택

새 앱

From scratch 선택

새 앱

원하는 App Name 을 입력한 뒤, 사용할 워크스페이스를 선택하고 Create App 버튼을 눌러 앱을 생성

새 앱

2. Scope 권한 설정

OAuth & Permissions 선택

새 앱

Bot Token Scopes에서 chat:write 추가

새 앱

3. Slack Bot 생성

App Home 클릭 후, Edit 클릭

새 앱

Display Name, Default username 설정

새 앱

Message Tab 활성화

새 앱

4. App-Level Token 발급

Settings -> Basic Information 선택 후, Generate Token and Scopes 선택

새 앱

Token 이름 설정한 후, 다음과 같이 권한 추가하고 Generate 버튼을 클릭

새 앱

Token 확인

새 앱

5. Socket Mode 활성화

Settings에 Socket Mode를 누른 뒤, Enable Socket Mode 활성화

새 앱

6. APP 승인 요청

Settings에 Install App 선택후, Install to 새 워크스페이스 선택

새 앱

허용 선택

새 앱

7. Token 준비

Slack으로 알림을 보내기 위해서는 아래의 세 가지 토큰이 필요합니다.

  • SLACK_SIGNING_SECRET
  • SLACK_BOT_TOKEN
  • SLACK_APP_TOKEN

SLACK_SIGNING_SECRET 확인 방법

새 앱

SLACK_BOT_TOKEN 확인 방법

새 앱

새 앱

SLACK_APP_TOKEN 확인 방법

새 앱

Code

Slack 알림 전송 모듈

import os
from slack_bolt import App

# 토큰 설정
SLACK_SIGNING_SECRET = os.environ.get('SLACK_SIGNING_SECRET')
SLACK_BOT_TOKEN = os.environ.get('SLACK_BOT_TOKEN')
SLACK_APP_TOKEN = os.environ.get('SLACK_APP_TOKEN')
SLACK_CHANNEL_ID = os.environ.get('SLACK_CHANNEL_ID') # 알림 받을 Channel 이름

app = App(
    token=SLACK_BOT_TOKEN,
    signing_secret=SLACK_SIGNING_SECRET
)

def send_notification_to_slack(message: str, channel: str = None):

    try:
        target_channel = channel or SLACK_CHANNEL_ID
        app.client.chat_postMessage(
            channel=target_channel,
            text=message
        )
        print(f"Slack 메시지 전송 완료: {message}")
    except Exception as e:
        print(f"Slack 메시지 전송 실패: {e}")

if __name__ == "__main__":
    send_notification_to_slack("Test Message가 전송되었습니다!")

FastAPI Code

# Slack 알림을 백그라운드로 처리
from fastapi import BackgroundTasks

slack_message = f"🚨 출석 위반이 탐지되었습니다! 🚨"
BackgroundTasks.add_task(send_notification_to_slack, slack_message)

최종 결과

아래와 같이 Slack에 알림이 잘 전송된 것을 확인할 수 있습니다.

새 앱