Projects/HubEleven

[동시성 처리] Trouble Shooting : 테스트 코드 .env 환경 변수 적용

annovation 2026. 2. 13. 12:48

문제 상황

💡 문제 상황

  • 환경 변수(DB_USERNAME)가 정상적으로 치환되지 않아 실제 DB 계정이 아닌 ${DB_USERNAME} 문자열로 접속을 시도하면서 인증에 실패한 문제

💡 문제 증상

org.hibernate.exception.GenericJDBCException: 
unable to obtain isolated JDBC connection 
[Access denied for user '${DB_USERNAME}'@'localhost' (using password: YES)]

원인 분석

💡 원인 1 : 루트에 위치한 .env 환경 변수 값을 읽어오지 못하는 상황

  • 본 프로젝트의 .env 파일은 루트 디렉터리(/Users/ann/Programming/Java Projects/hub-eleven/.env)에 위치하며, 루트는 settings.gradle 기준으로 정의한다.
  • 해당 .env 파일의 DB_USERNAME 과 DB_PASSWORD 값을 읽어오지 못해 테스트용 로컬 MySQL 에 접속하지 못하는 에러 발생

해결 방안 검토

💡 해결 방안 1 : .env 환경 변수란?

  • 환경변수(Environment Variables)는 운영체제에서 제공하는 동적인 값으로, 애플리케이션이 실행되는 환경에 따라 설정 값을 다르게 적용할 수 있도록 도와준다. Spring Boot 프로젝트에서도 환경변수를 활용하면 코드 수정 없이 설정을 변경할 수 있어 유지보수성과 보안성이 향상된다. (출처)

💡 해결 방안 2 : 왜 문제가 되었나요?

 

실행 방식별로 .env 주입 주체가 다르다 (IDE 실행 vs 테스트 실행)

  • 앱 실행(Run) : IntelliJ의 EnvFile 플러그인, Docker compose, 쉘 스크립트 등이 .env를 읽어 환경변수로 넣어줌 (출처)
  • 테스트(Test) : Gradle/Maven 테스트 JVM은 별도 프로세스라서 위 주입이 적용되지 않음 (특히 IntelliJ에서 Run 구성과 Test 구성이 따로일 때)

✅ 해결

  • IntelliJ라면 Run/Debug Configurations에서 “테스트 구성”에도 EnvFile(또는 Environment variables) 적용
  • Gradle 사용 시 test { environment "KEY","VALUE" }로 주입

해결 방법

💡 해결 방법 : 테스트 프로필 설정에 .env를 명시적으로 import 하도록 설정

import: "optional:file:.env[.properties],optional:file:../.env[.properties]"
  • file:.env : 현재 실행 디렉터리 기준
  • file:../.env : 한 단계 상위(루트) 기준
  • [.properties] : .env KEY=VALUE 형식으로 파싱
  • optional: : 파일이 없어도 앱 시작 실패 방지(디버깅 시 제거 가능)

💡 그 외 더 다양한 해결 방법들도 있다.

https://imdeepskyblue.tistory.com/66

 

SpringBoot 애플리케이션에 .env 통합하는 방법 세가지

안녕하세요. 저는 요즘에 합세랑 솦커톤, 과제로 인해서 프로젝트를 새로 세팅해야 하는 상황이 많았는데요!특히 환경 설정을 하면서 환경 변수를 분리하게 되는데 저는 분리하는 방법이 다양

imdeepskyblue.tistory.com


참고 자료

1) 블로그 : [Spring Boot] 프로젝트에서 환경변수 설정하는 방법

https://msj9965.tistory.com/5

 

[Spring Boot] 프로젝트에서 환경변수 설정하는 방법

1. 환경변수란?환경변수(Environment Variables)는 운영체제에서 제공하는 동적인 값으로, 애플리케이션이 실행되는 환경에 따라 설정 값을 다르게 적용할 수 있도록 도와준다. Spring Boot 프로젝트에서

msj9965.tistory.com