이 블로그 글은 박우빈님의 인프런 강의: Readable Code: 읽기 좋은 코드를 작성하는 사고법
를 참조하여 작성한 글입니다.
Layered Architecture 구조의 레이어별 테스트 작성법을 알아보았습니다.
레이어별로 1) 어떤 특징이 있고, 2) 어떻게 테스트를 하면 좋을지, 자기만의 언어로 다시 한번 정리해 볼까요?
✅ 레이어드 아키텍처 테스트 정리
1. Presentation Layer
- 📌 역할: 클라이언트 요청을 받아 파라미터를 검증하고, Service Layer로 전달
- 🧪 테스트 방법:
- MockMvc, @WebMvcTest 사용
- Controller만 띄워 테스트하고, 하위 레이어(Service, Repository)는 @MockBean 으로 대체
- 주로 Validation 로직 검증이 핵심
2. Service (Business) Layer
- 📌 역할: 핵심 비즈니스 로직 담당. Repository 호출 및 도메인 조합 처리
- 🧪 테스트 방법:
- @SpringBootTest 로 통합 테스트를 진행
- 실제 DB까지 붙여 테스트할 수도 있고, 단위 테스트 시에는 Repository를 Mock 으로 처리 가능
- 트랜잭션, 도메인 조합, 도메인 로직 분기 등을 검증
3. Persistence Layer
- 📌 역할: 데이터베이스 접근, 순수 CRUD 처리 (비즈니스 로직 없음)
- 🧪 테스트 방법:
- @DataJpaTest 사용 → JPA 관련 빈만 등록되어 빠르게 테스트
- 실제 DB와 연결하여 쿼리가 의도대로 잘 작동하는지 확인
✅ 나만의 정리
| 레이어 | 역할 | 테스트 방법 | 추천 어노테이션 |
|---|
| Presentation | 요청 처리, Validation | MockMvc, WebMvcTest | @WebMvcTest, @MockBean |
| Service | 비즈니스 로직 처리 | SpringBootTest or 단위 테스트 | @SpringBootTest, @Transactional |
| Repository | DB CRUD 처리 | DataJpaTest, 쿼리 테스트 | @DataJpaTest |
✅ 테스트를 어떻게 나눠야 할까?
- 단위 테스트 (Unit Test): 빠르고, 책임 분리가 명확한 클래스 (도메인, 유틸리티 등)
- 통합 테스트 (Integration Test): 여러 레이어가 함께 작동하는 흐름을 검증 (Service 중심)
- 컨트롤러 테스트: MockMvc 사용. Validation과 요청 흐름 검증