[개발 일기] 2025.04.03 - @DataJpaTest vs @SpringBootTest

2025. 4. 3. 12:42·개발 일기

💡 개요

 

오늘은 Spring에서 테스트에 사용되는 어노테이션인 @DataJpaTest과 @SpringBootTest에 대해 정리해 보자.

 

 

 

📕 @DataJpaTest

 

@DataJpaTest는 Spring에서 JpaRepository를 테스트할 때 사용되는 어노테이션이다.

 

@DataJpaTest의 가장 주요한 특징으론 실제 쿼리가 DB에 반영되지 않는다.

 

 

일반적으로 JPA는 개발자가 요청한 쿼리를 영속성 컨텍스트에 담아뒀다가 커밋하기전에 모든 쿼리를 DB에 반영하는 flush()을 수행한다.

 

 

하지만 @DataJpaTest의 경우엔 flush()가 동작하지 않는다.

 

 

그렇기 때문에 flush()가 동작하는 @SpringBootTest 보다 빠르다고 느낄 수 있다.

 

 

뿐만 아니라 @DataJpaTest 내부를 보면 @Transactional 어노테이션이 달려있다.

 

 

이는 테스트가 끝난 후 자동으로 롤백되도록 하기 위함이다.

 

 

즉, @DataJpaTest를 사용하면 테스트 중 수행된 모든 데이터 변경 작업이 자동으로 롤백되므로, 실제 DB 상태를 변경하지 않고도 JPA 관련 로직을 검증할 수 있다.

 

 

이는 테스트 간 데이터 정합성을 유지하는 데도 유리하다.

 

 

또한 @AutoConfigureTestDatabase을 포함하고 있기 때문에 별도의 DB 설정 없이, 인메모리를 DB로 사용할 수 있다.

 

 

 

📕 @SpringBootTest

 

@SpringBootTest는 @DataJpaTest와 달리 실제 데이터베이스를 사용할 수 있으며, 기본적으로 트랜잭션이 설정되어 있지 않다.

 

 

이로 인해 영속성 컨텍스트에 저장된 변경 사항이 모두 정상적으로 flush()되며, 실제 데이터베이스에 반영된다. 즉, 테스트 중 수행된 쿼리가 롤백되지 않고 그대로 DB에 저장된다.

 

 

이러한 특징 때문에 @SpringBootTest는 JPA 테스트보다는 실제 비즈니스 로직을 검증하는 Service 레이어 테스트에 적합하다.

 

 

Service 레이어는 Repository를 통해 데이터를 조회하고 가공하는 역할을 하므로, 실제 DB 환경에서 테스트하는 것이 더욱 현실적인 시나리오를 검증하는 데 도움이 된다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.04.05 - N+1 문제 (JPA)  (0) 2025.04.05
[개발 일기] 2025.04.04 - isBlank() vs isEmpty()  (0) 2025.04.04
[개발 일기] 2025.04.02 - Spring Boot 서버가 작동될 때 발생되는 일  (0) 2025.04.02
[개발 일기] 2025.04.01 - Blocking & Non-blocking IO  (0) 2025.04.01
[개발 일기] 2025.03.31 - WSS (WebSocket Secure)  (0) 2025.03.31
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.04.05 - N+1 문제 (JPA)
  • [개발 일기] 2025.04.04 - isBlank() vs isEmpty()
  • [개발 일기] 2025.04.02 - Spring Boot 서버가 작동될 때 발생되는 일
  • [개발 일기] 2025.04.01 - Blocking & Non-blocking IO
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.04.03 - @DataJpaTest vs @SpringBootTest
상단으로

티스토리툴바