gc-guide-api/.claude/rules/code-style.md
htlee d332283e86 feat: Spring Boot 3.5 + JDK 17 초기 프로젝트 구성
- Spring Boot 3.5.2 + Spring Security + JPA + PostgreSQL
- Google OAuth2 ID Token 검증 (google-api-client)
- JWT 인증 (jjwt 0.12.6)
- H2 인메모리 DB (로컬) / PostgreSQL (운영) 프로필 분리
- Nexus 프록시 경유 Maven 빌드 설정
- 팀 워크플로우 템플릿 (common + java-maven) 적용
2026-02-14 13:00:24 +09:00

2.1 KiB

Java 코드 스타일 규칙

일반

  • Java 17+ 문법 사용 (record, sealed class, pattern matching, text block 활용)
  • 들여쓰기: 4 spaces (탭 사용 금지)
  • 줄 길이: 120자 이하
  • 파일 끝에 빈 줄 추가

클래스 구조

클래스 내 멤버 순서:

  1. static 상수 (public → private)
  2. 인스턴스 필드 (public → private)
  3. 생성자
  4. public 메서드
  5. protected/package-private 메서드
  6. private 메서드
  7. inner class/enum

Spring Boot 규칙

계층 구조

  • Controller → Service → Repository 단방향 의존
  • Controller에 비즈니스 로직 금지 (요청/응답 변환만)
  • Service 계층 간 순환 참조 금지
  • Repository에 비즈니스 로직 금지

DTO와 Entity 분리

  • API 요청/응답에 Entity 직접 사용 금지
  • DTO는 record 또는 불변 클래스로 작성
  • DTO ↔ Entity 변환은 매퍼 클래스 또는 팩토리 메서드 사용

의존성 주입

  • 생성자 주입 사용 (필드 주입 @Autowired 사용 금지)
  • 단일 생성자는 @Autowired 어노테이션 생략
  • Lombok @RequiredArgsConstructor 사용 가능

트랜잭션

  • @Transactional 범위 최소화
  • 읽기 전용: @Transactional(readOnly = true)
  • Service 메서드 레벨에 적용 (클래스 레벨 지양)

Lombok 규칙

  • @Getter, @Setter 허용 (Entity에서 Setter는 지양)
  • @Builder 허용
  • @Data 사용 금지 (명시적으로 필요한 어노테이션만)
  • @AllArgsConstructor 단독 사용 금지 (@Builder와 함께 사용)
  • @Slf4j 로거 사용

예외 처리

  • 비즈니스 예외는 커스텀 Exception 클래스 정의
  • @ControllerAdvice로 전역 예외 처리
  • 예외 메시지에 컨텍스트 정보 포함
  • catch 블록에서 예외 무시 금지 (// ignore 금지)

기타

  • Optional은 반환 타입으로만 사용 (필드, 파라미터에 사용 금지)
  • null 반환보다 빈 컬렉션 또는 Optional 반환
  • Stream API 활용 (단, 3단계 이상 체이닝은 메서드 추출)
  • 하드코딩된 문자열/숫자 금지 → 상수 또는 설정값으로 추출