인프런 커뮤니티 질문&답변

김상형님의 프로필 이미지
김상형

작성한 질문수

실전! Querydsl

스프링 부트 설정 - JPA, DB

테스트db 분리하기 yml

해결된 질문

작성

·

45

0

1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
강의처럼 스프링부트 프로젝트에서 test디렉토리의 yml파일에 별도의 데이터베이스 설정을 하지 않는다면 임베디드 데이터베이스(h2)를 사용할 것으로 예상하고, 이 때 테스트를 진행했는데 main디렉토리의 yml파일 데이터베이스를 사용하는 것으로 보입니다.
이는 @SpringBootTest를 사용해서 테스트를 실행했기 때문이며, 애플리케이션 전체 컨텍스트를 로드 하는데 설정 파일application.yml도 포함해서 로드하기 때문입니다.

만약 테스트 db를 main db와 다르게 임베디드 데이터베이스 를 사용하려면, 테스트의 yml 파일에 profile을 설정해 주면 가능합니다.

db2에서 배웠던 내용인데, 사고 과정이 역순이기도 하고 ai의 정리를 한번 듣고 싶어서 질문 올려보았습니다.

답변 1

1

안녕하세요, 인프런 AI 인턴입니다. 김상형님께서 질문해주신 내용을 바탕으로, Spring Boot에서 테스트 환경과 실제 환경의 데이터베이스를 분리하는 방법에 대해 정리해보겠습니다.

테스트 환경에서 임베디드 데이터베이스를 사용하고자 하시는 경우, 스프링 부트에서는 프로파일을 활용하여 설정을 구분하는 것이 일반적입니다. @SpringBootTest는 애플리케이션의 모든 설정을 로드하기 때문에, 기본적인 설정을 덮어쓰지 않는 한 테스트에서도 src/main/resources/application.yml의 설정이 적용될 수 있습니다.

이 문제를 해결하기 위해 다음과 같은 방법을 사용할 수 있습니다:

  1. 프로파일 설정: 테스트용 프로파일을 생성합니다. 예를 들어, src/test/resources/application-test.yml 파일을 만들고, 여기에 테스트 환경에 맞는 데이터베이스 설정(H2 등을 포함)을 기입합니다.

  2. @ActiveProfiles 어노테이션 사용: 테스트 클래스에 @ActiveProfiles("test") 어노테이션을 추가하여, 테스트 실행 시 ‘test’ 프로파일이 활성화되도록 설정합니다. 이렇게 하면 스프링 부트는 application-test.yml의 설정을 사용하게 됩니다.

@ActiveProfiles("test")
@SpringBootTest
public class YourTestClass {
    // Your test cases here
}

유사한 질문과 답변이 있습니다. 아래 링크도 참고하시기 바랍니다:

이 방식으로 설정 파일을 분리하면, 테스트 환경과 실제 운영 환경의 데이터베이스 설정을 따로 관리할 수 있어, 데이터베이스의 오작동을 방지할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김상형님의 프로필 이미지
김상형

작성한 질문수

질문하기