인프런 워밍업 클럽 4기 BE - 미션 Day 16

인프런 워밍업 클럽 4기 BE 클린코드 & 테스트

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

미션 Day 16


 

Persistence Layer (Repository)

특징

데이터베이스와 직접 엑세스하는 부분으로, 실제 데이터 CRUD에 집중하고 비즈니스 가공 로직이 포함되지 않도록 한다.

테스트 방법

  • @DataJpaTest를 사용해 JPA 관련 컴포넌트만 로딩해 빠르게 테스트 가능하나 자동 롤백 등 제한

  • SpringBootTest로 전체 빈 로드해 실제 환경과 비슷하게 테스트

     

     

  • yml 파일에서 별도 프로파일을 두고 ddl 설정 등 다르게 테스트 환경 분리 가능

  • given 단계에서 테스트에 필요한 데이터 객체를 설정

  • 사이즈 체크하고, 핵심 필드만 뽑아서 contains로 값이 잘 포함돼 있는지 확인

 

Business Layer (Service)

특징

핵심 비즈니스 로직이 담겨 있는 부분으로, Persistence Layer와 상호작용 하며 도메인 요구사항을 처리한다. 로직 흐름 관리가 중요하며 트랜잭션을 보장해야 한다.

 

 테스트 방법

  • Repository 레이어와의 상호작용을 포함한 통합 테스트의 형태로 작성하고 테스트를 진행

     

  • 빌더 객체를 생성하는 테스트용 메서드를 따로 만들어 given을 간결하게 만들 수 있음

  • 비즈니스 상황에서 가능한 예외 케이스들을 다양하게 상정하며 테스트를 작성 ( + 필요 시 동시성 이슈 고려)

  • @AfterEach를 활용해 데이터 클렌징 시 deleteAllInBatch() 사용 권장

  • @Transactional 활용하여 테스트 시 롤백 처리 간편하나 방식에 대한 이해와 함께 사용할 것

     

    • (readOnly = true) : JPA에서 스냅샷 저장 및 변경 감지를 생략해 성능 향상에 이점이 있고 CQRS(Command / Read 책임분리) 구조에도 부합하게 활용 가능

    • 서비스 클래스에 디폴트로(readOnly = true) 를 적용하고, CUD 메서드에 별도로 @Transactional 사용 추천

 

Presentation Layer (Controller)

특징

가장 상위에서 사용자의 요청을 받고 응답을 반환하는 계층으로, 비즈니스 로직이 전개되기 전 dto를 매핑하고 요청 값의 유효성을 검증하거나 예외를 처리하는 것에 중점을 두도록 한다.

 

 테스트 방법

  • @WebMvcTest를 통해 다른 레이어들을 Mocking 처리하여 컨트롤러를 독립적으로 테스트

  • @MockBean 로 만든 Mock 객체를 컨테이너에 주입해 실제 의존성과 분리된 환경 조성

  • MockMvc를 이용해 엔드포인트 동작 시뮬레이션 및 검증

 

 

댓글을 작성해보세요.

채널톡 아이콘