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

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

📌 Persistence Layer

특징

  • Data Access의 역할

  • 비즈니스 가공 로직이 포함되어서는 안 된다.

    • Data에 대한 CRUD에만 집중한 레이어이기 때문

       

  • 작성한 쿼리가 우리의 의도대로 동작하는지 확인하는 단위 테스트의 성격을 가진다.

     

  • 해당 쿼리가 미래에 어떠한 구현체로 변형될지 모르기 때문에 테스트 코드로 보장해주어야 한다.

💡 테스트 방법

  • 실제 데이터베이스와 연동하여 작성한 쿼리가 의도대로 동작(저장, 조회, 수정, 삭제 등)하는지 테스트한다.

  • @ActiveProfiles 를 사용하여 실제 애플리케이션 환경과 테스트 환경을 분리하는 것이 좋다.

  • @DataJpaTest 를 사용할 경우 내부에 @Transactional 이 포함되어 있어 테스트 종료 후 롤백된다.

  • @SpringBootTest 를 사용할 경우 @Transactional 을 선언하거나, 클랜징 작업(deleteAllInBatch)을 수행해주어야 한다.


    📌Business Layer

    특징

  • 비즈니스 로직을 구현하는 역할

  • Persistence Layer와의 상호작용(Data를 읽고 쓰는 행위)을 통해 비즈니스 로직을 전개시킨다.

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

    • 트랜잭션 : "쪼갤 수 없는 업무 처리의 최소 단위"로 원자성, 일관성, 격리성, 지속성 일명 ACID를 보장해야함

       

  • 작성한 비즈니스 로직이 의도대로 동작하는지 확인하는 통합 테스트의 성격을 가진다.

     

     

💡테스트 방법

  • Business Layer는 Persistence Layer를 의존하므로 이 둘을 통합적으로 테스트한다.

     

  • Persistence Layer의 테스트를 수행했다면, Persistence Layer는 Mocking하여 비즈니스 로직만 테스트하는 것도 좋다고 생각한다.

  • 경계값이 주어져도 기능이 정상적으로 동작하는지 테스트해야 한다.

     

  • 해피케이스(예상한 반환값)와 예외케이스(예상한 예외 종류)에 관해서도 해당 계층에서 테스트해야 한다.

  • @SpringBootTest@Transactional 을 사용한다면 서비스 클래스에 @Transactional 이 빠지지 않았는지 유의해야한다.


📌Presentation Layer

특징

  • 외부 세계의 요청을 가장 먼저 받는 계층으로

    파라미터에 대한 최소한의 검증을 수행

  • 넘어온 값들의 검증(validation)이 중요하고, 비즈니스 로직은 필요없음

    • Business Layer에서 비즈니스 로직을 전개하기 전에 값들이 유효한지 검증

       

💡 테스트 방법

  • Business Layer와 Persistence Layer는 Mocking을 사용하여 정상 동작을 하는 것으로 간주하고 테스트한다.

    • @MockitoBean 을 사용하여 서비스 클래스를 Mocking

  • 요청 파라미터에 대한 유효성 검증(필수값, 값의 형식 등) Validation이 정상적으로 작동하는지 테스트한다.

  • @WebMvcTest 을 사용하여 Controller, Filter, Interceptor 와 같은 웹 계층과 관련된 빈만 로드하여 빠르게 테스트할 수 있다.

  • MockMvc를 사용하여 서버를 실행하지 않고 요청을 보내고 응답값을 테스트할 수 있다.

    • MockMvc : Mock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크로 애플리케이션을 띄우지 않고도 HTTP 요청/응답 흐름을 테스트할 수 있다.

 

출처 : Practical Testing: 실용적인 테스트 가이드

댓글을 작성해보세요.

채널톡 아이콘