Spring Boot

스프링 네이밍 컨벤션

최-코드 2025. 3. 5. 10:28

도입 이유 : 매번 프로젝트를 진행할 때마다 스프링의 전체적이 네이밍이 조금씩 달라지는 상황이 발생하여 일관성을 맞추기 위함

 

컨트롤러 : 메소드명 뒤에 접미사를 붙이는 형태 사용

  • getObjects() : 목록 조회 유형 메소드 -> 여러 개의 데이터 네이밍 ~~s 대신 ~~List로 통일하기
  • getObjectDetails() : 단 건 상세 조회 유형 메소드
  • modifyObject() : 등록/수정/삭제가 동시에 일어나는 유형 메소드
  • createObject() : 등록만 하는 유형 메소드
  • updateObject() : 수정만 하는 유형 메소드
  • deleteObject() : 삭제만 하는 유형 메소드

서비스 : 메소드명 앞에 접두사를 붙이는 형태 사용

  • getObjects() : 목록 조회 유형 메소드
  • getObjectDetails() : 단 건 상세 조회 유형 메소드
  • modifyObject() : 등록/수정/삭제가 동시에 일어나는 유형 메소드
  • createObject() : 등록만 하는 유형 메소드
  • updateObject() : 수정만 하는 유형 메소드
  • deleteObject() : 삭제만 하는 유형 메소드

레포지토리

  • 일반적으로 JPA 명명 규칙을 따르되 JPQL, QueryDSL를 통한 메소드명은 조금 더 자세하게 메소드명을 써준다.
  • 예를 들어 QueryDSL을 통해 페이지네이션을 적용할 시에 findPagedObjectList()와 같이 생성해준다.
  • 즉, jpa 명명 규칙으로 의미 전달이 부족하다고 판단되면 좀 더 자세하게 작성한다.

DTO

  • dto의 네이밍은 맨 앞에 동사를 적어주는 형태를 사용하고, 서비스 메소드에서 주로 dto로 변환해주므로 서비스 메소드의 접두사를 이용하자.
  • 예를 들어 createObject() 서비스 메소드에 대해 사용되는 dto는 CreateObejctRequest, CreateObjectResponse와 같이 만들어준다. 

Helper Method(주된 목적에 따라 선택) : 무조건 클래스 맨 밑에 두기

  • 조회 및 존재유무 검증: findBy{조건}WithLockOrThrow
  • 데이터 넣기: insertObject(s) → if문 사용할 시에 ifPresent 붙이기
  • 데이터 추가/삭제: modifyObject
  • 데이터 삭제: deleteObject(WithAssociations)
  • 연관 데이터 불러오기: getObject
  • 특정 객체를 만드는 작업: buildObject

Structure

  • 도메인에 대한 패키지와 전역에서 사용되는 전역 패키지를 따로 두자.
  • 예를 들어 domain, global와 같이 나눌 수 있다.

  • 도메인 아래에 여러 하위 도메인이 필요하면 핵심 도메인을 core로 두자.
  • 예를 들어 study 도메인 아래에 댓글이 있다면 study/core, study/comment와 같이 둘 수 있다.