๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TIL/๐ŸŒฟ SPRING

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•ด๋ณด์ž : Springboot 3 (์šด์˜, ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ)

 

์™œ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

  • ์ฝ”๋“œ ์ถฉ๋Œ ๋ฐ ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐฉ์ง€: ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์‹œ์— ์ž‘์—…ํ•˜๋ฉด ์ฝ”๋“œ ์ถฉ๋Œ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ๊ณผ์ •์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์šด์˜ ํ™˜๊ฒฝ์ด ๋™์ผํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ๊ณผ์ •์ด ๋ณต์žกํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ถฉ๋ถ„ํžˆ ๊ฒ€์ฆํ•œ ํ›„ ์šด์˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์šด์˜ ํ™˜๊ฒฝ๊ณผ ๋™์ผํ•œ ์„ค์ •์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์šด์˜ ํ™˜๊ฒฝ์ด ๋™์ผํ•œ ์„ค์ •์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด, ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

 

 

 

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

 

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ ๋ฐฉ๋ฒ•:

  • application.yml ํŒŒ์ผ ๋ถ„๋ฆฌ
    • ์šด์˜ ํ™˜๊ฒฝ (application-prod.yml)
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (application-dev.yml)
    • ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ (application-local.yml)
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™œ์šฉ (application-secret.yml)
    • ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜

 

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ:

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ ํ™˜๊ฒฝ๋ณ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ์ •๋ณด ๋ฐ DDL ์„ค์ • (์˜ˆ: create, update, none)์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

 


 

 

application.yml

์—ฌ๊ธฐ์„œ๋Š” ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•œ ๊ณณ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์ผ ์ฝ”๋“œ๋ฅผ ์ ๋Š”๋‹ค.

๊ฐ๊ฐ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ddl-auto๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค.

server:
  port: 8080

spring:
  profiles:
    active: dev // ๋™์ž‘ํ•  ํŒŒ์ผ
    include: secret // ์ „์ฒด profiles์— ์ถ”๊ฐ€ํ•  ํŒŒ์ผ (์—ฌ๊ธฐ์„œ๋Š” application-secret.yml)

 

spring.profiles.active์—์„œ ํ™œ์„ฑํ™”ํ•  ํ”„๋กœํŒŒ์ผ์„ ์ง€์ •ํ•œ๋‹ค.

 

 

 

application-local.yml

spring:
  config:
    activate:
      on-profile: local
  datasource:
    driver-class-name: '${custom_local.db.driver-class-name}'
    url: '${custom_local.db.url}'
    username: '${custom_local.db.username}'
    password: '${custom_local.db.password}'
  jpa:
    hibernate:
      ddl-auto: create

๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋Œ์•„๊ฐˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์„ค์ •์„ ์ž‘์„ฑํ•œ๋‹ค.

 

 

application-dev.yml

spring:
  config:
    activate:
      on-profile: dev
  datasource:
    driver-class-name: '${custom_dev.db.driver-class-name}'
    url: '${custom_dev.db.url}'
    username: '${custom_dev.db.username}'
    password: '${custom_dev.db.password}'
  jpa:
    hibernate:
      ddl-auto: create // ์•ˆ์ •ํ™” ์ดํ›„ update๋กœ ๋ณ€๊ฒฝ ํ•„์š”

 

 

application-prod.yml

spring:
  config:
    activate:
      on-profile: prod
  datasource:
    driver-class-name: '${custom_prod.db.driver-class-name}'
    url: '${custom_prod.db.url}'
    username: '${custom_prod.db.username}'
    password: '${custom_prod.db.password}'
  jpa:
    hibernate:
      ddl-auto: none