[워밍업클럽 4기 백엔드] Day16 미션
Layered Architecture 구조의 레이어별 테스트 작성법
각 레이어별로 어떤 특징이 있고, 어떻게 테스트하면 좋을지 정리한다.
✅ Persistence Layer
Persistence Layer의 특징
DB와 가장 가깝게 통신하며 데이터를 주고받는 레이어이다.
데이터의 CRUD 작업을 담당하는 역할이다.
비즈니스 로직이 포함되지 않는다.
Persistence Layer 테스트
@DataJpaTest
를 사용한다.@SpringBootTest
는 전체 빈을 다 로딩하지만,@DataJpaTest
는 Repository와 관련된 Bean만 로딩하기 때문에 이렇게 빠르고 가볍게 테스트하는 Persistence Layer에서는@DataJpaTest
를 주로 사용한다.
save, find, delete 등 데이터에 대한 CRUD가 잘 동작하는지 테스트한다.
데이터를 조회할 때 해당 데이터가 없을 경우(null이나 빈 리스트) 올바르게 동작하는지 테스트한다.
✅ Business Layer
Business Layer의 특징
말그대로 비즈니스 로직을 구현한다.
즉, '데이터를 가지고 어떤 걸 할지'를 구현한다.
트랜잭션이 중요하다.
Business Layer 테스트
@SpringBootTest
를 사용해 전체 빈을 다 로딩하도록 한다.필요한 의존성을
@Autowired
로 주입한다.복잡한 비즈니스 로직을 테스트한다.
정상 동작은 물론, 예외 케이스도 필요하다면 테스트한다.
@Transactional
은 테스트 코드에서만 있으면 문제가 발생해도 뒤늦게 발견할 수 있기 때문에 주의해야 한다.
✅ Presentation Layer
Presentation Layer의 특징
가장 앞쪽에서 사용자와 시스템 간의 입출력을 담당한다.
일반적으로 Controller가 담당한다.
비즈니스 로직은 포함하지 않는다.
Validation에 대한 책임 분리를 생각하자.
도메인 로직에 해당하는 validation은 Presentation Layer에서 하지 않는다.
Presentation Layer 테스트
Controller 레이어만 가볍게 테스트하기 위해서
@WebMvcTest
를 사용한다.Request Validation에 대한 테스트를 진행한다.
Service 계층은 Mocking이 필요하다.
출처
댓글을 작성해보세요.