개발 slecs

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

첫 댓글 달아줘.