IntelliJ Code Style컨벤션@validation 전략DTO 전략Exception 관리 Controller 에서 Service로 갈 때 DTO를 어떻게 넘길건지Interface 네이밍 테스트 코드 규칙
IntelliJ Code Style
컨벤션
naver code style
- * 와일드 카드 임포트 지양한다.
@validation 전략
Entity & Controller 에서 Validation 처리하기로 결정되었습니다.
DTO 전략

내부 static inner 로 관리하자 ‼️
- record를 사용하여 불변 객체를 보장하자
- 어쩔 수 없으면 static inner class 를 사용하자
// Dto패키지 안에 public record ${entity}Request(){ public record createRequest (...){ } public record updateRequest (...){ } } =============== 서로다른 클래스 영역 =================== // Dto패키지 안에 public record ${entity}Response(){ public record naming ... (...){ } }
Exception 관리
- 상속으로 가져가겠습니다.
Controller 에서 Service로 갈 때 DTO를 어떻게 넘길건지
- 풀어서 넘긴다.
- 휴먼에러 위험이 있다면 dto 를 만들어서 빌더패턴을 고려하세요
Interface 네이밍
- 형~ 용사
테스트 코드 규칙
통합 테스트에 필요한 규칙
통합테스트 작성
시 모의 데이터가 필요할 것이다. 나의 경우 팔로잉 멤버 목록 조회 기능에 대한 통합테스트를 짜던 중 팔로우 테이블에 데이터가 미리 적재되어 있었어야 했었다.
- MemberService에서 통합 테스트를 하던 중 Follwe 테이블에 데이터를 저장하기 위해 Follow 레포를 가져다가 쓴다고 했을 떄, 해당 도메인에 대한 통합 테스트인데 다른 데이터가 필요해서 각각의 레포짓토리를 의존성을 주입받아도 되나? 라는 생각을 시작으로 약간의 상황을 가정해봤다.
- 예를 들어 게시판 경우라고 생각해보았을 때 사용자 데이터도 미리 있어야 하고, 이미지도 있어야 되고 등 팔로잉한 데이터 또한 존재해야 한다고 했을 때 게시판 통합 테스트에서 해당 repository들을 전부 @Autowired로 할경우 해당 필요한 데이터 도메인에 따라 비례적으로 코드량이 증가할 것이다.

@Autowired MemberRepository @Autowired ProfileImageRepository @Autowired CommentRepository ...
또 다른 한편으로는 테스트 또한 레이어드로 맞춰야 통일성이 잊지 않을까란 생각을 했다.
그래서 이러한 경우 EnrityManager를 이용하여 해당 게시판 외에 필요로 하는 모의 데이터들을 entityManager를 통해 영속화 시킨다면 많던 도메인 레포지토리들은 단 하나의 entityManager선언으로 대체 할 수 있다.
private EntityManager ...; // 단 하나의 선언으로 여러가지 레포의 의존성을 대체할 수 있고 코드 또한 줄어든다
Q&A
진형님이 서비스 코드로 대체하면 되는게 아닌가? 라고 의문을 던졌을 때 지금은 개발 진행 중이므로 서비스가 있는지 없는지 부분도 싱크를 맞춰야 하는데 이 부분 또한 싱크를 맞추면 개발 일정이 좀 느려지지 않을 까란 의견을 냈고 현재로서는 해당 방법이 적절하다고 했다.
그래서
결론
은 해당 도메인 테스트를 진행할 때, 다른 도메인 데이터를 필요로 한다면 entityManager를 통해 타 도메인 데이터를 셋팅하는 것이 가장 깔끔하고, 테스트 코드 또한 레이어드 구조 또한 파괴하지 않을 것 같다
라는 생각이 든다.