tech/Spring

[Spring] @ActiveProfiles("test") vs @DataJpaTest

sunm2n 2025. 8. 21. 17:35

@ActiveProfiles("test") 🚀

@ActiveProfiles("test")는 스프링 컨테이너에 특정 테스트 클래스를 실행할 때 **"test"**라는 이름의 스프링 프로파일을 활성화하도록 지시하는 범용적인 어노테이션입니다. 이 어노테이션을 사용하면 애플리케이션의 운영 환경과 테스트 환경의 설정을 분리하여 관리할 수 있습니다.

주요 기능:

  • 프로파일 기반 설정 활성화: application-test.properties 또는 application-test.yml 파일의 설정을 로드합니다.
  • 빈 조건부 로드: @Profile("test") 어노테이션이 붙은 빈들을 스프링 컨테이너에 등록합니다.
  • 사용 범위: @SpringBootTest와 같은 전체 컨텍스트를 로드하는 테스트에서 주로 사용됩니다.

@DataJpaTest 📊

@DataJpaTest는 JPA(Java Persistence API) 데이터 계층 테스트에 특화된 어노테이션입니다. 이 어노테이션은 애플리케이션의 전체 컨텍스트를 로드하는 대신, JPA 관련 컴포넌트들만 선택적으로 로드하여 테스트의 효율성을 높입니다.

주요 기능:

  • 테스트 컨텍스트 제한: JPA 리포지토리, 엔티티 매니저, 데이터소스 등 데이터 계층에 필요한 빈들만 로드합니다.
  • 자동 설정: 기본적으로 인메모리 데이터베이스(예: H2)를 설정하고, 각 테스트 메서드 실행 후 자동으로 롤백하여 데이터의 독립성을 보장합니다.
  • 사용 목적: JPA 매핑, 리포지토리 메서드, 커스텀 쿼리 등의 정확한 동작을 검증하는 데 최적화되어 있습니다.

두 어노테이션 비교: @ActiveProfiles vs. @DataJpaTest

구분 @DataJpaTest @ActiveProfiles("test")
목적 JPA 데이터 계층 테스트에 최적화된 "슬라이스 테스트" 지정된 프로파일의 설정을 활성화하는 "환경 설정"
테스트 범위 JPA 관련 빈(Repository 등)만 로드 @SpringBootTest와 함께 사용 시 전체 컨텍스트 로드
테스트 속도 빠름 (일부 빈만 로드) 상대적으로 느림 (전체 컨텍스트 로드 시)
주요 활용 데이터 계층 유닛 테스트 다양한 환경별 설정(DB, API 등)을 구분하여 테스트
함께 사용 함께 사용 가능 함께 사용 가능

결론: 두 어노테이션은 서로 다른 목적을 가지고 있으며, 상호 보완적으로 사용될 수 있습니다. @DataJpaTest는 테스트 범위를 제한하여 속도를 높이는 데 효과적이고, @ActiveProfiles는 특정 테스트 환경에 맞는 설정을 적용하는 데 사용됩니다.

'tech > Spring' 카테고리의 다른 글

[Spring] @Valid와 @Validated  (1) 2025.11.12
Java에서 컬렉션 sort 동작 방식  (0) 2025.11.05
[Spring] @Builder(toBuilder = true)  (1) 2025.07.24
[Spring] 좋은 AppConfig 설계  (0) 2025.07.19
[Spring] N + 1 문제  (1) 2025.07.18