반응형
AsyncSocketModeHandler는 Slack Socket Mode를 asyncio 기반으로 돌려주는 핸들러입니다.
Slack 서버와 WebSocket으로 연결하여 이벤트를 비동기 핸들러로 처리 가능 하도록합니다.
Slack Bolt란?
- Slack이 제공하는 공식 Python SDK.
- 봇/앱을 만들 때 이벤트, 액션, 명령어 등을 간단히 처리할 수 있도록 도와줍니다.
- 크게 두 가지 연결 방식이 있음:
- HTTP 방식 (이벤트를 Slack 서버에서 HTTP 요청으로 전달 → Flask/FastAPI 등 웹서버 필요)
- Socket Mode 방식 (웹소켓을 통해 Slack 서버와 직접 연결 → 방화벽/공인 도메인 불필요)
예를 들어,
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
여기서 AsyncSocketModeHandler는 ② Socket Mode + 비동기(asyncio) 환경에서 사용하는 핸들러입니다.
Socket Mode
- Slack과 앱이 WebSocket으로 직접 연결됩니다.
- 앱 서버가 퍼블릭 인터넷에서 접근 가능하지 않아도 Slack 이벤트를 받을 수 있음.
- Slack은 앱에 이벤트를 WebSocket을 통해 푸시 → 앱이 이벤트를 받고 처리.
AsyncSocketModeHandler 클래스
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
- AsyncSocketModeHandler는 SocketModeHandler의 비동기 버전입니다.
- asyncio 기반 코드와 함께 사용할 수 있음.
- 이벤트 루프 내에서 Slack 이벤트를 처리할 수 있음 → 다른 비동기 작업(FastAPI, aiohttp, DB IO 등)과 자연스럽게 통합 가능.
기본 사용법
import asyncio
from slack_bolt.async_app import AsyncApp
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
# Slack 앱 초기화 (Bot Token 사용)
app = AsyncApp(token="xoxb-your-bot-token")
# 간단한 이벤트 핸들러
@app.message("hello")
async def handle_hello(message, say):
await say("Hi there! :wave:")
# 메인 실행부
async def main():
handler = AsyncSocketModeHandler(app, "xapp-your-socket-mode-app-token")
await handler.start_async()
if __name__ == "__main__":
asyncio.run(main())
언제 쓰는가?
- 서버가 공인 URL 없이도 Slack 이벤트를 받고 싶을 때 (예: 로컬 PC 개발 환경, 사내망 환경)
- FastAPI, aiohttp 같은 async 프레임워크와 통합하고 싶을 때
- 고성능/비동기 처리가 필요한 Slack 봇을 개발할 때
반응형