공부해봅시당
[Spring] @SpringBootTest와 @DataJpaTest 본문
@SpringBootTest와 @DataJpaTest
@SpringBootTest와 @DataJpaTest는 스프링 부트(Spring Boot) 테스트를 위한 어노테이션
기준 | @SpringBootTest | @DataJpaTest |
정의 | 스프링 부트 애플리케이션의 통합 테스트를 위한 어노테이션 전체 스프링 컨텍스트를 로드함 |
JPA 컴포넌트에 집중된 테스트를 위한 어노테이션 JPA 관련 설정만 로드하여 빠른 실행을 도움 |
공통점 | 스프링 테스트 컨텍스트 프레임워크를 사용하여 스프링 기반 테스트 지원 | |
차이점 | - 전체 스프링 애플리케이션 컨텍스트 로드 - 더 무거운 테스트 실행 |
- 오직 JPA 관련 구성요소만 로드 - 데이터베이스와 관련된 설정, DAOs, JPA repositories 등에 초점 |
장점 | - 실제 애플리케이션 실행 환경과 가장 유사한 테스트 환경 제공 - 모든 빈을 사용할 수 있음 |
- 테스트 실행 속도가 빠름 - 데이터 액세스 레이어에 집중하여 구체적인 테스트 가능 - 인메모리 데이터베이스 사용 가능 |
단점 | - 테스트 실행 시간이 길어질 수 있음 - 리소스 집약적 |
- 전체 애플리케이션 컨텍스트를 로드하지 않아, 다른 빈들과의 상호작용 테스트가 제한적 |
사용처 | - 전체 애플리케이션 흐름을 테스트하고자 할 때 - 여러 빈 간의 상호작용을 검증하고 싶을 때 |
- JPA 엔티티, 리포지토리 계층의 테스트 - 데이터베이스 트랜잭션 및 쿼리 성능 테스트 |
어느 것이 더 선호되는가?
@SpringBootTest와 @DataJpaTest는 서로 다른 시나리오에 최적화되어 있으며,
어느 하나가 다른 하나보다 절대적으로 더 좋다고 말하기 어려움
선호도는 테스트하고자 하는 범위와 목적에 따라 달라짐
@SpringBootTest는 애플리케이션의 전체적인 통합 테스트, 즉 실제 실행 환경에서의 동작을 검증하고자 할 때 선호됨
특히, 컨트롤러에서 서비스, 리포지토리를 거쳐 데이터베이스까지의 전체 흐름을 테스트하고 싶을 때 유용
@DataJpaTest는 데이터 액세스 레이어, 특히 JPA를 사용하여 데이터베이스를 다루는 부분의 단위 테스트에 적합
성능 테스트나 쿼리 최적화, 엔티티 간의 관계 설정 검증 등 JPA와 직접적으로 관련된 테스트를 빠르게 수행하고자 할 때 선호됨
결론
테스트의 목적에 따라 적합한 어노테이션을 선택해야 함
전체 애플리케이션의 통합 테스트를 진행하려면 @SpringBootTest를,
데이터 액세스 레이어에 집중된 테스트를 수행하려면 @DataJpaTest를 사용하는 것이 좋음
'STUDY > Spring' 카테고리의 다른 글
[Spring] 스프링빈(Spring Bean) (0) | 2024.02.28 |
---|---|
[Spring] 필터(Filter) vs 인터셉터(Intercepter) (2) | 2024.02.28 |
[Spring] @Autowired와 @ RequiredArgsConstructor 중 더 선호되는 것은? (0) | 2024.02.23 |
[Spring] EJB(Enterprise JavaBeans) (0) | 2024.02.23 |
[쉽게 배우자! Spring Triangle 3] PSA에 대해서 쉽게 이해해보자 (0) | 2024.02.23 |