[워밍업 클럽 4기 백엔드] Day 16 미션
📌 Persistence Layer
✅특징
Data Access의 역할
비즈니스 가공 로직이 포함되어서는 안 된다.
Data에 대한 CRUD에만 집중한 레이어이기 때문
작성한 쿼리가 우리의 의도대로 동작하는지 확인하는 단위 테스트의 성격을 가진다.
해당 쿼리가 미래에 어떠한 구현체로 변형될지 모르기 때문에 테스트 코드로 보장해주어야 한다.
💡 테스트 방법
실제 데이터베이스와 연동하여 작성한 쿼리가 의도대로 동작(저장, 조회, 수정, 삭제 등)하는지 테스트한다.
@ActiveProfiles를 사용하여 실제 애플리케이션 환경과 테스트 환경을 분리하는 것이 좋다.@DataJpaTest를 사용할 경우 내부에@Transactional이 포함되어 있어 테스트 종료 후 롤백된다.@SpringBootTest를 사용할 경우@Transactional을 선언하거나, 클랜징 작업(deleteAllInBatch)을 수행해주어야 한다.📌Business Layer
✅특징
비즈니스 로직을 구현하는 역할
Persistence Layer와의 상호작용(Data를 읽고 쓰는 행위)을 통해 비즈니스 로직을 전개시킨다.
트랜잭션을 보장해야 한다.
트랜잭션 : "쪼갤 수 없는 업무 처리의 최소 단위"로 원자성, 일관성, 격리성, 지속성 일명 ACID를 보장해야함
작성한 비즈니스 로직이 의도대로 동작하는지 확인하는 통합 테스트의 성격을 가진다.
💡테스트 방법
Business Layer는 Persistence Layer를 의존하므로 이 둘을 통합적으로 테스트한다.
Persistence Layer의 테스트를 수행했다면, Persistence Layer는 Mocking하여 비즈니스 로직만 테스트하는 것도 좋다고 생각한다.
경계값이 주어져도 기능이 정상적으로 동작하는지 테스트해야 한다.
해피케이스(예상한 반환값)와 예외케이스(예상한 예외 종류)에 관해서도 해당 계층에서 테스트해야 한다.
@SpringBootTest와@Transactional을 사용한다면 서비스 클래스에@Transactional이 빠지지 않았는지 유의해야한다.
📌Presentation Layer
✅ 특징
외부 세계의 요청을 가장 먼저 받는 계층으로
파라미터에 대한 최소한의 검증을 수행
넘어온 값들의 검증(validation)이 중요하고, 비즈니스 로직은 필요없음
Business Layer에서 비즈니스 로직을 전개하기 전에 값들이 유효한지 검증
💡 테스트 방법
Business Layer와 Persistence Layer는 Mocking을 사용하여 정상 동작을 하는 것으로 간주하고 테스트한다.
@MockitoBean을 사용하여 서비스 클래스를 Mocking
요청 파라미터에 대한 유효성 검증(필수값, 값의 형식 등) Validation이 정상적으로 작동하는지 테스트한다.
@WebMvcTest을 사용하여 Controller, Filter, Interceptor 와 같은 웹 계층과 관련된 빈만 로드하여 빠르게 테스트할 수 있다.MockMvc를 사용하여 서버를 실행하지 않고 요청을 보내고 응답값을 테스트할 수 있다.
MockMvc: Mock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크로 애플리케이션을 띄우지 않고도 HTTP 요청/응답 흐름을 테스트할 수 있다.
댓글을 작성해보세요.