-
Notifications
You must be signed in to change notification settings - Fork 0
BE Code Convention
Junyong Moon edited this page Dec 21, 2023
·
3 revisions
- 클래스 선언부와 필드 사이에 공백 하나를 추가한다.
- 어노테이션은 클래스 혹은 메서드와 가장 관련된 것을 선언부와 가깝게 위치한다.
- 객체 필드와 메소드 파라미터에
final무조건 붙인다. - 메서드가 한가지 일만 담당하도록 구현한다.
- 패키지명은 단수로 한다.
- DTO는 매개변수가 3개 이상일 경우 생성한다.
- DTO 이름은 REST의 CRUD operation과 같게 한다. (Create, Read, Update, Delete)
- ex) 게시글 등록에 관한 DTO ->
PostCreateRequest/ 게시글 수정에 관한 DTO ->PostUpdateRequest
-
getter/setter 없이 구현한다.
- 핵심 로직을 구현하는 도메인 객체에 getter/setter를 쓰지 않고 구현한다.
- 단, DTO는 허용한다.
- 도메인 객체 - 생성자 선언 순서
- 기본 생성자
- 모든 파라미터를 받는 생성자
- 이후 파라미터가 많은 생성자가 상단에 오도록 선언
- 클래스 이름이 MySQL 예약어와 겹치면 매핑되는 테이블 이름은 복수형으로 지정한다.
- ex) Entity Class 이름 = Member ->
@Table(name = "members")
- ex) Entity Class 이름 = Member ->
- 엔티티의 no-args constructor 는 protected 로 지정하고, 최상단에 선언
-
@Column어노테이션의 맨 마지막에 nullable 옵션 추가
- 도메인형(기능별 패키지 분리) - 기능별 안에 계층별로 구성한다.
- ex) 회원(Member), 프로필(Profile), 게시글(Post)이라는 기능이 있다면
- 회원(Member)이라는 패키지 안에
controller,service,repository,dto,exception가 있다.
-
엔티티단위로 예외 클래스를 생성한다. (예외 존재)
- 테스트 메서드명은
한글로 작성한다.- 한글로 작성 시, 테스트 메소드의
@DisplayName어노테이션을 생략한다.
- 한글로 작성 시, 테스트 메소드의
- (중요) given, when, then 주석을 명시적으로 붙인다.
- 나누기 곤란한 경우에는 given, when & then과 같이
&으로 합쳐서 작성한다.
- 나누기 곤란한 경우에는 given, when & then과 같이
// given & when
// when & then
// given & when & then- 예외 케이스에 대한 테스트 메서드 명은
~하면 예외가 발생한다.같이 통일한다.- 메서드 명을 작성할 때, 띄어쓰는 경우
_으로 구분한다.
- 메서드 명을 작성할 때, 띄어쓰는 경우
@Test
void 회원의_email_형식이_맞지_않으면_예외가_발생한다.(final String email) {
// given
String name = "Moon Junyong";
String profileImageUrl = "https://avatars.githubusercontent.com/u/83820185?v=4";
Role role = Role.USER;
// when & then
assertThatThrownBy(() -> new Member(email, name, profileImageUrl, role))
.isInstanceOf(InvalidMemberException.class)
.hasMessage("이메일 형식이 올바르지 않습니다.");
}
}- 생성 로직에 대한 테스트 명은
~ 생성한다.로 통일한다.
@Test
void 회원을_생성한다() {
//given
String email = "[email protected]";
String name = "Moon Junyong";
String profileImageUrl = "https://avatars.githubusercontent.com/u/83820185?v=4";
Role role = Role.USER;
// when & then
assertDoesNotThrow(() -> new Member(email, name, profileImageUrl, role));
}- 테스트의 given 데이터를 문장형 테스트로 작성한다.
- 테스트를 위한 Dto 객체는 TestClass의 필드로 선언한다.