환경 변수 설정
기본 원칙
민감 정보는 절대 코드에 하드코딩하지 않는다. 모든 환경별 설정은 환경변수 또는 프로파일 파일로 분리한다.
환경변수 네이밍 규칙
환경변수는 아래 접두사 규칙을 따른다:
| 접두사 | 대상 |
|---|---|
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업데이트 공지