복권 추첨 발행목표를 요일별로 동적 분기해 진도 추적 신뢰도 개선
목차
배치 작업으로 운영되는 복권 추첨 시스템의 발행 진도를 추적하는 스크립트에서, 요일에 따라 달라지는 목표값을 반영하도록 로직을 정비했다.
문제: 고정된 발행목표의 한계
처음에는 발행목표를 하드코딩된 고정값으로 관리했을 것 같다. "하루에 이 정도는 나가야 한다"는 식의 단순한 수치 하나. 그런데 운영해보니 패턴이 보인다. 평일에는 수요가 한산하지만, 금토일 주말로 가면서 갑자기 발행량이 폭증한다. 추첨 시스템의 특성상 피크 타임이 있기 마련이고, 그 타이밍에 맞춰 발행을 관리하지 않으면 목표 대비 진도가 엇나간다.
이렇게 되면 진도 추적 로직이 과하게 경고를 울리거나, 반대로 위험 신호를 못 챈다. "오늘 1개만 나갔는데, 목표가 10개인가? 뭔가 이상한데?"라는 식으로 운영팀이 의심의 눈초리로 메트릭을 봐야 한다. 이건 신뢰도를 떨어뜨린다.
해법: 시간대별 동적 분기
그래서 이번에는 요일 정보를 받아서 분기하도록 개선했다. 평일(월~목)이면 발행목표를 1개 수준으로, 주말(금~일)이면 3개 수준으로 동적으로 설정하는 식이다. 이렇게 하면:
| 요일 | 발행목표 | 의도 |
|---|---|---|
| 평일(월~목) | 1 | 안정적, 낮은 수요 시간대 |
| 주말(금~일) | 3 | 높은 수요 시간대, 피크 대비 |
스크립트가 실행될 때 datetime 모듈로 현재 요일을 감지하고, 그에 따라 목표값을 결정하도록 한 것이다. 간단해 보이지만, 이렇게 되면 진도율 계산, 경고 임계값, 대시보드 시각화 모두가 현실적인 기준으로 작동한다.
# 의사 코드 예시
import datetime
weekday = datetime.datetime.now().weekday() # 0=월요일, 6=일요일
if weekday < 4: # 평일
daily_target = 1
else: # 주말
daily_target = 3
progress = calculate_progress()
achieve_rate = progress / daily_target
운영 코드에서의 시간 기반 로직
이런 유형의 개선을 다룰 때 자주 마주치는 고민들:
- 테스트 복잡성: 요일에 따라 동작이 달라지므로, 테스트 시에 시간을 mock 해야 한다. 평일/주말 양쪽 시나리오를 모두 검증하지 않으면, 프로덕션에서는 일주일에 5일간 정상이고 2일간 엉클어진다.
- 디버깅 난제: 실제 발행 건수는 정상인데 진도율이 이상하다면? 어제와 오늘의 기준이 달라진 건 아닐까? 스크립트 실행 시간대를 확인하고 요일 분기를 먼저 의심해야 한다.
- 운영 메트릭스의 일관성: 진도 추적 대시보드가 있다면, 그 기준도 함께 업데이트해야 한다. "어제는 50%, 오늘은 30%"라고 보이는 건데, 실은 기준이 달라진 거면 혼란만 가중된다.
배운 점
초기 설계에서는 "모든 날이 같다"고 가정하기 쉽다. 특히 스크린샷이나 기획 문서에는 "발행목표: 10"처럼 단순하게 쓰여 있으니까. 하지만 실제 운영에 들어가면, 시간대, 요일, 계절, 이벤트 등 수많은 변수가 있다. 처음부터 모두 예상할 순 없지만, 진도 추적/경고 같은 메타 로직 쪽에서는 이런 패턴을 빨리 캐치하고 반영하는 게 좋다.
왜냐하면 메타 로직이 어긋나면, 운영팀이 매번 "이 숫자가 정말 이상한 건가?"라고 의심해야 하고, 그러다 보면 진정한 이상 신호를 놓치기 쉽기 때문이다. 동적 분기 한 줄이 운영 신뢰도를 확 올린다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.