[문제 상황]

주문 지연 알림톡 기능은 주문이 20분 이상 지연될 경우 마트 관계자에게 알림톡을 보내는 기능이고, 해당 기능을 구현하였습니다.

처음에는 SQL 조건문을 이용하여 운영 시간과 관계자가 설정한 알림 수신 가능 시간대를 필터링 하는 방식으로 알림톡 발송 로직을 구현했습니다.

기능 구현 완료 후, 새벽 시간대에 알림톡이 발생되는 오류가 발생 하였습니다.

원인 분석 후 슬랙 공유

원인 분석 후 슬랙 공유


[문제 발생의 원인]

문제의 근본적인 원인은 모든 가능한 시나리오를 충분히 테스트하지 못한 실수였습니다.

알림톡 발송 조건을 설정하는 데 사용된 **startTime**과 **endTime**은 세 가지 상태(같음, 큼, 작음)를 가질 수 있으며, 현재 시간이 자정을 기준으로 이전인지 이후인지를 판단해야 했습니다.

이러한 복잡한 조건을 SQL 조건문 내에서만 해결하려고 시도했으나, 모든 조건을 철저히 고려하지 못해 하나의 조건을 놓치게 되었습니다.

그 결과 테스트 과정에서도 이를 간과하여 새벽 시간대에 알림톡이 발송되는 오류가 발생했습니다.


[문제 해결 방법]

이 문제를 해결하기 위해 접근 방식을 근본적으로 재고하였습니다.

처음에는 모든 조건을 SQL 조건문 내에서 해결하려는 방식으로 접근했으나, 이는 복잡한 비즈니스 로직을 데이터베이스 쿼리에 과도하게 의존하게 만들었고, 이로 인해 발생한 문제였습니다.

문제의 근본 원인을 이해한 후, 해결책으로 시간 조건 필터링을 SQL에서 처리하는 대신 애플리케이션 코드 내에서 직접 처리하도록 구조를 변경했습니다.