์™ธ๋ถ€ ๊ตฌ์„ฑ (External Configuration)

๐Ÿ” ๊ฐœ์š”

  • ์„ค์ •์€ ์ฝ”๋“œ ๋ฐ–์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. โ†’ ํ™˜๊ฒฝ(DEV/PROD)ยทSecret ํ‚ค ๋ถ„๋ฆฌ, ๋ฌด์ค‘๋‹จ ๋ณ€๊ฒฝ
  • Spring Boot๋Š” ๋‹ค์–‘ํ•œ ์†Œ์Šค(CLI ์ธ์ž, ํ™˜๊ฒฝ๋ณ€์ˆ˜, ํŒŒ์ผ ๋“ฑ)๋ฅผ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๋ณ‘ํ•ฉํ•˜๊ณ , @Value/@ConfigurationProperties๋กœ ์ฃผ์ž…ํ•œ๋‹ค.
  • ๋‹จ์ผ ๊ฐ’์€ @Value, ์—ฌ๋Ÿฌ ๊ฐ’/๊ทธ๋ฃน์€ @ConfigurationProperties๋ฅผ ๊ถŒ์žฅ.

๐Ÿ“„ ๋Œ€ํ‘œ ๊ตฌ์„ฑ ํŒŒ์ผ

  • application.properties / application.yml (ํด๋ž˜์ŠคํŒจ์Šค ๋ฃจํŠธ ๋˜๋Š” /config ํด๋”)
  • ํ”„๋กœํ•„๋ณ„: application-dev.yml, application-prod.yml ๋“ฑ
# application.yml
server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: app

๐Ÿ“Œ ์„ค์ • ์šฐ์„ ์ˆœ์œ„ (Spring Boot ๊ธฐ์ค€)

  1. Command line arguments (--server.port=9000)
  2. OS ํ™˜๊ฒฝ๋ณ€์ˆ˜ / SPRING_APPLICATION_JSON
  3. application-{profile}.yml (์™ธ๋ถ€ /config โ†’ ํด๋ž˜์ŠคํŒจ์Šค)
  4. application.yml (์™ธ๋ถ€ /config โ†’ ํด๋ž˜์ŠคํŒจ์Šค)
  5. @PropertySource, @ConfigurationProperties

์™ธ๋ถ€ /config ํด๋”๊ฐ€ ํด๋ž˜์ŠคํŒจ์Šค๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.


๐Ÿงฐ ์ ์šฉ ๋ฐฉ์‹

(A) ๋‹จ์ผ ๊ฐ’ : @Value

@Value("${spring.datasource.url}")
private String dbUrl;

(B) ๋ฌถ์Œ ๋ฐ”์ธ๋”ฉ : @ConfigurationProperties (๊ถŒ์žฅ)

// application.yml
app:
  storage:
    endpoint: https://s3.example.com
    bucket: media
@ConfigurationProperties(prefix = "app.storage")
public class StorageProps {
  private String endpoint;
  private String bucket;
  // getters/setters
}

โœ… ์ด ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฌถ์–ด์„œ ์ฃผ์ž…ํ•  ๋•Œ ์œ ์šฉ


๐ŸŒ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •

# application.properties
spring.profiles.active=dev
# application-dev.yml
logging:
  level:
    root: DEBUG
# application-prod.yml
logging:
  level:
    root: INFO

๋Ÿฐํƒ€์ž„์— --spring.profiles.active=prod ๋กœ๋„ ์ „ํ™˜ ๊ฐ€๋Šฅ. ํŠน์ • ๋นˆ์„ ํ™˜๊ฒฝ๋ณ„๋กœ ๋ฐ”๊พธ๋ ค๋ฉด @Profile("dev|prod") ์‚ฌ์šฉ.


๐Ÿ”— ๊ด€๋ จ

  • auto-configuration - ์กฐ๊ฑด(@Conditional*)๊ณผ ์†์„ฑ์œผ๋กœ ๊ธฐ๋ณธ ๋นˆ ์ž๋™ ๋“ฑ๋ก
  • DI - ๊ตฌ์„ฑ๋œ ๊ฐ’์„ ๋นˆ์œผ๋กœ ์ฃผ์ž…ํ•ด ๊ฒฐํ•ฉ๋„ โ†“
  • IoC - ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ/์ฃผ์ž…/์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ฐ˜ ์›๋ฆฌ