Discord 메시지 타입 분기 로직을 단일 헬퍼로 통합
목차
Discord 메시지 발송 로직을 정리하다 보니 같은 타입 처리가 여러 군데 중복되고 있었다. 이번엔 이를 discord_kind() 라는 단일 헬퍼 함수로 통합해 정리했다.
흩어진 타입 처리의 문제
Discord 연동이 확대되면서 메시지 종류(kind)를 판단하고 처리하는 로직이 점점 늘어났다. 가장 흔한 패턴은 이렇다:
- 주문 공지 메시지를 Discord로 보낼 때 → 타입을
order로 설정 - 결제 실패 알림을 보낼 때 → 타입을
payment_fail로 설정 - 배송 추적 업데이트를 보낼 때 → 타입을
shipment로 설정
이런 타입 결정 로직이 discord_post.py 내 여러 함수에 산발적으로 흩어져 있었다. 어떤 곳은 if-elif 체인으로, 어떤 곳은 딕셔너리 맵핑으로, 어떤 곳은 삼항 연산자로… 일관성이 없었다.
문제는 이렇다:
- 정의 불명확: 어느 조건에서 어느 타입을 써야 하는지 한눈에 파악 어려움
- 유지보수 비용: 타입 규칙이 바뀌면 여러 곳을 수정해야 함
- 버그 위험: 한 곳만 깜빡하고 수정하면 불일치 발생
- 코드리뷰 비용: 타입 로직 검증을 매번 반복
discord_kind() 통합 헬퍼 만들기
이번 작업은 이 모든 타입 결정 로직을 한 곳에 모으는 것이다.
def discord_kind(event_type: str, context: dict) -> str:
"""
이벤트 타입과 컨텍스트에 따라 Discord 메시지 종류를 결정한다.
"""
# 모든 타입 판정 로직을 여기에 집중
# 단일 책임 원칙 준수
이렇게 하면:
| 변경 전 | 변경 후 |
|---|---|
| 각 호출 함수에서 개별 판정 | 한 곳(discord_kind)에서 일괄 결정 |
| 규칙 변경 시 여러 파일 수정 | 한 함수만 수정 |
| 테스트할 타입 로직이 분산 | 테스트를 한 곳에 집중 |
| "이게 정확히 어떻게 정해지지?" 혼란 | 문서화된 단일 근거 |
이 작업이 중요한 이유
코드 품질 관점에서 이건 단순한 "정리" 이상이다.
1. 팀 리딩 측면: 여러 개발자가 Discord 연동을 추가할 때, "타입을 어떻게 정해요?" 하는 질문이 자주 나온다. 이제 "discord_kind() 보세요"라고 한 줄로 답할 수 있다.
2. 코드리뷰 효율: PR 검토 시 타입 로직을 매번 재검증할 필요가 없다. "아, discord_kind() 쓰네" 하면 된다.
3. 버그 방지: 타입 불일치로 인한 버그를 애초에 줄인다. 예를 들어 어떤 모듈은 order_pending을, 다른 모듈은 pending_order을 썼다면? 이제 그런 일이 없다.
4. 향후 확장: 새 타입이 필요할 때 한 함수만 손대면 되니 변경의 파급력도 줄어든다.
배운 것들
이런 작업을 하면서 느낀 점:
-
"반복하는 로직"은 신호다: 한두 곳에서 반복되는 코드가 보이면 단순 중복이 아니라 "이건 별도의 개념이다"라는 신호인 경우가 많다.
-
함수의 단일 책임: discord_kind()는 "타입을 정한다"는 한 가지만 한다. 그래서 테스트도 쉽고, 읽는 사람도 의도를 빨리 파악한다.
-
네이밍이 중요: "unified helper"라는 표현도 사실 좋지만, discord_kind()라는 구체적인 이름이 "아, 이게 Discord 타입을 결정하는 곳이구나" 하고 직관적으로 와닿는다.
이 정도 규모의 리팩토링은 큰 기능 추가 같은 임팩트는 아니지만, 시간이 지날수록 팀의 속도와 안정성에 꾸준히 영향을 미친다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.