• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

main/application.yml, test/application.yml

23.07.09 21:36 작성 23.07.09 21:37 수정 조회수 532

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 사용

답변 1

답변을 작성해보세요.

1

y2gcoder님의 프로필

y2gcoder

2023.07.10

안녕하세요. ILoveBackEnd님, 공식 서포터즈 y2gcoder입니다.

스프링부트가 최근 버전을 올리면서 application-{profile}.yml로 프로파일을 설정할 수 있게 되면서 편해지긴 했지만, ILoveBackEnd님의 케이스에서는 오히려 똑같은 profile 명의 yml이 두 개가 있어 독이 된 것 같습니다.

정말 간단한 해결 방법은 src/test/resources 하위에 있는 application-local.yml 의 이름을 application-test.yml로 바꾸시는 것이 아닐까 생각합니다. 테스트 코드를 위한 설정파일이니 파일명에서도 명확하게 보일 것이라 생각합니다.

개인적으로는 테스트 코드를 돌리기 위한 application.yml을 src/test/resources 에 생성하고 테스트 관련 설정을 다 두고 있습니다. 아직은 테스트를 위한 설정 파일을 분리해야 할 필요성을 느끼지 못했습니다.

감사합니다.

답변 감사합니다!

 

그럼 y2gcoder님께서는

src/test/resources/application.yml

여기 테스트 코드 관련 설정을 다 두고

따로 profile을 나누진 않으신다는 말씀이시죠?!

 

그럼 혹시 main 하위 application.yml 과

datasource 를 다르게 쓰시나요?

y2gcoder님의 프로필

y2gcoder

2023.07.10

네 제 경우에는 그렇게 많이 나눌 필요가 없었습니다 :)

말씀하신 것처럼 datasource 관련 설정을 따로 썼습니다 ㅎㅎ

src/test/resources/application.yml

이렇게 하고 @ActiveProfiles 사용 안하면

src/main/resources/application-prod.yml

datasource 로 붙는 거 같던데 ㅠㅠ 상용 디비는 로컬에서 붙을 수 없으니 connection time out 나구요

 

저도 y2gcoder님 처림

src/main/resources/application.yml -> A DB

src/test/resources/application.yml -> B DB

이렇게 따로 쓰고 싶은데 말이죠 ㅠㅠ

y2gcoder님의 프로필

y2gcoder

2023.07.11

스프링 빈을 띄워서 테스트하는 @SpringBootTest 가 붙은 테스트를 구동할 때 실행되고 있는 프로파일을 볼 수 있습니다.

어쩌면 저와는 구성 방식이 달라서 그러실 수도 있을 거라 생각합니다 ㅎㅎ 영한님 강의 중 최신 강의인 스프링 부트 강의에서 자동 설정 및 설정 값에 대한 부분도 있으니 참고해보시길 권해드립니다:)

아 프로필을 아예 따로 사용하시는군요?!

답변 감사합니디 :)

영한님 부트 강의도 잘 듣겠습니다~!

y2gcoder님의 프로필

y2gcoder

2023.07.11

파이팅입니다!