OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 87 / 99
java
CHAPTER 87 / 99
읽기 약 2
FUNCTION

프로파일 관리: application.yml


핵심 개념

spring.profiles·환경별 설정·@ConfigurationProperties·시크릿 관리 — 3단계 배포 환경.

본문

환경별 yml 분리

📋 코드 (5줄)
src/main/resources/
├── application.yml          # 공통
├── application-dev.yml      # 개발
├── application-staging.yml  # 스테이징
├── application-prod.yml     # 프로덕션

application.yml — 공통

YAML📋 코드 (15줄)
spring:
  application:
    name: ohs-backend
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:dev}

server:
  port: 8080
  shutdown: graceful

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics

application-dev.yml

YAML📋 코드 (13줄)
spring:
  datasource:
    url: jdbc:h2:mem:devdb
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true

logging:
  level:
    root: DEBUG
    org.springframework.web: DEBUG

application-prod.yml

YAML📋 코드 (21줄)
spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
    hikari:
      maximum-pool-size: 20
      connection-timeout: 30000
  jpa:
    hibernate:
      ddl-auto: validate  # 절대 자동 생성 금지
    show-sql: false

logging:
  level:
    root: INFO
  file:
    name: /var/log/app.log

server:
  forward-headers-strategy: native  # AWS ALB 뒤

@ConfigurationProperties

JAVA📋 코드 (35줄)
@ConfigurationProperties(prefix = "app")
@Validated
public record AppProperties(
    @NotBlank String name,
    @NotBlank String version,
    AwsConfig aws,
    JwtConfig jwt
) {
    public record AwsConfig(
        @NotBlank String region,
        @NotBlank String s3Bucket
    ) {}

    public record JwtConfig(
        @NotBlank String secret,
        @Min(60) long expireMinutes
    ) {}
}


@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig { }


// 사용
@Service
@RequiredArgsConstructor
public class S3Service {
    private final AppProperties properties;

    public String getBucket() {
        return properties.aws().s3Bucket();
    }
}
YAML📋 코드 (10줄)
# application.yml
app:
  name: OHS Backend
  version: 1.0.0
  aws:
    region: ap-northeast-2
    s3-bucket: ${S3_BUCKET}
  jwt:
    secret: ${JWT_SECRET}
    expire-minutes: 30

시크릿 관리

📋 코드 (20줄)
방법 1 — 환경변수 (단순)
export DB_PASSWORD=secret

방법 2 — .env 파일 (개발)
DB_PASSWORD=secret
# .gitignore에 추가

방법 3 — AWS Secrets Manager / Parameter Store
spring.config.import: aws-secretsmanager:my-app-secrets/
spring.cloud.aws.secretsmanager.region: ap-northeast-2

방법 4 — HashiCorp Vault
spring.config.import: vault://
spring.cloud.vault.host: vault.example.com
spring.cloud.vault.token: ${VAULT_TOKEN}

방법 5 — Kubernetes Secrets
envFrom:
  - secretRef:
      name: app-secrets

@ActiveProfiles 테스트

JAVA📋 코드 (5줄)
@SpringBootTest
@ActiveProfiles("test")
class UserServiceTest {
    // application-test.yml 적용
}

다음 챕터

CH.19 "모니터링: Actuator + Prometheus" — 서버 상태 추적.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 Spring 코드의 환경별 설정 부분을 분석해서
시크릿 관리·보안와 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

환경별 설정 vs 다른 패턴 비교를
실전 사례 5개로 보여주고 환경변수 vs Secrets Manager를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드베이스 전체를 분석해서
환경별 설정 관련 하드코딩된 시크릿 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 기업의 환경별 설정 채택률과
한국 IT 시크릿 관리 트렌드를 솔직히 알려줘.

⭐ 이것만 기억하세요
프로파일 관리: application.yml 이 3가지만 확실히 잡으세요
1.환경별 yml 분리 + 시크릿은 환경변수/Vault/AWS Secrets — 절대 코드에 하드코딩 X
2.@ConfigurationProperties + @Validated로 타입 안전한 설정 + 시작 시 검증
3.다음 챕터 CH.19에서 Actuator + Prometheus — 서버 상태 모니터링


공유하기
진행도 87 / 99