This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
STUDYMATE-SERVER는 언어 교환 학습 플랫폼의 백엔드 API 서버입니다. 사용자 매칭, 실시간 채팅, 온보딩, 학습 관리 기능을 제공합니다.
- 백엔드 개발자 A: Java/Spring Boot 개발 담당
- minhan (나): 인프라 및 DevOps 담당
- STUDYMATE-CLIENT: React 기반 웹 클라이언트 (Cloudflare Pages)
백엔드 개발 시 반드시 확인해야 할 클라이언트 관련 사항:
- TypeScript 인터페이스:
../STYDYMATE-CLIENT/src/types/DTO 응답과 일치 확인 - 컴포넌트 요구사항:
../STYDYMATE-CLIENT/docs/06-frontend/components/API 응답 형식 확인 - 에러 처리:
../STYDYMATE-CLIENT/src/utils/errorHandling.ts에러 코드 동기화 - WebSocket 이벤트: 클라이언트 이벤트 핸들러와 서버 이벤트 일치
- 상태 관리:
../STYDYMATE-CLIENT/src/stores/Zustand store와 서버 상태 동기화
문서 업데이트 필수:
- Controller 변경 →
docs/04-api/api-reference.md업데이트 - DTO 변경 → 클라이언트 TypeScript 인터페이스 확인 요청
- Entity 변경 →
docs/05-database/database-schema.md업데이트 - 에러 코드 추가 →
docs/07-backend/error-handling.md업데이트
- Backend: Spring Boot 3.5.3, Java 17
- Database: MySQL 8.0 (NCP Cloud DB for MySQL)
- Cache: Redis 7 (NCP Cloud DB for Redis)
- Storage: NCP Object Storage (AWS S3 호환)
- Authentication: JWT + Spring Security
- External API: Naver OAuth (OpenFeign)
- WebSocket: STOMP를 통한 실시간 채팅
- Documentation: Swagger/OpenAPI 3
- Containerization: Docker + Docker Compose
# 프로젝트 빌드
./gradlew build
# 애플리케이션 실행 (로컬)
./gradlew bootRun
# Docker 컨테이너 실행 (개발환경)
docker-compose -f docker-compose.dev.yml up -d
# Docker 컨테이너 중지
docker-compose -f docker-compose.dev.yml down- Java 17 필수
- 로컬 개발시 MySQL 8.0 및 Redis 7이 Docker Compose로 실행
- 애플리케이션은 8080 포트에서 실행
- MySQL은 3306, Redis는 6379 포트 사용
com.studymate/
├── config/ # 설정 클래스들 (Security, Redis, WebSocket, Swagger)
├── common/ # 공통 컴포넌트 (DTO, Entity, Exception)
├── auth/ # 인증 관련 (JWT, OAuth)
├── domain/ # 비즈니스 도메인
│ ├── user/ # 사용자 관리 (Naver OAuth, JWT)
│ ├── chat/ # 실시간 채팅 (WebSocket)
│ ├── onboard/ # 온보딩 설문조사
│ └── matching/ # 사용자 매칭 로직
└── exception/ # 전역 예외 처리
- Naver OAuth 인증:
NaverLoginController,NaverApi(OpenFeign) - JWT 토큰 관리:
TokenService,JwtUtils,JwtAuthenticationFilter - 사용자 프로필: 위치, 영어명, 자기소개, 프로필 이미지
- WebSocket 실시간 채팅:
WebSocketConfig,ChatController - 채팅방 관리:
ChatRoomController,ChatRoomService - 메시지 저장:
ChatMessage,ChatRoom엔티티
- 언어 설정: 학습 언어, 수준, 모국어
- 학습 스타일: 동기, 학습 스타일, 소통 방법
- 파트너 선호도: 성별, 성격 유형
- 스케줄 관리: 요일별 학습 시간 설정
- JWT 기반 Stateless 인증
- CSRF 비활성화 (API 서버)
- 공개 경로:
/login/**,/auth/** - 모든 다른 엔드포인트는 인증 필요
- BaseTimeEntity: 모든 엔티티의 생성/수정 시간 자동 관리
- 복합키 엔티티: 온보딩 관련 매핑 테이블들 (
OnboardLangLevelId,OnboardMotivationId등) - MySQL: 메인 데이터 저장소
- Redis: 세션 및 캐시 저장소
- VPC: studymate-vpc (10.0.0.0/16)
- Public Subnet: Load Balancer (10.0.1.0/24)
- Private Subnet: Application Server (10.0.2.0/24)
- 도메인: api.languagemate.kr
- SSL/TLS: Load Balancer에서 SSL Offloading
Production Environment:
- Server: 2 vCPU, 4GB RAM (Auto-scaling enabled)
- Load Balancer: Network Load Balancer
- Database: Cloud DB for MySQL (Standard)
- Cache: Cloud DB for Redis (Standard)
- Storage: Object Storage (S3 호환)
- CDN: Global CDN# Production (NCP)
SPRING_PROFILES_ACTIVE=prod
DB_HOST={NCP_MYSQL_ENDPOINT}
DB_PORT=3306
DB_NAME=studymate
REDIS_HOST={NCP_REDIS_ENDPOINT}
REDIS_PORT=6379
NCP_ACCESS_KEY={ACCESS_KEY}
NCP_SECRET_KEY={SECRET_KEY}
NCP_OBJECT_STORAGE_ENDPOINT=https://kr.object.ncloudstorage.com
NCP_BUCKET_NAME=studymate-storage
# OAuth
NAVER_CLIENT_ID={NAVER_CLIENT_ID}
NAVER_CLIENT_SECRET={NAVER_CLIENT_SECRET}- Local:
http://localhost:8080/swagger-ui/index.html - Production:
https://api.languagemate.kr/swagger-ui/index.html - OpenAPI 3: SpringDoc으로 자동 생성
GET /api/v1/users # 리스트 조회
GET /api/v1/users/{id} # 단일 조회
POST /api/v1/users # 생성
PUT /api/v1/users/{id} # 전체 수정
PATCH /api/v1/users/{id} # 부분 수정
DELETE /api/v1/users/{id} # 삭제
- Controller: REST API 엔드포인트 정의
- Service: 비즈니스 로직 구현
- Repository: 데이터 접근 계층
- DTO: 데이터 전송 객체 (Request/Response 분리)
- Entity: JPA 엔티티 (BaseTimeEntity 상속)
- JWT 토큰은 Authorization 헤더로 전달 (
Bearer {token}) - 민감한 정보는 절대 로그에 남기지 않음
- 환경 변수는
.env파일로 관리 (절대 커밋하지 않음) - CORS 설정은 프론트엔드 도메인만 허용
- 연결 엔드포인트:
/ws - STOMP 프로토콜 사용
- 메시지 브로커:
/topic,/queue - 앱 목적지 접두사:
/app
// 성공 응답
{
"success": true,
"data": { ... },
"message": "Success"
}
// 에러 응답
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Error message"
}
}main: 프로덕션 배포develop: 개발 통합feature/{task-name}: 기능 개발hotfix/{issue-name}: 긴급 수정
feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 코드 리팩토링
chore: 빌드 업무 수정
- Spring Boot 애플리케이션 개발
- 비즈니스 로직 구현
- API 설계 및 구현
- 데이터베이스 스키마 설계
- NCP 인프라 구성 및 관리
- Docker/Docker Compose 설정
- CI/CD 파이프라인 구축
- 환경 변수 및 시크릿 관리
- 로드 밸런싱 및 오토스케일링 설정
- 인프라 변경사항은 반드시 minhan과 협의
- 새로운 환경 변수 추가 시
.env.example업데이트 - 외부 서비스 연동 시 담당자와 사전 협의
Import Task Master's development workflow commands and guidelines, treat as if import is in the main CLAUDE.md file. @./.taskmaster/CLAUDE.md