-
Notifications
You must be signed in to change notification settings - Fork 0
백엔드 코드 컨벤션
백승주 edited this page Mar 29, 2023
·
1 revision
- 클래스 선언부와 필드 사이에 공백 하나 추가
- 클래스 내부 마지막 줄 공백 스페이스 제거
- Static 변수 -> Instance 변수 -> 생성자(Builder) -> Static 메서드 -> 일반 메서드 -> equals , hashCode 순서로 정렬
- 코드 정렬(Ctrl + Alt + l) 기준으로 포메팅(CheckStyle + Naver HackDay Convention)
- Add static import 금지(static 풀어서 쓰기)
- DTO는 레코드 사용하기
public record SampleRecord(
String name,
Integer age,
Address address
) {}
- 객체 필드와 메소드 파라미터에 final 무조건 붙이기(불변 객체를 보장하기 위해서)
- 패키지명은 단수로
- DTO는 매개변수가 3개 이상일 경우 생성한다. -> (TBD : 케이스가 있을 경우 규칙을 다시 만드는건?)
- 생성자 선언 순서 NoArgs -> Requrie -> All
- private 메서드 아래로 넣는걸로
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@RequiredArgsConstructor
@AllArgsConstructor
- Entity에서 equals(), hashcode()를 구현
- 클래스 이름이 MySQL 예약어와 겹치면 매핑되는 테이블 이름은 복수형으로 지정한다.
- 엔티티의 no-args constructor 는 protected 로 지정하고, 최상단에 선언
- @Query 어노테이션에서 JPQL 작성시 SELECT, FROM, WHERE 단위로 즉, 절 혹은 구 단위로 개행한다.
- @Column 어노테이션의 맨 마지막에 nullable 옵션 추가
@ToString(exclude = {})
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(
name = "member",
indexes = {})
@Entity
public class Member extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "varchar(255)", unique = true, nullable = false)
private String email;
@Column(columnDefinition = "char(11)", unique = true)
private String phoneNumber;
@Column(columnDefinition = "varchar(100)", nullable = false)
private String name;
@Enumerated(value = EnumType.STRING)
@Column(columnDefinition = "char(6)", nullable = false)
private MemberRole role;
@Enumerated(value = EnumType.STRING)
@Column(columnDefinition = "varchar(8)", nullable = false)
private MemberGrade grade;
@Column(columnDefinition = "varchar(255)", unique = true, nullable = false)
private String hiworksId;
@Column(name = "profile_image_url", nullable = false)
private String profileImageUrl;
@Builder
private Member(final Long id, final String email, final String phoneNumber, final String name,
final MemberRole role, final MemberGrade grade, final String hiworksId, final String profileImageUrl) {
this.id = id;
this.email = email;
this.phoneNumber = phoneNumber;
this.name = name;
this.role = role;
this.grade = grade;
this.hiworksId = hiworksId;
this.profileImageUrl = profileImageUrl;
}
public void updateEmailAndNameAndHiworksId(final Member updateMember) {
updateEmail(updateMember.email);
updateName(updateMember.name);
updateHiworksId(updateMember.hiworksId);
}
public void updateProfile(final String phoneNumber, final String profileImageUrl) {
this.phoneNumber = phoneNumber;
this.profileImageUrl = profileImageUrl;
}
public void setDefaultProfileImageUrl(final String profileImageUrl) {
this.profileImageUrl = profileImageUrl;
}
public void updateGrade(final MemberGrade grade) {
if (grade != null) {
this.grade = grade;
}
}
private void updateHiworksId(final String hiworksId) {
if (hiworksId != null) {
this.hiworksId = hiworksId;
}
}
private void updateEmail(final String email) {
if (email != null) {
this.email = email;
}
}
private void updateName(final String name) {
if (name != null) {
this.name = name;
}
}
public boolean isAdmin() {
return role == ADMIN;
}
@Override
public boolean equals(final Object that) {
if (this == that) {
return true;
}
if (that == null || getClass() != that.getClass()) {
return false;
}
final Member member = (Member)that;
return Objects.equals(id, member.getId());
}
@Override
public int hashCode() {
return Objects.hash(getId());
}
}
- 계층형 구조
com
ㄴ example
ㄴ g_shop
ㄴ config
ㄴ controller
ㄴ domain
ㄴ enum
ㄴ repository
ㄴ service
ㄴ exception
ㄴ dto
ㄴ request
ㄴ response
ㄴ util
spring 제공 exception을 사용하고 아니면 Custom excption을 사용- Custom excption으로 통일
-
테스트 메서드명을 한글로 작성한다. -
테스트 메서드의 @DisplayName 애노테이션을 사용하여 메서드명을 영어로 적는다.(변경)
-
테스트 클래스의 빈 주입은 필드 주입을 사용한다.(@AutoWired , @Mock, ...)
-
테스트 픽스쳐는 원시값 만을 Constants 객체에서 관리한다.
-
given, when, then 주석을 명시적으로 붙인다. 생략하지 않는다.
-
given, when, then 절을 나누기 곤란한 경우 given, when & then 과 같이 & 으로 합쳐 작성한다.
// given & when
// when & then
// given & when & then
- 예외케이스에 대한 테스트 메서드 네이밍은 ~ 하면 예외가 발생한다.로을 통일한다.
- 생성로직에 대한 테스트 메서드 명은 "~ 생성한다."로 통일한다.
🏷️ 설계 문서
📚 팀 컨벤션
- Issue 작성 가이드
- Merge Request 작성 가이드
- Git 브랜치 전략
- Commit 컨벤션
- 백엔드 코드 컨벤션
- 객체 및 메서드생성 규칙
- Ground Rule
- Request Response 규칙
🔧 Setting
✍ 스프린트 기록