🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

워밍업 클럽 4기 BE 클린코드 & 테스트 < Day16 미션 - 레이어드 아키텍처 >

Mission

Layered Architecture 구조의 레이어별 테스트 작성법을 알아보았습니다.
레이어별로 1) 어떤 특징이 있고, 2) 어떻게 테스트를 하면 좋을지, 자기만의 언어로 다시 한번 정리해 볼까요?


 

Persistence Layer

  • 역할: DB와 직접 연결되는 레이어. JPA, QueryDSL 등을 활용해 CRUD와 복잡한 쿼리를 처리함.

  • 테스트 방법:
    @SpringBootTest 또는 @DataJpaTest를 사용해 통합 테스트 진행.
    Repository 단독 테스트가 대부분이라 단위 테스트처럼 가볍게 돌릴 수 있음.

  • 주의사항:
    쿼리 변경이나 추가가 자주 발생하므로, 쿼리 하나당 테스트 하나 작성하는 습관 필요.

 

Business Layer

  • 역할: 비즈니스 로직 중심. Service가 핵심이며 트랜잭션(@Transactional) 관리가 중요.
    Presentation으로부터 받은 데이터를 가공하거나 Validation, 상태 변경 등을 수행.

  • 테스트 방법:
    @SpringBootTest 사용해 통합 테스트.
    필요시 @ExtendWith(MockitoExtension.class)로 단위 테스트 가능.
    테스트 시 불필요한 의존성은 제외하고, 필요한 데이터만 넘겨주는 Builder 패턴 활용.

  • 주의사항:
    서비스 로직 테스트 전에 도메인과 Repository 테스트 먼저 작성.
    동시성 문제 있는 로직은 멀티스레드 테스트 고려해야 함.

 

Presentation Layer

  • 역할: 외부 요청을 받아 내부 시스템에 전달하고, 응답을 반환하는 API 담당.
    Request 값에 대한 Validation 처리 담당.
    내부 로직은 갖지 않고 Service에 위임함.

  • 테스트 방법:
    @WebMvcTest(Controller.class) + MockMvc + @MockBean 조합으로 테스트.
    요청 값 검증, 상태 코드, 응답 구조 확인.
    ObjectMapper로 직렬화/역직렬화 테스트.

  • 주의사항:
    Request DTO는 Controller용과 Service용으로 분리하는 게 확장성에 좋음.
    JSON 역직렬화를 위해 기본 생성자와 getter 꼭 필요.
    비즈니스 로직 관련 검증은 Service에서 처리하고, 이 레이어에선 최소한의 검증만 수행.

댓글을 작성해보세요.

채널톡 아이콘