java
CHAPTER 87 / 99
읽기 약 2분
FUNCTION
프로파일 관리: application.yml
핵심 개념
spring.profiles·환경별 설정·@ConfigurationProperties·시크릿 관리 — 3단계 배포 환경.
본문
환경별 yml 분리
src/main/resources/
├── application.yml # 공통
├── application-dev.yml # 개발
├── application-staging.yml # 스테이징
├── application-prod.yml # 프로덕션application.yml — 공통
spring:
application:
name: ohs-backend
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
server:
port: 8080
shutdown: graceful
management:
endpoints:
web:
exposure:
include: health,info,metricsapplication-dev.yml
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: DEBUGapplication-prod.yml
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
@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();
}
}# 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시크릿 관리
방법 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 테스트
@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