개발일지 2026-07-18
개발일지 (2026-07-18)
개요
수강권 상태 복원 버그 수정, 예약 오픈일수 학생 앱 적용, 하드코딩 제거 및 UI 개선을 진행했다.
수정/생성 파일 목록
백엔드 (piano-backend)
StudentTicketService.java(수정) — DEPLETED 상태에서 취소 시 복원 허용StudentBookingService.java(수정) — 예약 오픈일수 API 추가StudentBookingController.java(수정) —/open-days엔드포인트 추가
프론트 — 학생 앱 (student)
api/booking.ts(수정) —getOpenDaysAPI 추가pages/LessonBookingPage.tsx(수정) — 오픈일수 maxDate 적용, ticketExpiresAt 선언 순서 버그 수정pages/DashboardPage.tsx(수정) — "피아노" 하드코딩 제거pages/MyPage.tsx(수정) — "피아노" 하드코딩 제거pages/LoginPage.tsx(수정) — 슬로건 "음악과 함께 성장하는 특별한 시간"으로 변경
파일별 상세
1. 수강권 DEPLETED 복원 버그 수정
예약 3회 후 2회 취소 시 횟수는 복원되지만 status가 DEPLETED로 남는 버그.
- 원인:
restore()에서 ACTIVE 상태만 복원 허용 → DEPLETED는 차단됨 - 수정: DEPLETED도 복원 허용.
incrementSessionSQL이 자동으로 DEPLETED→ACTIVE 전환.
2. 예약 오픈일수 학생 앱 적용
학원 설정의 bookingOpenDays를 학생 앱 예약 달력에 반영.
- 백엔드:
/student/bookings/open-daysAPI 추가 - 프론트: 수강권 만료일과 오픈일수 중 빠른 날짜를 maxDate로 적용
- 달력에서 오픈일수 초과 날짜 클릭 차단 + 화살표 이동 제한
3. 하드코딩 제거 및 UI 개선
- "피아노" 하드코딩 전면 제거 (마이페이지, 대시보드, 예약 목록)
- 로그인 슬로건: "피아노와 함께하는 특별한 시간" → "음악과 함께 성장하는 특별한 시간"
트러블슈팅 메모
- ticketExpiresAt 선언 전 참조:
maxDateStr계산에서ticketExpiresAt를 사용하는데, useState 선언이 아래에 있어서 런타임 에러(Cannot access before initialization) → 선언 뒤로 이동하여 해결 - DEPLETED 상태 전환은 양방향이어야 한다. 차감 시 ACTIVE→DEPLETED는 되는데 복원 시 역방향이 안 되면 데이터 불일치가 생긴다.
결론 / 배운 점
- 상태 전환은 항상 양방향을 고려해야 한다. A→B 전환만 만들고 B→A를 빼먹으면 취소/롤백 시 데이터가 꼬인다.
- 변수 선언 순서가 런타임에 영향을 줄 수 있다. React 컴포넌트 내 const 선언도 순서가 중요하다. 빌드는 되지만 런타임에서 초기화 전 참조 에러가 난다.
댓글 0
- 첫 번째 댓글을 남겨보세요.