트러블 슈팅 <시간 설정 로직>

김규현·2025년 4월 28일
0

25/04/28

내용

문제 배경

가게운영 시간 외에는 주문을 할수 없도록 현재 시각과 openTime 과 closeTime을 넣고 현재 시간과 비교를 하는 것으로 넣었는데 여기서 문제가 생김

Store store = storeRepository.findStoreByIdOrElseThrow(storeId);
        LocalTime now = LocalTime.now(); // 현재 시각 (시간, 분까지만)
        LocalTime openTime = store.getOpenTime(); // 가게 오픈 시간
        LocalTime closeTime = store.getCloseTime(); // 가게 마감 시간
        if (now.isBefore(openTime) || now.isAfter(closeTime)) {
            throw new RuntimeException("지금은 주문하실 수 없습니다. (운영시간: " + openTime + " ~ " + closeTime + ")");

문제 요약

  • openTimecloseTime으로 현재 시각과 비교
  • 하지만 23:00 ~ 로 시작해서 하는 가게들은 자정이 넘어 가면 오류가 생김.

해결 과정

Store store = storeRepository.findStoreByIdOrElseThrow(storeId);
        LocalTime now = LocalTime.now(); // 현재 시각 (시간, 분까지만)
        LocalTime openTime = store.getOpenTime(); // 가게 오픈 시간
        LocalTime closeTime = store.getCloseTime(); // 가게 마감 시간

        boolean isOpen;

        if (store.getDeletedAt() != null) {
            throw new CustomException(ErrorCode.STORE_NOT_FOUND);
        }

        if (openTime.isBefore(closeTime)) {
            isOpen = !now.isBefore(openTime) && !now.isAfter(closeTime);
        } else {
            isOpen = !now.isBefore(openTime) || !now.isAfter(closeTime);
        }

        if (!isOpen) {
            throw new RuntimeException("지금은 주문하실 수 없습니다. (운영시간: " + openTime + " ~ " + closeTime + ")");
        }

기존에는 사이의 시간만 확인을 할 수 있었지만 지금의 코드

  1. openTime.isBefore(closeTime) 조건

openTime이 closeTime보다 이전이면 (예: 아침 9시 ~ 저녁 10시처럼)
→ 하루 안의 영업시간입니다.

  1. openTime.isBefore(closeTime)이 아닌 경우

openTime이 closeTime보다 나중인 경우 (ex: 20:00 ~ 03:00, 밤 넘어가는 경우)
→ 날짜를 넘어가는 영업시간

true 로 해주고

isOpen이 false이면 주문 불가 예외를 발생시키며 운영시간 안내 메시지를 보여줍니다.

결론

 이번 문제를 통해 운영 시간이 자정을 넘어가는 경우(예: 23:00~03:00)에는 단순히 openTime과 closeTime을 비교하는 로직으로는 정확한 판단이 어렵다는 것을 알게 되었고 날짜를 넘기는 영업 시간에 맞게 openTime과 closeTime을 비교하는 처리를 추가하여 문제를 해결할 수 있었다.
 앞으로는 시간대가 자정을 넘어가는 특수한 상황까지 고려하여 로직을 설계하는 것이 중요하다는 점을 얻었다.

0개의 댓글