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

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

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

미션

MVC 기반에서 가장 많이 사용되는 3티어 레이어별로 특징과 테스트 방법을 정리해보자!

 

Layered Architecture

  • 일반적으로 controller(presentation) -> service(business) -> repository(persistence) 구조로 이루어져있다.

  • 레이어를 단계적으로 구분하는 이유는 관심사 분리가 목적이다.

 

persistence Layer

  • DB와 직접적인 소통을 하는 계층이며 CRUD 쿼리 작업을 처리한다.

  • Business 계층에서 넘어온 데이터를 처리한다.

  • 주로 JPA와 QueryDSL을 사용한다.

     

     

    테스트 방법

  • 클래스 레벨에서 @SpringBootTest, @DataJpaTest 어노테이션을 사용할 수 있다.


    @SpringBootTest를 사용하는 것을 더 추천한다(다른 테스트와의 환경 통합을 위해)

  • 작성한 쿼리가 의도대로 동작하는지 테스트한다.

 

business Layer

  • 비즈니스 로직이 메인이다.

  • presentation에서 데이터를 받으며 중요 비스니스 로직을 수행하고 persistence 계층으로 전달하는 중간다리 역할을 한다.

     

     

    테스트 방법

    • 클래스 레벨에 @SpringBootTest를 사용하거나 Mock을 사용하는 경우 @ExtendWith(MockitoExtension.class)를 사용한다. 이 역시 환경의 통합을 위해 되도록이면 SpringBootTest를 사용하는 것이 좋다.

       

    • 스트 객체를 생성할 때 관련 테스트 메서드에는 꼭 필요한 데이터만 파라미터로 넘겨받아 빌더 패턴을 활용한다.

    • 단위 테스트를 작성할 수도, persistence 계층와 통합해서 테스트할 수도 있다.

 

presentation Layer

  • 외부 세계를 제일 처음 맞이하는 계층이다. 또한 외부 세계에 응답 데이터를 전달해주는 계층이다.

     

     

    테스트 방법

    • 사용자 요청의 데이터에 최소한의 검증을 해야한다. (validation) 다만, 타입의 유효성 자체에 대한 검증이 아닌 도메인과 관련된 검증들은 presentation 계층이 아닌 더 내부에서 진행한다.

    • 클래스 레벨에 @WebMvcTest(className.class)를 사용한다.

    • mock을 사용한다.

    • 직렬화, 역직렬화를 위해 ObjectMapper 객체가 필요하다.

       

 

 

출처

댓글을 작성해보세요.

채널톡 아이콘