워밍업 클럽 3기 Code 과정 Day 16 미션
미션 내용
Layered Architecture의 레이어별로
1) 어떤 특징이 있고
2) 어떻게 테스트를 하면 좋을지
자기만의 언어로 정리해보기
Persistence Layer
특징
DB와 상호작용하는 Layer
DB에 값을 넣고 가져오는 로직을 담당
비즈니스 가공 로직이 있으면 X (역할과 책임 분리)
데이터 CRUD에 집중
단위 테스트 느낌
어떻게 테스트 하면 좋을지?
사용하는 기술 (ex : jpa, querydsl, jpql)을 내가 잘 사용해서 DB와 상호 작용하는지 테스트
기술을 잘못 사용하면 원하는 데이터를 받아올 수 없음
jpa의 경우에도 쿼리 메서드를 잘 짜주겠지만 혹시 내가 메서드명을 잘못 지었을 수도 있기에 쿼리 메서드에 대해서도 테스트
주로 List 형태로 메서드의 반환 값이 많이 반환될 것이기에 hasSize, extracting, containsExactlyInAnyOrder 메서드 활용하면 좋음
데이터를 직접 넣기에 데이터 만드는 메서드가 정의되어 있으면 조금 더 보기 좋음
Business Layer
특징
비즈니스 로직이 구현된 곳
도메인 객체의 로직도 존재
트랜잭션 관련된 것에 주의해야 함
persistence layer와 상호 작용
persistence layer와 business layer 통합 테스트 느낌
어떻게 테스트 하면 좋을지?
비즈니스 로직, 도메인 객체의 로직을 수행하는 메서드들에 대해 테스트 진행 (단위 테스트)
각 로직들 메서드 단위로 분리를 잘하여 테스트하기 용이하게 해야 함
LocalDateTime과 같이 테스트하기 어려운 것들이 존재한다면 분리하고 파라미터로 받게 하여 테스트 용이하게 해야 함
도메인과 관련된 validation은 이 layer에서 테스트를 진행하는 것이 더 역할과 책임이 분리된 것
역시 데이터 많이 만들기에 데이터 만드는 메서드 있으면 좋음
Presentation Layer
특징
외부와 상호작용하는 곳
api로 파라미터를 받거나 값을 내려주는 곳
응답 처리, 예외 처리, validation이 중요한 곳
하위 layer들과 분리해서 테스트하는 곳
단위 테스트 느낌
어떻게 테스트 하면 좋을지?
하위 layer들과 분리해서 테스트하는 것이 좋다.
이를 위해 MockMvc 및 mock 객체 사용
andExpect 메서드를 잘 활용해야 함
공통 응답이 잘 내려가는지 테스트 필요
예외 발생 시 원하는 포맷, 메시지 등이 잘 응답되는지 테스트 필요
쿼리 파라미터에 대한 validation 잘 이뤄지는지 테스트 필요
여기에서의 validation은 기본적인 @NotNull, @NotBlank 같은 것을 테스트
business layer의 validation과 분리하는 것이 필요
댓글을 작성해보세요.