Layered Architecture 구조의 레이어별 특징과 테스트 작성법
1. 레이어별 특징
Presentation Layer
외부 세계의 요청을 가장 먼저 받는 레이어로, 사용자나 외부 시스템과의 인터페이스 역할을 한다.
클라이언트로부터 전달받은 데이터를 검증하고, 비즈니스 로직을 수행할 수 있도록 Business Layer로 전달한다.
주로 요청 파라미터에 대한 최소한의 검증과 API 응답 형식을 처리한다.
Business Layer
애플리케이션의 핵심 비즈니스 로직이 구현되는 레이어이다.
Persistence Layer와 상호작용하며 데이터 처리 및 트랜잭션을 보장한다.
비즈니스 규칙에 따라 데이터를 가공하거나 처리하는 역할을 담당한다.
Persistence Layer
데이터베이스와 직접적으로 상호작용하는 레이어로, 데이터 CRUD(Create, Read, Update, Delete) 작업에만 집중한다.
비즈니스 로직이 포함되지 않으며, 순수하게 데이터 접근 및 저장소 관련 작업만 수행한다.
2. 테스트 작성법
Presentation Layer 테스트
목적: 외부 요청에 대한 파라미터 검증과 컨트롤러 동작을 독립적으로 테스트한다.
방법:
하위 계층(Business Layer, Persistence Layer)은 @MockBean으로 모킹(mocking) 처리하여 독립적인 단위 테스트를 진행한다.
Spring MVC 테스트를 활용해 HTTP 요청 및 응답 흐름을 검증한다.
예를 들어, 잘못된 파라미터가 전달되었을 때 적절한 에러 메시지가 반환되는지 확인한다.
Business Layer 테스트
목적: 비즈니스 로직이 의도한 대로 동작하는지 검증하고, Persistence Layer와의 상호작용을 확인한다.
방법:
단위 테스트를 작성하여 특정 메서드의 동작을 검증한다.
Persistence Layer를 실제로 호출하지 않고, Mock 객체를 사용해 독립적으로 테스트할 수도 있다.
통합 테스트 시에는 @SpringBootTest와 실제 DB를 활용하여 트랜잭션 롤백 기능으로 데이터를 정리하며 테스트를 진행한다.
Persistence Layer 테스트
목적: SQL 쿼리가 제대로 동작하는지 검증하고, 데이터베이스와의 CRUD 작업이 정상적으로 수행되는지 확인한다.
방법:
@DataJpaTest를 활용하여 인메모리 DB(H2 등)를 사용해 빠르게 검증한다.
단위 테스트 성격을 가지며, Repository 계층에서 작성한 쿼리 메서드가 의도한 대로 동작하는지 확인한다.
테스트용 프로필 설정과 초기 데이터 주입 설정을 활용하면 편리하다.
3. 테스트 방법 요약
레이어주요 특징테스트 방법Presentation외부 요청 처리 및 파라미터 검증MockBean으로 하위 계층 모킹 처리 후 단위 테스트 진행 (Spring MVC Test 활용)Business비즈니스 로직 구현 및 트랜잭션 보장단위 테스트 또는 통합 테스트 (@SpringBootTest)Persistence데이터 CRUD 작업@DataJpaTest와 인메모리 DB로 SQL 쿼리 및 CRUD 동작 검증
이처럼 각 레이어는 역할과 책임이 명확히 분리되어 있으며, 각 레이어에 맞는 적절한 테스트 전략을 적용함으로써 코드 품질과 유지보수성을 높일 수 있습니다.
댓글을 작성해보세요.