사이트픽 블로그
← 목록으로

개발일지 2026-07-18

개발일지 (2026-07-18)

개요

수강권 상태 복원 버그 수정, 예약 오픈일수 학생 앱 적용, 하드코딩 제거 및 UI 개선을 진행했다.


수정/생성 파일 목록

백엔드 (piano-backend)

  • StudentTicketService.java (수정) — DEPLETED 상태에서 취소 시 복원 허용
  • StudentBookingService.java (수정) — 예약 오픈일수 API 추가
  • StudentBookingController.java (수정) — /open-days 엔드포인트 추가

프론트 — 학생 앱 (student)

  • api/booking.ts (수정) — getOpenDays API 추가
  • pages/LessonBookingPage.tsx (수정) — 오픈일수 maxDate 적용, ticketExpiresAt 선언 순서 버그 수정
  • pages/DashboardPage.tsx (수정) — "피아노" 하드코딩 제거
  • pages/MyPage.tsx (수정) — "피아노" 하드코딩 제거
  • pages/LoginPage.tsx (수정) — 슬로건 "음악과 함께 성장하는 특별한 시간"으로 변경

파일별 상세

1. 수강권 DEPLETED 복원 버그 수정

예약 3회 후 2회 취소 시 횟수는 복원되지만 status가 DEPLETED로 남는 버그.

  • 원인: restore()에서 ACTIVE 상태만 복원 허용 → DEPLETED는 차단됨
  • 수정: DEPLETED도 복원 허용. incrementSession SQL이 자동으로 DEPLETED→ACTIVE 전환.

2. 예약 오픈일수 학생 앱 적용

학원 설정의 bookingOpenDays를 학생 앱 예약 달력에 반영.

  • 백엔드: /student/bookings/open-days API 추가
  • 프론트: 수강권 만료일과 오픈일수 중 빠른 날짜를 maxDate로 적용
  • 달력에서 오픈일수 초과 날짜 클릭 차단 + 화살표 이동 제한

3. 하드코딩 제거 및 UI 개선

  • "피아노" 하드코딩 전면 제거 (마이페이지, 대시보드, 예약 목록)
  • 로그인 슬로건: "피아노와 함께하는 특별한 시간" → "음악과 함께 성장하는 특별한 시간"

트러블슈팅 메모

  • ticketExpiresAt 선언 전 참조: maxDateStr 계산에서 ticketExpiresAt를 사용하는데, useState 선언이 아래에 있어서 런타임 에러(Cannot access before initialization) → 선언 뒤로 이동하여 해결
  • DEPLETED 상태 전환은 양방향이어야 한다. 차감 시 ACTIVE→DEPLETED는 되는데 복원 시 역방향이 안 되면 데이터 불일치가 생긴다.

결론 / 배운 점

  • 상태 전환은 항상 양방향을 고려해야 한다. A→B 전환만 만들고 B→A를 빼먹으면 취소/롤백 시 데이터가 꼬인다.
  • 변수 선언 순서가 런타임에 영향을 줄 수 있다. React 컴포넌트 내 const 선언도 순서가 중요하다. 빌드는 되지만 런타임에서 초기화 전 참조 에러가 난다.

댓글 0

  • 첫 번째 댓글을 남겨보세요.