SpringBoot Code Convention

2025년 02월 05일
4

thumbnail.png
SpringBoot Code Convention for 2025. Capstone Design

NAVER의 java 코딩 컨벤션을 따라 작성되었습니다.

Spring Boot 코드 컨벤션


1. 프로젝트 구조

패키지 구조

도메인 별로 패키지를 분리하여 관리합니다.
예시:

com.example.myapp
├── config        // 설정 관련 클래스
├── api           // API 관련 클래스
   └── feature1
       └──  Controller.java
       └──  Service.java
       └──  Repository.java
   └── feature2
       └──  Controller.java
       └──  Service.java
       └──  Repository.java
├── domain        // 엔티티 도메인 객체
├── dto           // 데이터 전송 객체
├── exception     // 예외 처리 관련 클래스
└── util          // 유틸리티 클래스

2. 네이밍 컨벤션

1. 클래스/인터페이스

PascalCase (첫 글자 대문자)
예: UserService, OrderController, ProductRepository

2. 메소드

camelCase (첫 글자 소문자)
예: createUser(), findAllProducts()

3. 변수

camelCase
예: userName, orderList

4. 상수

모두 대문자, 언더스코어로 단어 구분
예: MAX_CONNECTIONS, DEFAULT_PAGE_SIZE


3. 코드 포맷팅

1. 들여쓰기

Tab 또는 스페이스 4칸 사용

2. 줄바꿈 및 공백

각 클래스, 메소드, 필드 사이에 적절한 공백을 두어 가독성을 높입니다.
긴 줄은 100~120자 이내로 작성합니다.

예시:

@Service
public class UserService {
 
    private final UserRepository userRepository;
 
    // 생성자 주입
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
 
    public UserDto createUser(UserDto userDto) {
        // 사용자 생성 로직
        User user = new User(userDto.getName(), userDto.getEmail());
        userRepository.save(user);
        return new UserDto(user);
    }
}

4. 주석 작성

모든 주석은 한글 로 작성하여 팀원이 이해하기 쉽도록 합니다.

1. 클래스/메소드 설명

Javadoc 스타일 주석을 사용하여 클래스, 메소드의 역할과 사용법을 설명합니다.

2. 인라인 주석

코드의 복잡한 로직이나 주의사항이 있을 때 한 줄 주석(//)을 사용합니다.

3. TODO 주석

앞으로 개선하거나 추가할 사항이 있을 때 // TODO: 형식으로 남깁니다.

예시:

/**
 * 사용자 관련 비즈니스 로직을 처리하는 서비스 클래스.
 */
@Service
public class UserService {
    // ...
 
    /**
     * @param userDto 사용자 데이터 전달 객체
     * @return 생성된 사용자 정보를 담은 DTO
     */
    public UserDto createUser(UserDto userDto) {
        // TODO: 입력 값 검증 추가
        // 사용자 생성 로직
    }
}

5. 예외 처리

1. 전역 예외 처리

@ControllerAdvice를 활용하여 전역 예외 처리 로직을 작성합니다.

2. 커스텀 예외

비즈니스 로직에 맞는 커스텀 예외를 정의하여 사용합니다.

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
 
  public ResourceNotFoundException(String message) {
    super(message);
  }
}