공부해봅시당

[Spring] @SpringBootTest와 @DataJpaTest 본문

STUDY/Spring

[Spring] @SpringBootTest와 @DataJpaTest

tngus 2024. 2. 23. 19:19

@SpringBootTest와 @DataJpaTest

@SpringBootTest와 @DataJpaTest는 스프링 부트(Spring Boot) 테스트를 위한 어노테이션

기준 @SpringBootTest @DataJpaTest
정의 스프링 부트 애플리케이션의 통합 테스트를 위한 어노테이션
전체 스프링 컨텍스트를 로드함
JPA 컴포넌트에 집중된 테스트를 위한 어노테이션
JPA 관련 설정만 로드하여 빠른 실행을 도움
공통점 스프링 테스트 컨텍스트 프레임워크를 사용하여 스프링 기반 테스트 지원
차이점 - 전체 스프링 애플리케이션 컨텍스트 로드
- 더 무거운 테스트 실행
- 오직 JPA 관련 구성요소만 로드
- 데이터베이스와 관련된 설정, DAOs, JPA repositories 등에 초점
장점 - 실제 애플리케이션 실행 환경과 가장 유사한 테스트 환경 제공
- 모든 빈을 사용할 수 있음
- 테스트 실행 속도가 빠름
- 데이터 액세스 레이어에 집중하여 구체적인 테스트 가능
- 인메모리 데이터베이스 사용 가능
단점 - 테스트 실행 시간이 길어질 수 있음
- 리소스 집약적
- 전체 애플리케이션 컨텍스트를 로드하지 않아, 다른 빈들과의 상호작용 테스트가 제한적
사용처 - 전체 애플리케이션 흐름을 테스트하고자 할 때
- 여러 빈 간의 상호작용을 검증하고 싶을 때
- JPA 엔티티, 리포지토리 계층의 테스트
- 데이터베이스 트랜잭션 및 쿼리 성능 테스트

 

 

어느 것이 더 선호되는가?

@SpringBootTest와 @DataJpaTest는 서로 다른 시나리오에 최적화되어 있으며,

어느 하나가 다른 하나보다 절대적으로 더 좋다고 말하기 어려움

 

선호도는 테스트하고자 하는 범위와 목적에 따라 달라짐

@SpringBootTest는 애플리케이션의 전체적인 통합 테스트, 즉 실제 실행 환경에서의 동작을 검증하고자 할 때 선호됨

특히, 컨트롤러에서 서비스, 리포지토리를 거쳐 데이터베이스까지의 전체 흐름을 테스트하고 싶을 때 유용


@DataJpaTest는 데이터 액세스 레이어, 특히 JPA를 사용하여 데이터베이스를 다루는 부분의 단위 테스트에 적합

성능 테스트나 쿼리 최적화, 엔티티 간의 관계 설정 검증 등 JPA와 직접적으로 관련된 테스트를 빠르게 수행하고자 할 때 선호됨

 

결론

테스트의 목적에 따라 적합한 어노테이션을 선택해야 함

 

전체 애플리케이션의 통합 테스트를 진행하려면 @SpringBootTest를,

데이터 액세스 레이어에 집중된 테스트를 수행하려면 @DataJpaTest를 사용하는 것이 좋음