Skip to content

백엔드 코드 컨벤션

구동희 edited this page Nov 11, 2022 · 3 revisions

일반

  • 클래스 선언부와 필드 사이에 공백 하나 추가
  • 어노테이션은 클래스 혹은 메소드와 가장 관련된 것을 선언부와 가깝게
  • 객체 필드와 메소드 파라미터에 final 무조건 붙이기
  • 패키지명은 단수로
  • DTO는 매개변수가 3개 이상일 경우 생성한다
  • 생성자 선언 순서
    1. 기본 생성자
    2. 모든 파라미터를 받는 생성자
    3. 이후 파라미터가 많은 생성자가 상단에 오도록 선언

테스트

공통

  • 테스트 메서드명을 한글로 작성한다.
  • 테스트 메서드의 @DisplayName 애노테이션을 생략한다.
  • 테스트가 어려운 외부 서비스는 TestDouble을 적용한다.
  • 테스트 클래스의 빈 주입은 필드 주입을 사용한다.
  • 테스트 픽스쳐는 원시값 만을 Constants 객체에서 관리한다.
  • given, when, then 주석을 명시적으로 붙인다. 생략하지 않는다.
    • given, when, then 절을 나누기 곤란한 경우 given, when & then 과 같이 & 으로 합쳐 작성한다.
    // given & when
    // when & then
    // given & when & then
  • 예외케이스에 대한 테스트 메서드 네이밍은 ~ 하면 예외가 발생한다.로을 통일한다.
     @Test
     void 없는_카테고리를_삭제하려_하면_예외가_발생한다() {
         // given
         나인.회원_가입을_한다(티거_이메일, 티거_이름, 티거_프로필_URL);
    
         // when & then
         assertThatThrownBy(() -> categoryService.delete(나인.회원().getId(), -1L))
                 .isInstanceOf(NoSuchCategoryException.class);
     }
  • 생성로직에 대한 테스트 메서드 명은 "~ 생성한다."로 통일한다.
     @Test
      void 카테고리를_생성한다() {
          // given
          나인.회원_가입을_한다(티거_이메일, 티거_이름, 티거_프로필_URL);
    
          // when
          CategoryResponse actual = categoryService.save(나인.회원().getId(), 취업_카테고리_생성_요청);
    
          // then
          assertThat(actual.getName()).isEqualTo(취업_카테고리_이름);
      }

인수 테스트

  • 시나리오 기반의 문장형 테스트를 작성한다. 참고자료
  • 테스트를 위한 Dto 객체는 TestClass의 필드로 선언한다.

통합 테스트

  • 테스트의 given 데이터를 문장형 테스트로 작성한다. 참고자료
  • 테스트를 위한 Dto 객체는 TestClass의 필드로 선언한다.

JPA

  • 클래스 이름이 MySQL 예약어와 겹치면 매핑되는 테이블 이름은 복수형으로 지정한다.
  • 엔티티의 no-args constructor 는 protected 로 지정하고, 최상단에 선언
  • @Query 어노테이션에서 JPQL 작성시 SELECT, FROM, WHERE 단위로 즉, 절 혹은 구 단위로 개행한다.
  • @Column 어노테이션의 맨 마지막에 nullable 옵션 추가

디렉토리 구조

  • 도메인형 (기능별 패키지 분리)

예외처리

  • 엔티티 단위로 예외 클래스를 생성한다. (논의 필요)
    • e.g. Schedule 클래스의 Title 필드에 대한 예외 클래스는 별도로 생성하지 않는다.
Clone this wiki locally