<aside> 😎 백엔드의 코드 컨벤션을 기록해둔 페이지입니다.

</aside>

🍷 code convention

🍷 custom code convention (24.01.17 최신화)

  1. Domain Entity 선언

    // SelfValidationg은 필요한 경우에만 상속한다.
    public class MyDomain extend SelfValidationg<MyDomain> {
    	// 클래스 변수 맨위에 위치한다.
    	private static final String WE_ARE_NEW_BARAMS = "뉴바람스";
    
    	// 최대한 Value로 표현한다.
    	private DomainId domainId;
    	private Name name;
    	private Content content;
    
    	// SelfValidationg을 상속하지 않는다면 최대한 생성자는 Lombok을 사용한다.
    	// 단, 상속했다면 생성자에 검증 로직을 추가한다.
    	public MyDomain(DomainId domainId, ...) {
    		this.domainId = domainId;
    		...
    		this.validateSelf();
    	}
    
    	// Method ...
    }
    
  2. Domain Value 선언

    public class Name extend SelfValidationg<Name> {
    	// 클래스 변수 맨위에 위치한다.
    	private static final String WE_ARE_NEW_BARAMS = "뉴바람스";
    
    	// 불변성을 유지한다.
    	// 검증 Annotation은 한 줄에 하나씩 작성한다.
    	@NotBlank
    	@Size(max = 20)
    	private final String name;
    
    	// Fixture Monkey에서 생성 오류가 발생할 때 @ConstructorProperties를 붙인다.
    	public Name(String name) {
    		this.name = name;
    		this.validateSelf();
    	}
    
    	// Method ...
    }
    
  3. JPA Entity 선언

    @Entity
    @Table(name = "my_entities")
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    @AllArgsConstructor
    public class MyEntity extend BaseEntity {
    	// 필드는 위에 위치한다.
    	// 해당 레코드의 속성을 반드시 표현한다.
    	@Column(nullable = false, length = 20)
    	private String name;
    
    	@Column(nullable = false, length = 50, unique = true)
    	private String email;
    
    	// Embedded는 가운데 위치한다.
    	// 꼭 필요한 Embedded만 사용한다.
    	@Embedded
    	private Address address;
    
    	// 꼭 필요한 Enum 객체만 사용한다.
    	@Enumerated(value = EnumType.STRING)
    	private MyEnum enum;
    
    	// 연관관계는 맨밑에 위치한다.
    	@OneToMany
    	private List<MySubEntity> subEntities = new ArrayList<>();
    
    	// 생성자, 메서드 X
    }
    
  4. inner class

  5. private 메서드 선언

  6. parameter, 매개 변수

  7. Lombok

  8. query 메소드 네이밍

구분 method discription
Repository findAllReviewableOrdersByUserIdWithinThirtyDays 30일 이내의 후기 작성 가능한 주문을 유저 아이디로 모두 찾아온다.
Service loadAllReviewableOrdersByUserId(Long userId) 후기 작성 가능한 모든 주문을 유저 아이디로 가져온다.
Controller getAllReviewableOrders 후기 작성 가능한 리뷰들을 가져온다
  1. DTO (11.27 최신화)
  2. Service
  3. 최대한 RESTful하게 URI를 작성한다.
Controller URI description
ProductController POST /products/1/reviews 1번 상품에 후기 작성하기
UserController GET /users/1/reviews 1번 유저의 후기 가져오기
ProductController GET /products/1/reviews 1번 상품의 후기 가져오기
ReviewController GET /reviews 모든 상품 후기 가져오기
  1. Controller의 입력 인자가 줄이 넘어가면 나누어서 작성한다.
// bad..!
public AjajaResponse<Type> doSomething(Param param1, Param param2, Param param3, Param param4) {
	// logic...
}

// good..!
public AjajaResponse<Type> doSomething(
	Param param1,
	Param param2,
	Param param3,
	Param param4
) {
	// logic...
}