-
Notifications
You must be signed in to change notification settings - Fork 2
백엔드 코드 컨벤션
스플릿 edited this page Aug 14, 2023
·
15 revisions
-
tab character 를 사용하지 않고, indent size는 공백 4로 한다.
-
불변해야될 변수에는 final 키워드를 붙힌다. ( 메서드 파라미터 포함 )
- 설정 방법 ( cmd + option + v )
- 예외나 Fixture는 static import 하지 않는다.
- return 하기 전 개행을 한다.
- 상수 아래에 개행을 한다.
- 정적 팩토리 메서드의 이름은
List
하나만 받으면of
를 사용한다.
- 기본 Getter의 경우 Lombok
@Getter
어노테이션을 사용한다. - 기본 생성자의 경우 Lombok
@NoArgsConstructor(access = AccessLevel.PROTECTED)
를 사용한다. - Foreign Key는 사용하지 않는다. 양방향 매핑인 경우, 한 쪽의 getter만 열어둔다.
@JoinColumn (name = "", foreignKey = @ForeignKey(name = "none"))
@Getter(AccessLevel.NONE)
-
@PrePersist
메서드는 가독성을 위해 적용되는 필드아래에 위치시킨다. - 생성자의 매개변수가 한 줄이 넘어가는 경우, 각 매개변수에 개행을 적용한다.
public KillingPart (
final Long id,
final String name,
...
) {
// ...
}
- ID를 포함하는 생성자는 없어야 한다.
- 다대일 관계에서는
@ManyToOne(fetch = FetchType.LAZY)
를 사용한다.
- 클래스 최상단에
@Transactional(readOnly = true)
를 붙이고, 트랜잭션이 필요한 메서드에@Transactional
을 붙인다. - 의존성 주입이 되는 필드로만 이루어져 있는 객체에 한해서
@RequiredArgsConstructor
를 사용한다.
- DTO suffix는 생략한다.
- Request DTO에서
@Getter
,@AllArgsConstructor
,@NoArgsConstructor(access = AccessLevel.PRIVATE)
를 사용한다. - Request DTO에서 도메인 객체를 리턴하는 getter를 사용할 수 있다.
- Response DTO 에서
RestAssured
를 위해, 필드가 하나인 클래스에만@NoArgsConstructor(access = AccessLevel.PRIVATE)
를 사용한다. 그 외 Response DTO 에는@NoArgsConstructor
를 붙이지 않는다.
- 클래스 상단에
@Repository
어노테이션을 붙인다. -
createdAt
은 밀리초를 제거한 뒤 저장한다.
- 테스트 메서드, 변수 이름은 영문으로 작성한다.
- 테스트마다
@DisplayName
을 사용하고, 행동과 결과를 모두 명시한다.- Ex. 예외가 발생하는 경우, "~일 때 예외가 발생한다." 와 같이 명시한다.
- given, when, then 주석을 붙인다. 각 given, when, then에 코드가 존재하지 않는 경우, 위 주석에 붙여서 작성한다.
// given
// when
...
// then
...
- 한 테스트 클래스 안에 전체 테스트 메서드가 5개 이상일 때, 같은 종류의 테스트 메서드는
@Nested
로 묶어 표시한다. - date 관련 테스트를 할 때는 밀리초를 제거하여 테스트한다.
LocalDateTime.now().truncateTo(ChronoUnit.MILLIS);
-
인수 테스트
-
단위 테스트
- Layer
- Domain
- Repository
- JPA를 사용하는 Repository 기본 제공 CRUD에 대한 테스트는 제외한다.
-
@DataJpaTest
를 사용하여 진행한다.
- Service
- Mock 테스트를 우선적으로 택한다.
- SpringBoot 테스트가 필요하다 생각하는 경우 공유하고 사용한다.
- etc : Interceptor, ArgumentResolver 의 테스트
- 단순히 의존 객체의 메서드를 호출만 하는 경우는 테스트를 생략한다.
- 코드 리뷰과정에서 적절한지 판단 가능할 것으로 예상
- Layer