발레 스튜디오 수업 예약·결제 홈페이지
히어로 영상·사진이 있는 반응형 메인, 수업 시간표에서 시작하는 예약 신청, 네이버페이·카카오페이 결제, 내 예약 조회·변경·취소, 블로그 목록·상세를 하나의 흐름으로 연결하는 맞춤 MVP 프로젝트입니다.
프로젝트 개요
히어로 영상·사진이 있는 반응형 메인, 수업 시간표에서 시작하는 예약 신청, 네이버페이·카카오페이 결제, 내 예약 조회·변경·취소, 블로그 목록·상세를 하나의 흐름으로 연결하는 맞춤 MVP 프로젝트입니다. React + Node.js + PostgreSQL 기반으로 설계했습니다.
작업 범위
- 오늘의 수업 홈: 첫 화면에서 연습실 사진·영상 위에 오늘 남은 수업 시간표와 잔여 좌석을 보여 주고, 수업 예약 버튼 한 개로 예약 흐름에 들어갑니다
- 수업 시간표·예약 신청: 요일별 수업을 고르고 시간대·수강생 정보를 입력해 예약을 신청합니다. 정원이 찬 수업은 대기 신청으로 바뀝니다
- 네이버페이·카카오페이 결제: 예약 확정 단계에서 결제 수단을 고르고 결제 요청, 승인 결과, 실패 안내까지 한 화면 흐름으로 처리합니다
- 블로그 목록·상세: 학원 소식과 수업 이야기를 카드 목록으로 보고, 글을 눌러 본문과 관련 수업 예약 링크를 확인합니다
주요 업무
- 오늘의 수업 홈 화면: 히어로 영상·사진 영역, 오늘 시간표 카드, 반응형 레이아웃
- 수업 시간표·예약 신청 화면: 수업·시간대 선택, 예약 정보 입력, 정원 검사, 예약 상태 관리
- 네이버페이·카카오페이 결제 화면: PG 표준 API 결제 요청·승인·취소, 결제 결과 웹훅 수신
- 블로그 목록·상세 화면: 게시글 목록 조회, 상세 조회, 카테고리 필터




프로젝트 핵심 과제
히어로 영상은 클라이언트 제공 촬영본에 따라 용량이 달라 모바일에서는 사진으로 대체하는 구조를 함께 제안할 계획입니다
결제 가맹 계약과 문자 발신번호 등록은 발주사 명의 절차가 필요해 착수 초기에 일정을 맞출 계획입니다
카카오 T 주차 연동은 공개 API 여부가 불확실해 이번 범위에서 제외하고 별도 검토 의견을 제안할 계획입니다
기존 관리자 페이지 소스가 제공되는 전제이며
코드 구조에 따라 연동 방식을 확정합니다
핵심 기능 상세
오늘의 수업 홈
첫 화면에서 연습실 사진·영상 위에 오늘 남은 수업 시간표와 잔여 좌석을 보여 주고, 수업 예약 버튼 한 개로 예약 흐름에 들어갑니다. 히어로 영상·사진 영역, 오늘 시간표 카드, 반응형 레이아웃.
- 반응형 히어로 영역에 영상과 대체 사진을 함께 두어 모바일 데이터 환경에서는 사진으로 대체하는 구조를 설계
- 오늘 수업 목록을 수업 테이블 조회 API로 불러오고 잔여 좌석을 실시간으로 표시하는 구조를 구현
- 이미지는 크기별 파일을 두고 srcset으로 내려 주는 방식을 적용
연습실 영상과 오늘 수업 시간표를 한 화면에 올려 첫 방문자가 바로 예약으로 이어지게 구성합니다.


수업 시간표·예약 신청
요일별 수업을 고르고 시간대·수강생 정보를 입력해 예약을 신청합니다. 정원이 찬 수업은 대기 신청으로 바뀝니다. 수업·시간대 선택, 예약 정보 입력, 정원 검사, 예약 상태 관리.
- 수업·회차·예약 테이블을 정규화하고 좌석 수 검사를 트랜잭션으로 묶어 중복 예약을 막는 구조 설계
- 예약 상태(신청·결제대기·확정·취소)를 상태 전이 표로 관리하는 서버 로직 구현
- Prisma 마이그레이션으로 수업 스키마를 버전 관리하는 구성 적용
정원 검사와 예약 저장을 한 트랜잭션으로 처리해 같은 좌석에 두 건이 들어오지 않는 구조를 구현합니다.


네이버페이·카카오페이 결제
예약 확정 단계에서 결제 수단을 고르고 결제 요청, 승인 결과, 실패 안내까지 한 화면 흐름으로 처리합니다. PG 표준 API 결제 요청·승인·취소, 결제 결과 웹훅 수신.
- 네이버페이·카카오페이 결제 승인 API를 결제 어댑터로 감싸 수단별 차이를 서버 한 곳에 모으는 구조 설계
- 결제 결과 웹훅의 서명을 검증하고 중복 수신을 멱등 키로 걸러 주문 상태를 한 번만 바꾸는 로직 구현
- 승인 직전 금액을 서버 기준으로 다시 계산해 화면 조작 값과 대조하는 검증 적용
결제 수단이 달라도 승인·취소·웹훅이 같은 주문 상태 전이로 모이는 결제 계층을 구현합니다.


블로그 목록·상세
학원 소식과 수업 이야기를 카드 목록으로 보고, 글을 눌러 본문과 관련 수업 예약 링크를 확인합니다. 게시글 목록 조회, 상세 조회, 카테고리 필터.
- 게시글·카테고리 테이블과 페이지 단위 조회 API 설계
- 본문을 마크다운으로 저장하고 서버에서 안전하게 변환해 내려 주는 구조 구현
- 글 상세 주소에 슬러그를 쓰는 라우팅 구성
목록과 상세가 같은 게시글 API를 공유하고 관련 수업 링크로 예약에 이어지는 구조를 구현합니다.


프로젝트 진행 단계
수업·예약·결제 데이터 모델 설계 · 2026.11
수업·회차·예약·결제 ERD 설계, Prisma 스키마와 마이그레이션 정의
예약·정원 검사 API 구현 · 2026.11
좌석 검사 트랜잭션과 예약 상태 전이, 변경·취소 API 구현
결제 어댑터와 웹훅 연동 · 2026.11
네이버페이·카카오페이 승인·취소 어댑터와 웹훅 서명 검증 구현
홈·블로그 화면과 반응형 마무리 · 2026.11
히어로 영역, 시간표, 블로그 목록·상세 화면과 모바일 레이아웃 구현
개발 결과
기술적 주안점
- 연습실 영상과 오늘 수업 시간표를 한 화면에 올려 첫 방문자가 바로 예약으로 이어지게 구성합니다
- 정원 검사와 예약 저장을 한 트랜잭션으로 처리해 같은 좌석에 두 건이 들어오지 않는 구조를 구현합니다
- 결제 수단이 달라도 승인·취소·웹훅이 같은 주문 상태 전이로 모이는 결제 계층을 구현합니다