개발 가이드 설정 (Setup) 환경 변수 설정
최종 수정:

환경 변수 설정

application.yml 및 EC2 환경변수 관리 규칙

환경 변수 설정

기본 원칙

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


application.yml 구조

spring:
  application:
    name: agent

  datasource:
    url: jdbc:mysql://${DB_HOST}:3306/scraping?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

  jpa:
    hibernate:
      ddl-auto: ${DDL_AUTO:validate}   # 운영: validate, 개발: update
    show-sql: ${SHOW_SQL:false}

  mail:
    host: smtp.naver.com
    port: 587
    username: ${NAVER_USERNAME}
    password: ${NAVER_PASSWORD}

  ai:
    anthropic:
      api-key: ${ANTHROPIC_API_KEY}
      chat:
        options:
          model: claude-sonnet-4-6
          max-tokens: 4096

slack:
  webhook-url: ${SLACK_WEBHOOK_URL}

app:
  api:
    url: ${API_URL:http://localhost:8080}
  version: ${APP_VERSION:1.0.0}

환경변수 접두사 규칙

접두사용도예시
DB_데이터베이스 접속 정보DB_HOST, DB_USERNAME, DB_PASSWORD
ANTHROPIC_Claude AI APIANTHROPIC_API_KEY
SLACK_Slack 알림 연동SLACK_WEBHOOK_URL
NAVER_네이버 메일 SMTPNAVER_USERNAME, NAVER_PASSWORD
APP_애플리케이션 공통APP_VERSION, APP_API_URL

기본값 설정 규칙

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

환경별 프로파일 분리

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

application-local.yml 예시

로컬 개발 시 실제 RDS 없이 H2 인메모리 DB 사용:

spring:
  datasource:
    url: jdbc:h2:mem:testdb;MODE=MySQL
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
  h2:
    console:
      enabled: true

application-prod.yml 예시

spring:
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: false
  datasource:
    url: jdbc:mysql://scrapinng-db.cb4ccem8gbzh.ap-northeast-2.rds.amazonaws.com:3306/scraping?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8&allowPublicKeyRetrieval=true

프로파일 활성화

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

# EC2 실행 시
java -jar agent.jar --spring.profiles.active=prod

# systemd service 파일
ExecStart=/usr/bin/java -jar /opt/agent/agent.jar --spring.profiles.active=prod

EC2 환경변수 관리

agent.env 파일 (EC2 서버)

# /opt/agent/agent.env
DB_HOST=scrapinng-db.cb4ccem8gbzh.ap-northeast-2.rds.amazonaws.com
DB_USERNAME=admin
DB_PASSWORD=...
NAVER_USERNAME=...
NAVER_PASSWORD=...
ANTHROPIC_API_KEY=sk-ant-...
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
DIGEST_MAIL_TO=...
DIGEST_MAIL_FROM=...
API_URL=http://3.37.75.226:8080
APP_VERSION=1.0.0

systemd service에 env 파일 연결

[Service]
EnvironmentFile=/opt/agent/agent.env
ExecStart=/usr/bin/java -jar /opt/agent/scraping/build/libs/agent-0.0.1-SNAPSHOT.jar \
  --spring.profiles.active=prod

.env.example 파일

팀원 온보딩을 위해 항상 최신 상태로 유지한다:

# .env.example (git 커밋 대상)
DB_HOST=localhost
DB_USERNAME=root
DB_PASSWORD=your_password_here
NAVER_USERNAME=your_naver_id@naver.com
NAVER_PASSWORD=your_naver_app_password
ANTHROPIC_API_KEY=sk-ant-your-key-here
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/your/webhook/url
DIGEST_MAIL_TO=recipient@example.com
DIGEST_MAIL_FROM=sender@naver.com
API_URL=http://localhost:8080
APP_VERSION=1.0.0

.gitignore 필수 항목

# 민감 정보 파일
.env
.env.*
application-prod.yml
agent.env

# IDE
.idea/
*.iml

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

  • [ ] application.yml${ENV_VAR} 형식으로 참조 추가
  • [ ] EC2 서버의 /opt/agent/agent.env에 실제 값 추가
  • [ ] sudo systemctl restart agent 로 서비스 재시작 (환경변수 반영)
  • [ ] .env.example 파일에 빈 값으로 항목 추가
  • [ ] 팀원에게 .env.example 업데이트 공지
AI 문서 검색

현재 페이지 내용을 기반으로 질문하세요.