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

ILoveBackEnd님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

테스트코드에서만 적용되는 yml 설정을 하고 싶습니다.

해결된 질문

작성

·

969

0

안녕하세요! 실무에서 겪었던 문제에 대한 조언을 구하고 싶습니다.

test 하위에 application.yml을 만들면 테스트코드 돌릴 때 해당 yml 설정을 따른다고 배워서 적용했습니다.

 

application-local.yml

application-prod.yml

이런 식으로 뒤에 - 프로필이 붙은 형태이고

테스트 폴더 하위에도

application-local.yml

파일을 만들었습니다.

 

DB 연결이 안되길래 prod.yml 쪽으로 연결 시도를 하는거 같아

테스트 코드에

@ActiveProfiles("local")

을 붙여주었고 테스트 서버 DB에 잘 붙어서 테스트코드를 작성했습니다.

(main/applicatino-local.yml 역시 테스트 서버 DB에 연결되어 있는 상태)

테스트코드를 작성하다보니 이게 불편하더라구요

그래서 h2 인메모리 DB를 사용하고자 테스트 코드용 yml에 설정을 해주었습니다.

jpa ddl auto 설정도 create 였구요..ㅎㅎㅎ

 

동료 개발자분이 테스트 서비스 로그인이 안된다길래 보니 테스트 디비 데이터가 다 날아갔습니다,,,하하하하

정말 식은땀이 주륵..... 다행히 얼마 전에 다른 작업으로 백업을 해둔게 있어서 그걸로 복구했습니다만 정말 아찔했습니다 ㅠㅠ

 

main/appication-local.yml 의 datasource url로 연결하고

test/appication-local.yml 의 ddl-auto: create 설정을 따른 것으로 보여지는데

왜 이런걸까요?

저는 test/appication-local.yml 설정만 따를 거라고 생각했는데..

 

제가 원하는 것은 local에서 서버를 직접 띄워서 사용할 때는 test 서버 db에 연결하고 싶고

테스트 코드 돌릴 때는 인메모리 h2를 사용하고 싶습니다.

이런 경우에 어떻게 사용하면 좋을까요?

 

main/applilcation-local.yml

datssource: 테스트 서버 DB

 

test/applilcation-local.yml

datssource: 인메모리 h2 DB

jpa ddlauto: create

 

-> 테스트 서버 디비 데이터 다 날아감

내가 원하는 것 : 테스트 코드는 test/applilcation-local.yml 설정만을 따라 인메모리 DB 사용

답변 2

1

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, ILoveBackEnd 님! :)

아이고 힘든 경험을 하셨군요ㅠㅠ
그래서 저는 강의에서 테스트를 위한 별도의 프로파일을 만들어서 사용했습니다.
혹시라도 프로덕션 환경에 테스트 코드가 미칠 영향을 아예 분리하기 위해서요.

로컬 환경, 개발 환경, 리얼 환경, 그리고 테스트 환경에 대한 설정 정보를 별도로 관리하면 각각에 상황에 맞게 설정을 줄 수 있기 때문에 관리하기도 편하고 보다 안전하게 적용할 수 있습니다.

도움이 되셨기를 바랍니다.
감사합니다. :)

ILoveBackEnd님의 프로필 이미지
ILoveBackEnd
질문자

아하..!

main 하위에 작성하는 yml과

test 하위에 작성하는 yml이

프로파일이 같아도 테스트는 테스트 하위 yml만 탈거라고 생각했습니당 ㅠㅠ

테스트코드용 프로파일을 따로 작성하고 사용해야겠네요!

 

궁금한게 몇가지 있습니다!

 

  1. 실무에서도 main 하위에 테스트코드용 yml을 두시나요?

  2. 테스트코드용 DB를 따로 사용하시나요?

  3. 제가 이해한대로 테스트코드만 사용하는 프로파일을 따로 사용하시는거죠?!(실무에서)

박우빈님의 프로필 이미지
박우빈
지식공유자

1. 실무에서도 main 하위에 테스트코드용 yml을 두시나요?

네 저는 설정 파일이 한 곳에 있는 것이 관리가 편해서, 그렇게 하고 있습니다.

2. 테스트코드용 DB를 따로 사용하시나요?
3. 제가 이해한대로 테스트코드만 사용하는 프로파일을 따로 사용하시는거죠?!(실무에서)

강의 중에 보여드린 것과 동일합니다. ㅎㅎ
H2를 주로 사용하고, 테스트용 프로파일을 사용합니다.

ILoveBackEnd님의 프로필 이미지
ILoveBackEnd
질문자

답변 감사합니다!

우빈님과 함께 일하고 싶은데ㅎㅎ 어떤 준비를 하면 도움이 될까요?

1

안녕하세요, 인프런 AI 인턴이에요.

테스트 코드에서만 적용되는 yml 설정을 하고 싶은데, 테스트 코드를 실행할 때만 해당 설정이 적용되는 방법에 대해 조언을 요청하셨군요.

테스트 코드에서는 보통 테스트용 DB를 사용하거나 인메모리 DB를 사용하는 경우가 많습니다. 하지만 테스트 코드용 yml 파일에 설정을 해주면, 테스트 서비스와 실제 서비스에서 동일한 데이터베이스를 사용하게 되므로 위험한 상황이 발생할 수 있습니다.

보다 안전한 테스트 환경을 구성하기 위해서는, 테스트 코드에서만 사용할 수 있는 별도의 설정 파일을 만드는 것이 좋습니다. 다음과 같은 절차로 진행하시면 됩니다.

  1. 테스트 코드에서 사용할 설정 파일을 만듭니다. 예를 들어, “application-test.yml” 파일을 생성합니다.
  2. 해당 설정 파일에는 테스트에 필요한 설정들을 작성하시면 됩니다. 예를 들어, 인메모리 DB를 사용하고 싶다면, “application-test.yml” 파일에 “spring.datasource.url” 등의 설정을 작성하시면 됩니다.
  3. 테스트 코드에서는 “@ActiveProfiles” 어노테이션을 사용하여, 테스트에 사용할 프로파일을 지정해줍니다. 예를 들어, “@ActiveProfiles(“test”)“와 같이 사용하면, 테스트 코드에서는 “application-test.yml”의 설정을 사용하게 됩니다.

이렇게 설정하면, 테스트 코드를 실행할 때만 “application-test.yml” 설정 파일의 내용이 적용되어 테스트용 DB를 사용하실 수 있습니다.

위의 방법을 활용하여 안전하게 테스트 환경을 구성하시기 바랍니다. 추가적인 질문이 있으시면 언제든지 물어보세요!