![[워밍업 클럽 4기 - 백엔드] Day 16 미션](https://cdn.inflearn.com/public/files/blogs/943e4718-ffc7-4a57-9d8d-ecc4640ea86a/image (7).png)
[워밍업 클럽 4기 - 백엔드] Day 16 미션
미션
MVC 기반에서 가장 많이 사용되는 3티어 레이어별로 특징과 테스트 방법을 정리해보자!
Layered Architecture
일반적으로 controller(presentation) -> service(business) -> repository(persistence) 구조로 이루어져있다.
레이어를 단계적으로 구분하는 이유는
관심사 분리
가 목적이다.
persistence Layer
DB와 직접적인 소통을 하는 계층이며 CRUD 쿼리 작업을 처리한다.
Business 계층에서 넘어온 데이터를 처리한다.
주로 JPA와 QueryDSL을 사용한다.
테스트 방법
클래스 레벨에서 @SpringBootTest, @DataJpaTest 어노테이션을 사용할 수 있다.
@SpringBootTest를 사용하는 것을 더 추천한다(다른 테스트와의 환경 통합을 위해)작성한 쿼리가 의도대로 동작하는지 테스트한다.
business Layer
비즈니스 로직이 메인이다.
presentation에서 데이터를 받으며 중요 비스니스 로직을 수행하고 persistence 계층으로 전달하는 중간다리 역할을 한다.
테스트 방법
클래스 레벨에 @SpringBootTest를 사용하거나 Mock을 사용하는 경우 @ExtendWith(MockitoExtension.class)를 사용한다. 이 역시 환경의 통합을 위해 되도록이면 SpringBootTest를 사용하는 것이 좋다.
스트 객체를 생성할 때 관련 테스트 메서드에는 꼭 필요한 데이터만 파라미터로 넘겨받아 빌더 패턴을 활용한다.
단위 테스트를 작성할 수도, persistence 계층와 통합해서 테스트할 수도 있다.
presentation Layer
외부 세계를 제일 처음 맞이하는 계층이다. 또한 외부 세계에 응답 데이터를 전달해주는 계층이다.
테스트 방법
사용자 요청의 데이터에 최소한의 검증을 해야한다. (validation) 다만, 타입의 유효성 자체에 대한 검증이 아닌 도메인과 관련된 검증들은 presentation 계층이 아닌 더 내부에서 진행한다.
클래스 레벨에 @WebMvcTest(className.class)를 사용한다.
mock을 사용한다.
직렬화, 역직렬화를 위해 ObjectMapper 객체가 필요하다.
출처
댓글을 작성해보세요.