환경 변수 설정

application.yml 환경별 설정 분리 및 환경변수 관리 규칙

마지막 수정: 2026-05

환경 변수 설정

기본 원칙

민감 정보는 절대 코드에 하드코딩하지 않는다. 모든 환경별 설정은 환경변수 또는 프로파일 파일로 분리한다.


환경변수 네이밍 규칙

환경변수는 아래 접두사 규칙을 따른다:

접두사대상
APP_애플리케이션 공통 설정
DB_데이터베이스 연결 정보
REDIS_Redis 연결 정보
JWT_JWT 토큰 관련 설정
ANTHROPIC_Claude AI API 설정

application.yml 환경별 프로파일 분리

src/main/resources/
├── application.yml               # 공통 (기본값, 환경변수 참조)
├── application-local.yml         # 로컬 개발 (git 커밋 가능)
├── application-dev.yml           # 개발 서버
└── application-prod.yml          # 운영 전용 (git 커밋 금지)

application.yml 예시

spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

  data:
    redis:
      host: ${REDIS_HOST:localhost}
      port: ${REDIS_PORT:6379}
      password: ${REDIS_PASSWORD:}

anthropic:
  api-key: ${ANTHROPIC_API_KEY}
  model: claude-sonnet-4-20250514
  max-tokens: 1500

jwt:
  secret: ${JWT_SECRET}
  expiration: ${JWT_EXPIRATION:1800}

guide:
  docs-path: ${DOCS_PATH:./docs}

기본값 설정 규칙

# ${ENV_VAR:기본값} 형식 사용
server.port: ${PORT:8080}
guide.docs-path: ${DOCS_PATH:./docs}
  • 운영 환경에서 반드시 주입되어야 하는 값은 기본값 없이 선언 (${ANTHROPIC_API_KEY})
  • 개발 편의를 위해 기본값이 허용되는 값만 기본값 지정

.env.example 관리

.env.example 파일은 항상 최신 상태를 유지하고 반드시 git 커밋한다.

# .env.example (git 커밋 O — 실제 값 없이 키만 기록)
APP_VERSION=1.0.0
DB_URL=jdbc:oracle:thin:@localhost:1521:XE
DB_USERNAME=
DB_PASSWORD=

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

JWT_SECRET=
JWT_EXPIRATION=1800

ANTHROPIC_API_KEY=

민감 정보 관리

환경관리 방식
로컬 개발.env 파일 (git 제외)
EC2 서버EC2 서버 환경변수 또는 /etc/systemd/system/{서비스명}.service
운영 민감값AWS Secrets Manager 사용 권장

EC2 환경변수 설정 예시

# /etc/systemd/system/{서비스명}.service
[Service]
Environment=DB_URL=jdbc:oracle:thin:@{host}:1521:{sid}
Environment=DB_USERNAME=appuser
Environment=DB_PASSWORD=...
Environment=ANTHROPIC_API_KEY=sk-ant-...
Environment=JWT_SECRET=...
EnvironmentFile=/opt/{서비스명}/{서비스명}.env
ExecStart=/usr/bin/java -jar /opt/{서비스명}/{서비스명}.jar --spring.profiles.active=prod

ANTHROPIC_API_KEY 환경변수는 반드시 추가해야 한다.


프로파일 활성화

# 로컬 실행 시
./gradlew bootRun --args='--spring.profiles.active=local'

# EC2 실행 시
java -jar {서비스명}.jar --spring.profiles.active=prod

# systemd service 파일
ExecStart=/usr/bin/java -jar /opt/{서비스명}/{서비스명}.jar --spring.profiles.active=prod

.gitignore 필수 항목

# 민감 정보 파일
.env
.env.*
application-prod.yml
application-local.yml
*.env
*.pem
*.key

신규 환경변수 추가 체크리스트

  • [ ] application.yml${ENV_VAR} 형식으로 참조 추가
  • [ ] .env.example에 키 추가 (값 없이) 후 git 커밋
  • [ ] EC2 서버 환경변수 또는 AWS Secrets Manager에 실제 값 추가
  • [ ] systemctl restart {서비스명} 로 서비스 재시작
  • [ ] 팀원에게 .env.example 업데이트 공지