코드 컨벤션
•
Entity
◦
setter 사용 금지
◦
메서드 사용 가능
▪
BUT 메서드명은 기능을 명시적으로 정하기
◦
컬럼으로 래퍼 클래스 통일
◦
엔티티명은 -Entity 접미사 안 붙이고 도메인 그대로. ex) User
◦
테이블명
▪
tb_ 접두사 붙이기
▪
근거 : 통일성 (예약어에 -s 붙이면 통일성 어색)
◦
Optional 사용
▪
Validator 사용 시 끼워 맞춰야 하는 경우가 종종 생김.
•
생성자
◦
private 생성자 위에 @Bbuilder 패턴 사용
◦
필드 없을 시 클래스 단에 @JsonIgnoreProperties 이용
•
레포지토리
◦
JpaRepository 상속
•
객체간 변환 작업
◦
org.mapstruct.Mapper 사용
▪
예제 코드
@Mapper
public interface CommentServiceMapper {
CommentServiceMapper INSTANCE = Mappers.getMapper(CommentServiceMapper.class);
CommentSaveRes toCommentSaveRes(Comment comment);
}
@Override
@Transactional
public CommentSaveRes saveComment(CommentSaveReq req) {
Card card = findCard(req.getCardId());
TeamRole teamRole = findTeamRole(req.getUsername(), card.getCategory().getTeam().getTeamId());
return CommentServiceMapper.INSTANCE.toCommentSaveRes(
commentRepository.save(
Comment.builder().content(req.getContent()).card(card).teamRole(teamRole).build()));
}
Java
복사
•
◦
여기서 HttpStatus 제외한 code, message 사용.
◦
도메인마다 천 단위로 다르게 예외코드 작성
◦
Exceetion도 CustomException을 만들어서 ResultCode만 넣어서 throw 하기
•
Custom ResponseEntity 사용
•
테스트는 단위 테스트만, 성공케이스만 작성
◦
테스트 스텁 만들어 놓기
•
API 1개당 요청, 응답 DTO 1개씩 만들기.
◦
Request, Response 모두 Java 8 record 사용하기
◦
Request, Response 모두 필드가 있다면 클래스 레벨 @Builder적용하기
▪
테스트에서 사용하기위함임
◦
필드 없을 시 만들 예시
@JsonIgnoreProperties
public class UserUpdateProfileRes {}
JavaScript
복사
•
DTO
◦
네이밍 규칙
▪
도메인 + 기능 + 요청/응답 Dto
▪
기능 작명을 할 때는 가능한 HTTP Method 명으로 하기.
▪
ex) 유저 도메인의 로그인 요청 dto : UserLoginRequestDto
◦
메소드명 : 무슨 일을 하는 메소드 인지 이해될 정도로.
▪
동사로 시작.
◦
Record 사용
•
패키지 구조
◦
•
Repository
◦
아래 구조로 통일한다 (작성자 @임지훈)
public interface PostsRepository extends JpaRepository<Posts, Long> {
}
Java
복사