프로젝트 개요
SI HiCoach는 개인 트레이닝(PT) 시장에서 트레이너와 회원 간의 매칭, 수업 일정 관리, 운동 기록 추적을 하나의 플랫폼으로 통합한 모바일 앱의 백엔드 시스템입니다.
NestJS 프레임워크 기반으로 DDD(Domain-Driven Design) 아키텍처를 적용하여 domain/, application/, presentation/, infrastructure/ 4계층으로 설계하였습니다. TypeORM을 활용한 엔티티 모델링, Passport JWT 기반 인증, Firebase Admin을 통한 푸시 알림, AWS S3 Presigned URL 방식의 이미지 업로드까지 체계적으로 구성했습니다.
기능 플로우
주요 기능
- 트레이너-회원 매칭: 트레이너가 회원을 등록하면 매칭이 생성됩니다. 매칭에는 운동 목표(
ExerciseGoal)가 연결되며, 수강권(티켓) 수량이 함께 관리됩니다. - 수강권(티켓) 관리: 매칭 단위로 수강권 수량을 관리합니다. 수업 등록 시 자동으로 차감되며, 잔여 수량이 부족하면 수업 생성이 제한됩니다. 트레이너가 수강권을 추가 충전할 수 있습니다.
- 수업(Study) 관리: 트레이너가 수업 일정을 등록하면 시작/종료 시간, 메모, 수행 운동 목록이 함께 기록됩니다. 수업별 회차(round)를 자동으로 계산하여 진행 현황을 추적합니다.
- 운동 종목 관리: 운동 종목을 부위(
part)와 유형(type)으로 분류하여 관리합니다. 트레이너가 수업에 사용할 운동 종목을 등록하고, 수업 기록 시 수행한 운동을 연결합니다. - 인바디 기록 관리: 회원의 인바디 측정 결과를 이미지로 저장합니다.
AWS S3Presigned URL을 통해 클라이언트가 직접 업로드하여 서버 부하를 최소화합니다. - 월별 캘린더: 트레이너가 특정 월의 수업 일정을 한눈에 확인할 수 있습니다. 공휴일 데이터를 포함하여 일정 관리를 지원합니다.
- 회원별 마이페이지: 회원은 자신의 수업 이력, 완료 수업 수, 매칭된 트레이너 정보를 조회할 수 있습니다. 트레이너 역시 담당 회원 목록과 개별 회원 상세 정보를 확인할 수 있습니다.
- 푸시 알림:
Firebase Admin SDK를 활용하여 디바이스별 푸시 알림을 발송합니다. 회원별 디바이스 UUID를 관리하며, 알림 수신 동의 여부를 별도로 관리합니다. - 역할 기반 접근 제어: JWT 토큰 기반 인증에 트레이너/회원 역할 분리를 적용했습니다. 트레이너 전용 API에는
TrainerRoleGuard를 적용하여 권한을 제어합니다.



