• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@JdbcTest 관련 질문

23.12.01 11:50 작성 조회수 264

0

 안녕하세요.

 

섹션 10. 스프링 부트 자세히 살펴보기에서

스프링 부트의 자동 구성과 테스트로 전환하는 부분 보다가 궁금증이 생겨서 질문남깁니다.

 

@HellobootTest를 @JdbcTest 또는 @SpringBootTest로 전환하는 부분에서

@JdbcTest같은 경우는 내장된 테스트용 db로 교체를 한다. 라고 설명을 해주셨습니다.

 

그리고 이전 강의에서 테스트를 위해 인메모리 db인 h2를 사용하도록 application.properties에 설정을 하고 테스트를 진행했었습니다.

 

여기서 질문은 @JdbcTest를 사용하면 교체된다고 하는 db가 기존에 사용했던 h2 DB가 아닌 또 다른 DB로 전환된다는 말씀인건지가 헷갈려서 질문드립니다.

 

구체적으로 JdbcTemplateTest class가 jdbcTemplate을 테스트하기 위해 hello table을 db에 생성하고 insert하는 작업을 할 때,

 

@HellobootTest 일 때는 h2 db를 사용하고 @JdbcTest로 교체했을 때는 다른 embedded db를 사용하는건가요?

 

감사합니다!

답변 2

·

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.03

안녕하세요, 인프런 AI 인턴입니다.

@JdbcTest는 테스트를 위해 자동으로 내장된 인메모리 데이터베이스를 구성해주는 테스트용 구성 어노테이션입니다. @JdbcTest를 사용할 때 기본적으로는 클래스패스 상에 존재하는 내장 데이터베이스 중 하나를 사용하며, H2, HSQL, Derby 등이 자동 구성될 수 있습니다. 만약 클래스패스 상에 여러 내장 데이터베이스가 존재한다면 spring.datasource.embedded-database-connection 설정에 따라 결정되며, 설정하지 않았다면 스프링 부트가 자동으로 판단해 하나를 선택합니다.

이는 application.properties에 설정된 H2 데이터베이스 설정을 무시하고 별도의 내장 데이터베이스로 교체될 수 있다는 의미입니다. 그렇기에 @JdbcTest 어노테이션이 적용된 테스트에서는 예상치 않게 다른 인메모리 데이터베이스를 사용하게 될 가능성이 있습니다. 이를 특정한 DB로 고정하고 싶다면 @AutoConfigureTestDatabase 어노테이션을 사용하여 테스트에 사용할 DB를 명시적으로 설정할 수 있습니다.

님께서 언급하신 경우처럼 @HellobootTest에서는 application.properties에 지정한 H2 데이터베이스를 사용하고, @JdbcTest로 전환하였을 때 클래스패스 상의 다른 내장 데이터베이스를 사용할 수 있다는 것입니다. 하지만 @AutoConfigureTestDatabase 어노테이션으로 구체적인 동작을 제어할 수 있으니, H2 데이터베이스를 계속 사용하고 싶다면 이 점을 참고하여 설정하면 됩니다.

관련 정보는 아래 문서를 참고하시면 더 자세한 내용을 확인하실 수 있습니다.
- Auto-configured JDBC Tests

감사합니다.

0

@JdbcTest는 일반적으로 사용하는 오라클이나 MySQL 아닌 H2와 같은 메모리DB를 사용합니다. 물론 테스트에서도 MySQL 등을 사용하게 바꿀 수도 있습니다. 어느 DB를 사용할지는 라이브러리에 포함시킨 DB 드라이버 클래스를 살펴보고 스프링이 결정하게 됩니다. 테스트용 메모리DB로 가장 많이 사용되는 건 H2입니다.

강의에서는 application.properties에서 직접 정의하는 DB도 H2를 사용했으니 @JdbcTest의 기본과 동일한 DB가 사용되겠네요.