fix(backend): 쉬는날 문구를 잘못 읽어 영업 중 표시가 틀리던 것 수정 #8

Merged
ttipo merged 1 commits from fix/rest-day-parsing into main 2026-11-05 20:22:24 +09:00
Owner

무엇을 · 왜

2026-11-05 관광공사 상세 26곳을 받은 뒤 결과를 점검하다가, 쉬는날(restdate) 해석 오류로 영업 중 표시가 틀린 장소 17곳을 찾았다.
새로 받은 곳만의 문제가 아니라, 쉬는날 원문에서 'X요일' 낱말만 골라 읽던 파서에 원래 있던 오류다.

원문 이전 해석 곳
"월요일이 공휴일이면 다음 첫 번째 평일 휴관" '번째'가 '매월 둘째 일요일' 규칙(째)에 걸려 매주 월요일 휴무까지 빠짐 → 월요일 영업 중 국립대구박물관 · 국립대구기상과학관 · 대구시민안전테마파크 · 사라온이야기마을
"매주 월요일목요일", "매주 평일(월금)" 양 끝 요일만 휴무 → 가운데 요일 영업 중 북성로공구빵 · 계성중학교 · 엘리몽
"주말 / 공휴일", "주말" 휴무 요일 없음 → 쉬는 날에도 영업 중 큰집식당 · 삼백찬가 · 대구 구 동촌역사 · 대구 녹색에너지체험관 · 팔공문화원
"일요일을 제외한 법정공휴일", "월요일이 공휴일인 경우 화요일 휴무" 조건 속 요일까지 정기 휴무 → 여는 날이 휴무 수성구립 도서관 3곳 · 서구어린이도서관 · 우사랑한우마을

쉬는날 원문을 '/'·'※'·괄호 단위 구절로 나눠 읽는다(backend/src/shared/utils/opening-hours.ts).

  • 조건·예외 문구('경우' · '제외' · '겹치는' · '이면' · '단,' · '다음 첫 번째 평일')에 나온 요일은 정기 휴무로 읽지 않는다.
  • 요일 범위·평일·주말을 요일로 읽는다. 영업시간 문장 속 "월요일 휴관" 구절에는 적용하지 않는다 — 같은 구절의 "월금 10:0018:00" 은 여는 요일이다.
  • 매주가 아닌 휴무(매월 · 매달 · 격주 · 몇째 주 · N주차 · 마지막 주)는 구절마다 판단해 안내로만 남긴다(기존 '매월 둘째 일요일' 규칙과 같다).
    괄호 안 주기는 앞 구절을 꾸민다("매주 월요일 (매월 2주, 4주)" 는 매주 휴무가 아니다).
  • 시설별 쉬는날은 모든 시설이 쉬는 요일만 휴무로 둔다 — 대괄호 머리말("[북카페] 일요일 [다목적홀] 주말")과
    구절 앞의 시설 이름("서문시장 매월 … / 대구서문 야시장 매주 월요일~목요일") 모두. 영업시간의 시설 묶음 규칙과 같다.
  • 시기별 쉬는날("[3월7월 / 9월12월] 월요일 [1월 / 2월 / 8월] 일요일")은 어느 시기인지 몰라 계절 구분(seasonal)으로 두고 영업 중 판단을 하지 않는다.
  • 쉬는날 원문에 섞인 여는 날 안내("화~일 운영", "(평일 정상 운영)")는 휴무로 읽지 않는다. 지금 데이터에는 없고 다른 지역 데이터에 대비한 안전장치다.

확인 방법

cd backend
npm run lint && npm run test
docker exec -w /app wandergo-backend npx jest --config ./test/jest-e2e.json test/place.e2e-spec.ts
# 개발 DB 반영(키 불필요, API 호출 없음)
docker exec wandergo-backend npm run place:sync -- reparse-hours
  • 린트 Warning 0, 단위 테스트 247개 통과(영업시간 47개 — 실제 원문으로 12개 추가), 장소 e2e 18개 통과
  • 개발 DB 에 reparse-hours 로 반영: 1,117곳 중 22곳 바뀜. 수정 전 해석 결과를 저장해 두고 바뀐 곳을 모두 원문과 대조했다.
    • 위 표의 17곳
    • 매주가 아닌 휴무 4곳: 탑골식당("격주 월요일, 화요일") · 칠성종합시장("매달 1, 3주차 일요일")은 안내로만,
      광명반점("매주 일요일 / 매달 마지막주 월요일") · 하얀집("매주 월요일 / 매달 첫째, 셋째 화요일")은 매주 휴무만 요일로 막음
    • 시기별 1곳: 대구창의융합교육원
  • 작업 중 대구 서문시장(야시장 휴무가 시장 전체로 잡힘)·대구광역시립남부도서관(격주 월요일이 매주로 잡힘)이 틀어지는 것을
    전후 비교에서 잡아 고쳤다 — 두 곳은 수정 전 결과 그대로다.

영향 범위

  • backend
  • frontend
  • flutter
  • docker / 인프라
  • 규칙 문서(.claude/)

공유 계약 변경 없음. 영업시간 해석 결과(public_hours)만 바뀌어 앱의 영업 중 표시에 반영된다.
설계 문서 docs/design/place-db.md 에 규칙·사례와 남은 한계(영업시간 문장 속 시설별 휴관 — 엘리바덴 월성점)를 적었다.

체크리스트

  • 린트/분석 통과 (Warning 0) · 변경 영역 테스트 통과
  • 주석 한국어, 매직 넘버·하드코딩 문자열 없음
  • 사용자 노출 실패는 모두 에러 코드와 함께 처리 — 해당 없음
  • 에러 코드를 바꿨다면 npm run sync:error-codes 실행 후 생성 파일까지 커밋 — 해당 없음
  • 민감정보 미커밋
  • 로그에 비밀번호·토큰·요청 본문 전체가 남지 않음

🤖 Generated with Claude Code

## 무엇을 · 왜 2026-11-05 관광공사 상세 26곳을 받은 뒤 결과를 점검하다가, 쉬는날(restdate) 해석 오류로 **영업 중 표시가 틀린 장소 17곳**을 찾았다. 새로 받은 곳만의 문제가 아니라, 쉬는날 원문에서 'X요일' 낱말만 골라 읽던 파서에 원래 있던 오류다. | 원문 | 이전 해석 | 곳 | |---|---|---| | "월요일이 공휴일이면 다음 첫 번째 평일 휴관" | '번째'가 '매월 둘째 일요일' 규칙(`째`)에 걸려 매주 월요일 휴무까지 빠짐 → 월요일 영업 중 | 국립대구박물관 · 국립대구기상과학관 · 대구시민안전테마파크 · 사라온이야기마을 | | "매주 월요일~목요일", "매주 평일(월~금)" | 양 끝 요일만 휴무 → 가운데 요일 영업 중 | 북성로공구빵 · 계성중학교 · 엘리몽 | | "주말 / 공휴일", "주말" | 휴무 요일 없음 → 쉬는 날에도 영업 중 | 큰집식당 · 삼백찬가 · 대구 구 동촌역사 · 대구 녹색에너지체험관 · 팔공문화원 | | "일요일을 제외한 법정공휴일", "월요일이 공휴일인 경우 화요일 휴무" | 조건 속 요일까지 정기 휴무 → 여는 날이 휴무 | 수성구립 도서관 3곳 · 서구어린이도서관 · 우사랑한우마을 | 쉬는날 원문을 '/'·'※'·괄호 단위 구절로 나눠 읽는다(`backend/src/shared/utils/opening-hours.ts`). - 조건·예외 문구('경우' · '제외' · '겹치는' · '이면' · '단,' · '다음 첫 번째 평일')에 나온 요일은 정기 휴무로 읽지 않는다. - 요일 범위·평일·주말을 요일로 읽는다. 영업시간 문장 속 "월요일 휴관" 구절에는 적용하지 않는다 — 같은 구절의 "월~금 10:00~18:00" 은 여는 요일이다. - 매주가 아닌 휴무(매월 · 매달 · 격주 · 몇째 주 · N주차 · 마지막 주)는 구절마다 판단해 안내로만 남긴다(기존 '매월 둘째 일요일' 규칙과 같다). 괄호 안 주기는 앞 구절을 꾸민다("매주 월요일 (매월 2주, 4주)" 는 매주 휴무가 아니다). - 시설별 쉬는날은 모든 시설이 쉬는 요일만 휴무로 둔다 — 대괄호 머리말("[북카페] 일요일 [다목적홀] 주말")과 구절 앞의 시설 이름("서문시장 매월 … / 대구서문 야시장 매주 월요일~목요일") 모두. 영업시간의 시설 묶음 규칙과 같다. - 시기별 쉬는날("[3월~7월 / 9월~12월] 월요일 [1월 / 2월 / 8월] 일요일")은 어느 시기인지 몰라 계절 구분(`seasonal`)으로 두고 영업 중 판단을 하지 않는다. - 쉬는날 원문에 섞인 여는 날 안내("화~일 운영", "(평일 정상 운영)")는 휴무로 읽지 않는다. 지금 데이터에는 없고 다른 지역 데이터에 대비한 안전장치다. ## 확인 방법 ```bash cd backend npm run lint && npm run test docker exec -w /app wandergo-backend npx jest --config ./test/jest-e2e.json test/place.e2e-spec.ts # 개발 DB 반영(키 불필요, API 호출 없음) docker exec wandergo-backend npm run place:sync -- reparse-hours ``` - 린트 Warning 0, 단위 테스트 247개 통과(영업시간 47개 — 실제 원문으로 12개 추가), 장소 e2e 18개 통과 - 개발 DB 에 `reparse-hours` 로 반영: 1,117곳 중 **22곳** 바뀜. 수정 전 해석 결과를 저장해 두고 바뀐 곳을 모두 원문과 대조했다. - 위 표의 17곳 - 매주가 아닌 휴무 4곳: 탑골식당("격주 월요일, 화요일") · 칠성종합시장("매달 1, 3주차 일요일")은 안내로만, 광명반점("매주 일요일 / 매달 마지막주 월요일") · 하얀집("매주 월요일 / 매달 첫째, 셋째 화요일")은 매주 휴무만 요일로 막음 - 시기별 1곳: 대구창의융합교육원 - 작업 중 대구 서문시장(야시장 휴무가 시장 전체로 잡힘)·대구광역시립남부도서관(격주 월요일이 매주로 잡힘)이 틀어지는 것을 전후 비교에서 잡아 고쳤다 — 두 곳은 수정 전 결과 그대로다. ## 영향 범위 - [x] backend - [ ] frontend - [ ] flutter - [ ] docker / 인프라 - [ ] 규칙 문서(.claude/) > 공유 계약 변경 없음. 영업시간 해석 결과(`public_hours`)만 바뀌어 앱의 영업 중 표시에 반영된다. > 설계 문서 `docs/design/place-db.md` 에 규칙·사례와 남은 한계(영업시간 문장 속 시설별 휴관 — 엘리바덴 월성점)를 적었다. ## 체크리스트 - [x] 린트/분석 통과 (Warning 0) · 변경 영역 테스트 통과 - [x] 주석 한국어, 매직 넘버·하드코딩 문자열 없음 - [x] 사용자 노출 실패는 모두 에러 코드와 함께 처리 — 해당 없음 - [x] 에러 코드를 바꿨다면 `npm run sync:error-codes` 실행 후 생성 파일까지 커밋 — 해당 없음 - [x] 민감정보 미커밋 - [x] 로그에 비밀번호·토큰·요청 본문 전체가 남지 않음 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ttipo added 1 commit 2026-11-05 19:32:44 +09:00
fix(backend): 쉬는날 문구를 잘못 읽어 영업 중 표시가 틀리던 것 수정
CI / Backend (lint · test · e2e · build) (pull_request) Successful in 12m37s
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Successful in 12m11s
CI / Frontend (lint · type-check · test) (pull_request) Successful in 11m39s
CI / Backend (lint · test · e2e · build) (push) Successful in 12m42s
CI / Frontend (lint · type-check · test) (push) Successful in 11m2s
CI / 에러 코드 SSOT 동기화 검사 (push) Successful in 11m25s
57f332a731
관광공사 쉬는날(restdate) 원문에서 'X요일' 낱말만 골라 읽어서, 영업 중 표시가 틀린 장소가 17곳 있었다
(2026-11-05 관광공사 상세 26곳을 받은 뒤 점검).
- "공휴일이면 다음 첫 번째 평일 휴관" 의 '번째' 가 '매월 둘째 일요일' 규칙에 걸려 매주 월요일 휴무까지 빠졌다
  (국립대구박물관 등 4곳이 월요일에 영업 중으로 보였다)
- "월요일~목요일" 은 양 끝 요일만 읽고, "주말"·"평일" 은 아예 읽지 않았다(8곳)
- "일요일을 제외한 공휴일", "월요일이 공휴일인 경우 화요일 휴무" 처럼 조건 속 요일을 정기 휴무로 읽었다(5곳)

쉬는날 원문을 '/'·'※'·괄호 단위 구절로 나눠, 조건·예외 문구는 버리고 요일 범위·평일·주말까지 읽는다.
매주가 아닌 휴무(매월·격주·N주차 등)는 구절마다 판단해 안내로만 남기고, 시설별 쉬는날은 모든 시설이
쉬는 요일만 휴무로 둔다. 시기별 쉬는날은 어느 시기인지 몰라 계절 구분으로 두고 영업 중 판단을 하지 않는다.
영업시간 문장 속 "월요일 휴관" 구절에는 범위·평일을 적용하지 않는다 — 같은 구절의 "월~금 10:00~18:00" 은
여는 요일이다.

reparse-hours 로 22곳이 바뀌었고 모두 원문과 대조했다(위 17곳 + 격주·매달 휴무 4곳 + 시기별 1곳).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ttipo merged commit 57f332a731 into main 2026-11-05 20:22:24 +09:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ttipo/wandergo#8