프리다이빙 클래스 예약·결제 플랫폼
본 요구사항(정식 인증 전환, 클래스 조회·예약·결제, 알림톡·푸시, 다이빙 포인트·리뷰, 수업 후 기록 연동)을 반영한 프리다이빙 클래스 예약 플랫폼 맞춤 구현한 프로젝트입니다.
프로젝트 개요
본 요구사항(정식 인증 전환, 클래스 조회·예약·결제, 알림톡·푸시, 다이빙 포인트·리뷰, 수업 후 기록 연동)을 반영한 프리다이빙 클래스 예약 플랫폼 맞춤 구현한 프로젝트입니다. 첫 화면에서 오늘 남은 클래스 시간표와 정원을 바로 보여 주며.
작업 범위
- 홈·오늘의 클래스: 수강생이 첫 화면에서 오늘 남은 클래스 시간표와 장소별 잔여 정원을 한 흐름으로 봅니다. 정원 여유 칩으로 시간표를 거르고 클래스를 눌러 상세로 이동합니다
- 클래스 조회·예약·결제: 수강생이 클래스 일정·가격·유의사항을 확인하고 규정에 동의한 뒤 결제하면 예약이 확정됩니다. 내 예약에서 결제 내역과 취소를 확인합니다
- 다이빙 포인트·리뷰: 수강생이 실내 풀장과 바다 포인트의 이용 규정과 위치 정보를 보고 평점과 리뷰, 사진을 확인합니다. 수강 이력이 있으면 리뷰를 작성합니다
- 수업 후 기록: 수강생이 수업 뒤 강사가 남긴 진도와 피드백, 본인의 다이빙 기록을 한곳에서 봅니다. 기존 기록 기능과 같은 화면에서 이어집니다
주요 업무
- 홈·오늘의 클래스 화면: 히어로의 오늘 시간표 장면(시간·장소·강사·잔여 정원)과 예약하기 버튼 1개, 정원 여유 칩 필터, 이번 주 클래스 목록, 포인트 소개 카드, 이용 흐름 4단계 구조를 설계합니다
- 클래스 조회·예약·결제 화면: 클래스 목록·상세, 유의사항 확인과 규정 동의, 결제 요청·승인 대화상자, 예약 확정 안내, 내 예약 목록과 취소 구조를 설계합니다
- 다이빙 포인트·리뷰 화면: 포인트 목록·상세, 평균 평점 집계, 리뷰 작성 대화상자와 사진 첨부, 이용 규정 표시 구조를 설계합니다
- 수업 후 기록 화면: 수업별 진도 체크, 강사 피드백, 다이빙 기록 목록, 기록 추가 대화상자 구조를 설계합니다




프로젝트 핵심 과제
기존 연락처·아이디 로그인 회원을 Supabase Auth 로 옮길 때 기존 예약·기록과의 연결을 유지하는 전환 절차 설계
동시에 같은 클래스에 결제가 몰릴 때 정원을 초과하지 않
결제 승인 전 좌석 임시 확보와 만료 처리 설계 필요
알림톡 템플릿 승인 일정이 협의 대상이라 템플릿 변수 정의와 발송 로직을 분리해 승인 뒤 교체만으로 반영하는 구조
웹뷰 앱의 네이티브 수정은 서명 계정 협조가 필요하므로 푸시 수신 인터페이스를 웹 코드와 분리해 정의하는 설계
핵심 기능 상세
홈·오늘의 클래스
수강생이 첫 화면에서 오늘 남은 클래스 시간표와 장소별 잔여 정원을 한 흐름으로 봅니다. 정원 여유 칩으로 시간표를 거르고 클래스를 눌러 상세로 이동합니다.
- 클래스 일정과 예약 건수를 조인한 뷰로 잔여 정원을 계산해 시간표에 표시하는 구조 설계
- 정원 여유 칩과 시간표를 같은 상태로 연결해 필터 결과가 즉시 그려지도록 구현
- Supabase RLS 로 공개 조회 컬럼과 본인 예약 컬럼을 분리하는 정책 설계
잔여 정원을 화면 계산이 아니라 데이터베이스 뷰에서 만들어 모든 화면이 같은 숫자를 보도록 구성합니다.


클래스 조회·예약·결제
수강생이 클래스 일정·가격·유의사항을 확인하고 규정에 동의한 뒤 결제하면 예약이 확정됩니다. 내 예약에서 결제 내역과 취소를 확인합니다.
- 토스페이먼츠 결제 승인 API 를 Edge Function 에서 호출하고 금액을 서버에서 다시 검증하는 구조 구현
- 결제 웹훅 수신 함수로 예약 상태를 결제 상태와 동기화하고 중복 호출은 멱등 키로 방어
- 규정 동의 시각과 동의 버전을 예약 레코드에 함께 저장하는 스키마 설계
결제 승인과 예약 확정을 하나의 함수 흐름으로 묶어 결제만 되고 예약이 비는 상태를 막는 구조를 구현합니다.


다이빙 포인트·리뷰
수강생이 실내 풀장과 바다 포인트의 이용 규정과 위치 정보를 보고 평점과 리뷰, 사진을 확인합니다. 수강 이력이 있으면 리뷰를 작성합니다.
- 리뷰 테이블과 평점 집계 뷰를 분리해 평균 평점과 리뷰 수를 한 번의 조회로 제공
- 사진 업로드를 Supabase Storage 서명 URL 로 처리하고 파일 형식·용량을 서버에서 검증
- 수강 이력이 있는 회원만 리뷰를 쓸 수 있도록 RLS 정책으로 작성 권한 제한
수강 이력과 리뷰 작성 권한을 같은 정책으로 묶어 근거 있는 리뷰만 쌓이는 구조를 설계합니다.


수업 후 기록
수강생이 수업 뒤 강사가 남긴 진도와 피드백, 본인의 다이빙 기록을 한곳에서 봅니다. 기존 기록 기능과 같은 화면에서 이어집니다.
- 기존 기록 테이블을 유지한 채 예약·수업 레코드와 외래 키로 연결하는 마이그레이션 설계
- 피드백 등록 시 알림톡 또는 푸시 발송 요청을 큐 테이블에 적재하는 흐름 구현
- 푸시 기기 토큰 등록·갱신 API 와 수신 라우팅 인터페이스를 웹뷰 래퍼와 분리해 정의
기존 기록 데이터를 옮기지 않고 연결만 추가해 전환 중에도 기존 화면이 그대로 동작하도록 설계합니다.


프로젝트 진행 단계
인증 전환과 데이터 구조 설계 · 2026.11
Supabase Auth 전환 계획, 기존 데이터 연결 스키마, RLS 정책 정의
클래스 조회·예약 구현 · 2026.11
일정·정원 뷰, 예약 생성 함수, 규정 동의 저장 구조 구현
결제·알림 연동 · 2026.11
토스페이먼츠 승인·웹훅, 알림톡 템플릿 변수 매핑과 발송 큐 구현
포인트·리뷰와 푸시 인터페이스 · 2026.11
포인트·리뷰 화면, FCM 토큰 관리 API, 웹뷰 수신 인터페이스 정의
개발 결과
기술적 주안점
- 잔여 정원을 화면 계산이 아니라 데이터베이스 뷰에서 만들어 모든 화면이 같은 숫자를 보도록 구성합니다
- 결제 승인과 예약 확정을 하나의 함수 흐름으로 묶어 결제만 되고 예약이 비는 상태를 막는 구조를 구현합니다
- 수강 이력과 리뷰 작성 권한을 같은 정책으로 묶어 근거 있는 리뷰만 쌓이는 구조를 설계합니다