Profile = 환경
환경별 차이 예시
| 항목 | Local | Prod |
|---|---|---|
| DB 호스트 | localhost | rds.amazonaws.com |
| DB 포트 | 3306 | 3306 |
| DB 이름 | myapp_local | myapp_prod |
| DB 비밀번호 | localpass | (보안 비밀번호) |
| 로그 레벨 | DEBUG | INFO |
잘못된 방식
- 환경 변수 하드코딩
# application.properties spring.datasource.url=jdbc:mysql://localhost:3306/test # 고정 되어버림! spring.datasource.password=12345678 # 고정 되어버림!
- 운영 배포 시 코드를 수정해야 함
- 비밀번호가 코드에 노출
- 환경마다 다른 JAR 빌드 필요
올바른 방식
- 환경별 설정 분리
application.properties → 공통 설정 application-local.properties → 로컬 설정 application-prod.properties → 운영 설정 (비밀번호는 환경변수)
- 코드 수정 없이 환경 변경
- 비밀번호는 환경변수로 분리
- 하나의 JAR로 모든 환경 대응 가능
application-{profile}.properties파일명 패턴으로 설정 구분
- local
- dev
- qa
- staging (stg)
- prod
- ...
application.properties은 모든 환경에 적용되는 공통 설정 파일
- 충돌하는 경우 세부 프로필 환경 설정이 우선시됨
IntelliJ에서 실행 프로필 설정하는 방법
![]() | ![]() |
|---|
여러 가지 환경 변수 설정하는 방법
| 순위 | 방법 | 예시 |
|---|---|---|
| 1 (높음) | 프로그램 인자 | --spring.profiles.active=prod |
| 2 | 환경변수 | SPRING_PROFILES_ACTIVE=prod |
| 3 | JVM 옵션 | -Dspring.profiles.active=prod |
| 4 (낮음) | application.yml | spring.profiles.active: local |
application.properties(공통 환경)
spring.application.name=camp-health-app
spring.profiles.active=local
server.port=8080
management.endpoints.web.exposure.include=health,info
application-local.properties(로컬 환경)
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
management.endpoint.health.show-details=always
application-prod.properties(운영 환경)
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
management.endpoint.health.show-details=never # 운영에서는 숨김
운영(prod)에서는 민감 정보를 환경 변수로 외부에서 주입해야 한다.