개발 환경에 따른 properties 세팅 방법

박성현·2025년 10월 1일

개발중 학습

목록 보기
27/44

🚀 Spring Boot Profile 설정과 톰캣 배포 시 환경별 Properties 분리하기

스프링 애플리케이션을 개발하다 보면 운영(Prod), 개발(Dev), 테스트(Test) 환경에 따라 서로 다른 설정을 적용해야 할 때가 많습니다.
대표적으로 DB 연결 정보, 외부 API Key(예: 기상청 OpenAPI 서비스 키), 로그 레벨 등이 환경마다 달라지죠.

스프링에서는 이런 환경별 구분을 위해 Profiles 기능을 제공합니다.
오늘은 application-xxx.properties를 어떻게 환경에 따라 다르게 적용하는지, 그리고 톰캣 배포 시 catalina.sh를 어떻게 활용하는지 정리해보겠습니다.


1. Spring Profiles란?

Spring Boot는 application.properties 외에 환경별 설정 파일을 구분해서 둘 수 있습니다.

예시:

application.properties          # 기본 설정
application-dev.properties      # 개발 환경 설정
application-prod.properties     # 운영 환경 설정
application-local.properties    # 로컬 개발 환경

이때 spring.profiles.active 값을 어떤 걸로 주느냐에 따라 로딩되는 설정이 달라집니다.

예를 들어,

# application-dev.properties
db.url=jdbc:mysql://dev-db:3306/mydb
weather.api.key=DEV123456
# application-prod.properties
db.url=jdbc:mysql://prod-db:3306/mydb
weather.api.key=PROD987654

2. 로컬 실행 시 (IntelliJ / Eclipse)

IDE에서 애플리케이션을 실행할 때는 Run Configurations → VM options(또는 Arguments)에 아래와 같이 세팅합니다.

-Dspring.profiles.active=dev

➡️ 그러면 application-dev.properties가 적용됩니다.
운영 테스트를 하고 싶다면:

-Dspring.profiles.active=prod

➡️ 이 경우에는 application-prod.properties가 적용되겠죠.


3. 톰캣 배포 시 (catalina.sh 활용)

운영 환경에서는 보통 톰캣 같은 WAS(Web Application Server)에 Spring Boot WAR를 배포하게 됩니다.
이때도 어떤 프로파일을 사용할지 톰캣이 기동될 때 지정해줄 수 있습니다.

방법

$CATALINA_HOME/bin/catalina.sh 또는 setenv.sh에 아래처럼 추가합니다:

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=dev"

혹은 운영 서버라면:

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=prod"

이렇게 세팅해주면, 톰캣이 실행될 때 JVM 옵션을 통해 Spring에 spring.profiles.active 값을 전달하게 되고,
애플리케이션은 자동으로 해당 프로파일(application-prod.properties)을 읽어옵니다.


4. 정리 (로컬 vs 배포 환경)

  • 로컬 개발 환경
    Run Configurations → Spring Boot App → Arguments → VM arguments → -Dspring.profiles.active=dev

  • 배포 환경 (톰캣)
    catalina.sh 또는 setenv.sh에 → JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=prod"

결과적으로 환경마다 다른 properties 파일을 알아서 로딩하기 때문에,
배포된 서버에서는 application-prod.properties, 개발 서버에서는 application-dev.properties,
로컬 테스트에서는 application-local.properties … 이런 식으로 깔끔하게 분리할 수 있습니다.


5. 구현 (기상청 OpenAPI 연동)

제가 이번에 구현한 기능 중 하나는 기상청 OpenAPI 데이터를 가져오는 모듈이었는데요.
문제는 서비스 키(Service Key) 가 환경마다 달랐다는 점이었습니다.

  • 로컬: 테스트용 서비스키
  • 개발 서버: 개발용 서비스키
  • 운영 서버: 운영용 서비스키

이를 해결하기 위해:

# application-dev.properties
weather.api.key=DEV_KEY_12345

# application-prod.properties
weather.api.key=PROD_KEY_98765

이렇게 분리해 두고, 서버 기동 시 프로파일만 다르게 주었더니,
별도의 코드 수정 없이도 환경마다 다른 설정을 자동으로 불러오게 되었습니다. 👍


✅ 결론

👉 spring.profiles.active 값을 로컬에서는 VM 옵션으로,
👉 배포 환경에서는 톰캣 기동 옵션(JAVA_OPTS)으로 지정하면,
환경에 맞는 application-xxx.properties를 손쉽게 적용할 수 있습니다.

이 방법을 쓰면 소스 수정 없이 환경만 바꿔도 자동으로 다른 DB, API Key, 로그 레벨을 적용할 수 있어서 배포가 훨씬 깔끔해집니다. 🚀


profile
개발기록장

0개의 댓글