lint 스타일
•
우테코 스타일
네이밍 컨벤션
•
kebab-case → api 엔드포인트
•
snake_case → db 컬럼명, 패키지명
•
PaskalCase → 클래스명
•
camelCase → 변수/메소드명, response/request 필드명(JSON)
과거의 산물
Test
•
given, when, then 구분을 위해 주석 추가 // given, // given, when
◦
문서화 위한 테스트는 주석 안 붙이고, 문서화용이 아닌 테스트는 주석 붙임
•
메서드명
◦
setUp()
◦
should - when
▪
ex. should_throwException_when_invalidNam
객체 정의
•
class, record 뒤에 개행
•
필드에만 최대한 final 붙이기
객체 필드 순서
•
상수 private static
•
상수와 변수 사이에 개행
•
Annotation 있는 경우 변수 사이의 개행
메서드 파라미터 개행 위치
@GetMapping("/offerings")
public ResponseEntity<OfferingAllResponse> getAllOffering( // 여기서 개행을 해주세요!
@RequestParam(value = "last-id", defaultValue = "0") Long lastId,
@RequestParam(value = "page-size", defaultValue = "10") Integer pageSize) {
OfferingAllResponse response = offeringService.getAllOffering(lastId, pageSize);
return ResponseEntity.ok(response);
}
Java
복사
메서드명
•
dto 사용할 때
◦
내부 dto 없는 경우
▪
외부 dto: member + (설명) + Response
record Member(설명)Response(Long id, String name) {}
Java
복사
◦
내부 dto 있는 경우
▪
외부 dto: member + (설명) + Response
▪
내부 dto: member + (설명) + ResponseItem
record Member(설명)Response(List<Member(설명)ResponseItem> members, int page) {}
record Member(설명)ResponseItem(Long id, String name, String nickname) {}
Java
복사
내부 dto?
과거의 산물
변수명
•
복수: s 붙이기
◦
불가산 명사는 가급적 사용하지 않기
•
축약어 팀에서 다같이 정한 것만 사용
•
변수명이 생각나지 않거나 마음에 안들면 PR에 코멘트 남기기
•
원시값 포장 용도로 사용한 VO 내부의 값은 value 로 통일
메서드 순서
•
Public, Private
◦
Public 밑에 호출 순서대로 정렬
•
getter, setter
•
equals, hashcode, toString 등….
어노테이션 순서
•
테스트
1.
displayName
2.
test
•
@BeforeEach 메서드명: setUp
•
객체의 목적과 가까운 순서로 어노테이션 붙이기
@Table
@Entity
class Entity {
}
@DisplayName
@Test
class Test {
}
Java
복사
패키지 구조 (layer vs domain → domain 택)
•
member
◦
controller
▪
dto
•
UserSaveRequest
•
UserSaveResponse
◦
service
▪
dto
•
인자: UserSaveRequestDto
•
반환: UserSaveResponseDto
▪
변환 로직은 to(~~)Dto (DTO → domain), 생성자 사용(domain → DTO)
◦
repository
▪
domain
▪
entity
(하위) domain → entity → service → controller (상위)
Entity { Entity(Domain domain), Domain toDomain() }
domain → entity : 저장(id 없이 감) (Entity의 생성자)
entity → domain : 조회/수정/삭제 (Entity의 함수)
상위가 하위를 사용함/앎
domain은 entity를 모르게!
검증
•
DTO
◦
뷰 변환 로직 검증은 DTO에서.
▪
Null, empty 값 검증 포함
▪
날짜 변환
•
Domain
◦
모든 도메인 로직 검증
▪
Null, empty 값 검증 포함
트랜잭션
•
롤백 대상의 범위에 전부 붙이기
◦
ex. 저장이 한 번 뿐일지라도