워밍업 클럽 4기 백엔드 - [Day 16 미션]

워밍업 클럽 4기 백엔드 - [Day 16 미션]

워밍업 클럽 4기 백엔드 - [Day 16 미션]

 

미션 내용

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



Layered Architecture

관심사의 분리로 각 레이어를 독립적으로 테스트할 수 있다.

image

 

Persistence Layer

데이터베이스 및 외부 저장소와의 상호작용하는 레이어

image

1) 특징

  • Data access의 역할만 해야한다. (데이터 가공 로직 X)

  • Data의 CRUD에만 집중한 레이어.

    2) 테스트 방법

  • 데이터 Access에 대한 테스트를 진행한다. (데이터 저장 및 조회 기능, 데이터 무결성)

     

  • layer를 떼어서 테스트 하기 때문에 단위테스트 느낌이기 때문에 @DataJpaTest(@Transactional 이미 포함)를 사용해 좀더 쉽게 수행할 수 있지만, Spring을 통해 서버를 띄워서 하는 테스트 이기 때문에

    통합 테스트 성격의 @SpringBootTest와 @Transactional를 조합해서 작성한다.

 

Business Layer

비지니스 로직 및 도메인 로직에 대한 책임이 있는 레이어

image

1) 특징

  • 도메인 모델을 조작하고 검증하는 역할.

  • Persistence Layer와의 상호작용을 통해 전개 (통합적 테스트)

  • 트랜잭션을 보장해야 한다.

 

2) 테스트 방법

  • 비지니스 로직 검증을 위해, 보이지 않는 예외 케이스를 고려한 테스트를 해야함.

  • Persistence Layer 를 포함해 통합 테스트 한다.

     

  • 데이터 클렌징 시, 객체간의 협력이 많은 Business Layer에서는 @AfterEach에서 deleteAllInBatch() 사용.

    • deleteAll은 조회 후 하나씩 삭제하므로, 쿼리가 다수 발생함.

 

Presentation Layer

UI 및 컨트롤러의 책임

image

1) 특징

  • 외부 세계의 요청을 가장 먼저 받는 계층이면서 응답을 반환하는 곳.

  • 비지니스 로직을 포함하지 않고, Business Layer에 위임함.

  • 요청 데이터에 대한 검증을 수행하는 곳으로 Controller와 DTO를 포함.

2) 테스트 방법

  • 요청 파라미터에 대한 최소한의 검증을 수행한다. (ex 파라미터의 필수값 여부)

     

  • Controller는 하위레이어 (Business Layer, Persistence Layer)를 Mocking해 독립적으로 테스트 한다.

  • @WebMvcTest를 이용해 테스트 하고자 하는 Controller를 등록한다.

     

  • Business Layer의 Service 클래스를 @MockBean을 통해 Mocking한다.

    *Mocking은 스프링에서 제공하는 아래 프레임워크를 사용한다.

    MockMvc

  • Mock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크


    강의 - Practical Testing: 실용적인 테스트 가이드

댓글을 작성해보세요.

채널톡 아이콘