Skip to content

[BE] 코드 컨벤션

이충렬(트레) edited this page Jul 11, 2024 · 1 revision

패키지 구조

도메인 별로 구분한다.

friendogly
  ㄴpet
    ㄴcontroller
      ㄴdto
        ㄴrequest
    ㄴservice
      ㄴdto
        ㄴrequest
        ㄴresponse
    ㄴrepository
    ㄴdomain
    
  ㄴmember
    ㄴcontroller
      ㄴdto
        ㄴrequest
    ㄴservice
      ㄴdto
        ㄴrequest
        ㄴresponse
    ㄴrepository
    ㄴdomain
    
  ㄴexception
  ㄴinfrastructure

Java 기본 코드 스타일


개행

  • 클래스 바디의 첫 줄 개행

    public class Example {
    
        private Long id;
        private String name;
    }
  • 어노테이션 붙은 필드가 하나라도 존재하는 경우 → 각 필드 사이 개행

    public class Member {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id", nullable = false)
        private Long id;
    
        @NotNull
        @Column(name = "name")
        private String name;
        
        private int age;
        
        private String email;
        
        // ...
    }
  • 어노테이션 없는 필드만 있는 경우 → 필드 간 개행 없이 작성

    public class Member {
    
        private Long id;
        private String name;
    }
  • 파라미터에 어노테이션이 붙어있는 경우 → 파라미터는 어노테이션과 필드 개행 X

    public void sampleMethod(
        @RequestParam String parameter1,
        @RequestParam String parameter2,
        @RequestParam String parameter3
    ) {
        // ...
    }
  • 비어 있는 record body는 개행

    public record Example(String str) {
    
    }
  • 파라미터 개수가 3개 이상이거나, 가로줄 제한을 넘기는 경우 파라미터 마다 개행

    • 메서드 파라미터가 3개 이상이면 파라미터 마다 개행

      private void validateDuplication(
          LocalDate date,
          Long timeId,
          Long themeId
      ) {
          if (reservationRepository.existsByDateAndTimeIdAndThemeId(date, timeId, themeId)) {
              throw new RoomescapeException("해당 시간에 예약이 이미 존재합니다.");
          }
      }
    • 파라미터 개수가 3개 미만이고, 가로줄 제한을 넘기지 않는 경우 개행 X

      private void sampleMethod(int num1, int num2) {
          // ...
      }

레이어 별 네이밍 컨벤션

Controller

  • 생성, 수정, 삭제는 saveupdatedelete로 메서드 네이밍을 통일한다.
  • 조회는 파라미터에 따라 네이밍을 정한다.
    • findByMemberIdAndPetId(Long memberId, Long petId)

Service

  • 컨트롤러 메서드와 네이밍 컨벤션을 통일한다.
  • QueryService와 CommandService를 분리한다.
    • QueryService: 조회
    • CommandService: 생성, 수정, 삭제

Repository


테스트

  • 테스트 메서드명
    • saveMember_Fail_IllegalNameLength
      • 컨벤션: 메서드명_실패|성공_사유
    • 메서드명은 영어로 작성하되, DisplayName은 한국어로 부연설명한다.
  • DisplayName 작성 컨벤션
    • 구체적인 문장으로 작성한다.
      • 강아지를 등록할 수 있다.
      • 6마리의 강아지를 등록하는 경우 예외가 발생한다.

커밋 메시지

  • Prefix
    • feat : 새로운 기능을 추가할 경우
    • fix : 프로덕트 코드에 있는 버그, 도메인 잘못 이해해서 발생한 logical error, 기능적 결함 등
    • style : 공백이나 개행 수정, 코드 포맷 변경, 코드 수정이 없는 경우, import 순서
    • refactor : 리팩토링 (코드나 로직 변화는 있지만 기능 변화는 없는 경우), 패키지 구조 변경, 파일 이동, 클래스명 변경, 파일 삭제 등
    • comment : 주석 추가, 변경, 삭제
    • chore : 의존성 추가, yml 변경, java 파일 외 외부 파일 변경 (data.sql 등)
    • docs : 각종 문서를 수정한 경우 (readme, API 문서 등)
    • test : 테스트 관련 모든 커밋 (버그, 오류 수정, 리팩토링 포함)
      • 단, TDD 방식으로 테스트와 프로덕션 코드를 함께 작성하는 경우 feat 등을 사용한다.
    • remove : 기능 삭제
  • 리팩토링 하면서 클래스명이나 패키지 구조를 변경하는 경우, 무조건 별도의 커밋이나 PR을 날린다.
  • (커밋 메시지 예시) feat: 채팅 기능 추가
Clone this wiki locally