1. Slack API 설정
1.1 Slack App 생성
- Slack API 웹사이트 접속
- Create New App 클릭 → From scratch 선택
- App 이름과 워크스페이스 선택
1.2 Bot Token 발급
- 좌측 메뉴에서 OAuth & Permissions 선택
- Scopes 섹션에서 권한 추가
- Install to Workspace 클릭
- 생성된 Bot User OAuth Token 복사
1.3 채널 ID 확인
- Slack 워크스페이스에서 채널 우클릭 → View channel details
- 하단에서 채널 ID 확인
2. Python 코드 작성
2.1 필요한 패키지 설치
pip install slack_sdk pytz
2.2 Slack 클래스 구현
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
import sys, traceback
class Slack:
def activate_slack(self, slack_key):
self.client = WebClient(token=slack_key)
def post_message(self, message, channel_id=None):
try:
response = self.client.chat_postMessage(
channel=channel_id,
text=message,
mrkdwn=False
)
return response
except SlackApiError as e:
print(f"Slack API 에러 발생: {e.response['error']}", file=sys.stderr)
traceback.print_exc(file=sys.stderr)
raise
except Exception as e:
print(f"메시지 전송 중 에러 발생: {str(e)}", file=sys.stderr)
traceback.print_exc(file=sys.stderr)
raise
2.3 메인 실행 코드
from datetime import datetime
import pytz
if __name__ == "__main__":
try:
utc_now = datetime.now(pytz.UTC)
kst = pytz.timezone('Asia/Seoul')
kst_now = utc_now.astimezone(kst)
print(f"실행 시간 - UTC: {utc_now.strftime('%Y-%m-%d %H:%M:%S %Z')}")
print(f"실행 시간 - KST: {kst_now.strftime('%Y-%m-%d %H:%M:%S %Z')}")
slack_key = '실제 토큰으로 변경'
channel_id = '실제 채널 ID로 변경'
slack = Slack()
slack.activate_slack(slack_key)
test_message = f"슬랙 메시지 자동화 테스트 성공! (실행 시간: {kst_now.strftime('%Y-%m-%d %H:%M:%S KST')})"
slack.post_message(test_message, channel_id=channel_id)
print(f"메시지 전송 완료: {test_message}")
except Exception as e:
print(f"스크립트 실행 중 에러 발생: {str(e)}", file=sys.stderr)
traceback.print_exc(file=sys.stderr)
sys.exit(1)
3. WSL 가상환경 설정
3.1 문제 상황
직접 실행할 때는 작동하지만, cron에서 실행하면 ModuleNotFoundError 발생 → Cron은 시스템 Python만 사용함
3.2 해결: 가상환경 생성
# Python 설치
sudo apt update
sudo apt install python3-full
# 가상환경 생성
python3 -m venv ~/.virtualenv/trader
source ~/.virtualenv/trader/bin/activate
# 패키지 설치
pip install --upgrade pip
pip install slack_sdk pytz
# Python 경로 확인
which python3
# 예: /home/username/.virtualenv/trader/bin/python3
4. Cron 설정 및 시간대 문제 해결
4.1 시간대 확인
timedatectl
sudo timedatectl set-timezone Asia/Seoul
4.2 Cron 설정 예시
# 매일 오전 1시 15분 실행
15 1 * * * cd /mnt/c/Users/wlsgh/jinho/docs/trading && /home/username/.virtualenv/trader/bin/python3 HantuStock.py >> /mnt/c/Users/wlsgh/jinho/docs/trading/cron.log 2>&1
5. 문제 해결 가이드
5.1 ModuleNotFoundError
- Cron에서 가상환경 Python 사용
- 패키지 재설치: pip install slack_sdk pytz
5.2 시간대 문제
- WSL 시간대 확인/설정: timedatectl
- Cron에 TZ=Asia/Seoul 명시
5.3 Cron 실행 실패
- Cron 서비스 상태 확인: sudo service cron status
- 로그 파일 확인: cron.log
- 수동 실행 테스트
6. 주의사항
- 컴퓨터와 WSL이 켜져 있어야 함
- 장기적으로 항상 켜둬야 한다면 클라우드 서버, 라즈베리파이, 서버리스 함수 활용 가능
- Slack Token은 환경변수나 설정 파일로 관리
'ERRORS' 카테고리의 다른 글
| Zod custom error message 설정 실패 (0) | 2025.04.02 |
|---|---|
| API 응답 타입이 예상과 다를 때 (0) | 2025.04.01 |
| tsconfig에서 paths 설정 시 eslint 에러 해결 (1) | 2024.07.23 |
| Error: NextRouter was not mounted. (0) | 2024.05.17 |