- 스케줄러 모듈 분리 방식 추가 (app/scheduler/jobs/lunch_worldcup.py) - 환경변수 제어 방식 명시 (LUNCH_WORLDCUP_ENABLED, LUNCH_WORLDCUP_SCHEDULE) - 교훈 업데이트: 하드코딩 금지, register 패턴 통일 - 트러블슈팅 추가: 하드코딩 스케줄 제거 과정 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2.9 KiB
2.9 KiB
점심 월드컵 기능 개발 및 슬랙 연동
개발 일시
2025-09-22
요구사항
- 100가지 한국 음식으로 점심 메뉴 월드컵 게임 구현
- 매일 12시 Company-X 슬랙 채널 자동 알림
작업 내용
1. 프론트엔드 (frontend-customer)
컴포넌트 생성
src/pages/LunchWorldcup.tsx
- 100개 한국 음식 데이터 배열
- 32강/16강/8강 선택 가능
- 토너먼트 방식 구현
라우팅 설정
// src/App.tsx
<Route path="/lunch-worldcup" component={LunchWorldcup} />
이미지 처리
- 위치:
public/images/foods/NNN_메뉴명.jpg - 100개 한국 음식 이미지 (위키백과/나무위키)
- 형식: 001_비빔밥.jpg ~ 100_샐러드.jpg
2. 백엔드 (rb8001)
알림 모듈 생성
app/notifications/
├── __init__.py
└── lunch.py
lunch.py 구조
async def send_lunch_worldcup_notification(channel_id: str = None):
# Slack WebClient 사용
# COMPANYX_SLACK_BOT_TOKEN 환경변수
# 채널 ID: C09CP4MDX71 (Company-X)
# 랜덤 메시지 + 버튼 링크
스케줄러 모듈 생성 (2025-09-27 리팩토링)
app/scheduler/jobs/lunch_worldcup.py
# register(scheduler) 패턴 사용
# 환경변수: LUNCH_WORLDCUP_ENABLED, LUNCH_WORLDCUP_SCHEDULE
# 참조: naverworks_briefing.py
main.py 스케줄 등록
from app.scheduler.jobs import lunch_worldcup
lunch_worldcup.register(scheduler)
배포 정보
- URL: https://ro-being.com/lunch-worldcup
- 슬랙 채널: Company-X (C09CP4MDX71)
- 실행 시간: 평일 12:00 (Asia/Seoul)
교훈
- main.py 역할 명확화: 스케줄 등록만, 로직은 별도 모듈
- 파일 구조 설계: 알림은 notifications/, 스킬은 skills/, 스케줄은 scheduler/jobs/
- 라우팅 경로 확인: 404 에러시 App.tsx Route 확인
- 이미지 파일명: 한글 파일명도 웹에서 동작하지만 영문 권장
- 환경변수 vs 하드코딩: 절대 하드코딩 금지, 환경변수로 on/off 및 스케줄 제어 필수
- 스케줄러 패턴 통일: register(scheduler) 함수로 모듈화, 에러 격리, 로깅 표준화
파일 변경 목록
-
frontend-customer:
- src/pages/LunchWorldcup.tsx (생성)
- src/App.tsx (라우팅 추가)
- public/images/foods/*.jpg (100개 이미지)
-
rb8001:
- app/notifications/lunch.py (생성)
- app/notifications/init.py (생성)
- app/scheduler/jobs/lunch_worldcup.py (생성, 2025-09-27)
- main.py (스케줄 등록 → register 호출로 변경, 2025-09-27)
트러블슈팅
- 이미지 다운로드: Unsplash API 실패 → 나무위키 성공
- 라우팅 404: /lunch → /lunch-worldcup 경로 수정
- main.py 복잡도: 로직 분리하여 notifications 모듈 생성
- 하드코딩 스케줄 (2025-09-27): main.py에 평일 12시 고정 → scheduler/jobs 모듈로 분리, 환경변수 제어