인프런 워밍업 클럽 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를 이용해 엔드포인트 동작 시뮬레이션 및 검증
댓글을 작성해보세요.