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

Spring

Spring์—์„œ profile๋กœ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ์ ์šฉ(yml ํŒŒ์ผ)

profile๋กœ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ์ ์šฉ

yml ํŒŒ์ผ์— profile๋กœ local, dev ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ ๋”ฐ๋กœ ์ ์šฉํ•ด๋ณด์ž.

applicatio.yml

#...
server:
  port: 5000
  servlet:
    context-path: /
    encoding:
      charset: UTF-8
      enabled: true
      force: true

spring:
  profiles: # profiles ์„ค์ •
    active: local # ๋‹ค๋ฅธ ์„ค์ •์ด ์—†์„ ๋•Œ default ํ™˜๊ฒฝ ๊ฐ’
  devtools:
    livereload:
      enabled: true
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    show-sql: true
#...
# application.yml์—” ๊ณตํ†ต์œผ๋กœ ์ ์šฉํ•  ์„ค์ •์„ ์ ๋Š”๋‹ค.

spirng.profiles.active์—๋Š” ๋”ฐ๋กœ ์ง€์ •ํ•ด๋‘” ์„ค์ •์ด ์—†์„ ๋•Œ default ๊ฐ’์„ ์ ์–ด๋‘”๋‹ค.

์œ„์˜ ์†Œ์Šค์—์„  ๋‹ค๋ฅธ ์„ค์ •์ด ์—†์„ ์‹œ local๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ ๋œ๋‹ค.

application-dev.yml, applicatio-local.yml

ํ”„๋กœ์ ํŠธ์˜ src/main/resources์˜ ํ•˜๋‹จ์— ์žˆ๋Š” application.yml๊ณผ ๋™์ผํ•œ ์œ„์น˜์— ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ํ™˜๊ฒฝ ํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ค€๋‹ค.

application-{ํ™˜๊ฒฝ๋ช…}.yml

application-dev.yml

spring:
  jpa:
    hibernate:
      ddl-auto: update #create update none
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: {db url}
    username: {db username}
    password: {db password}
  mail:
    host: smtp.gmail.com
    port: 587
    username: {smtp mail service username}
    password: {smtp mail service password}
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

local๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ•  ์„ค์ •๋“ค์„ application-dev.yml์— ์„ธํŒ…ํ•œ๋‹ค.

ddl-auto ๋ฐฉ์‹์ด๋‚˜ local ๊ณผ๋Š” ๋‹ค๋ฅธ db ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐํฌ ์‹œ์—๋งŒ ์‚ฌ์šฉํ•  mail ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

application-local.yml

spring:
  jpa:
    hibernate:
      ddl-auto: create #create update none
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: {db url}
    username: {db username}
    password: {db password}

local ๊ฐ™์€ ๊ฒฝ์šฐ์—” ๋ฐฐํฌํ•  ๋•Œ์™€ ๋‹ค๋ฅธ db๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ddl-auto ๋ฐฉ์‹๋„ create, mail ๊ธฐ๋Šฅ์„ ์•ˆ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•˜์˜€๋‹ค.

ConsoleMailSender.java

@Profile("local")
@Slf4j
@Component
public class ConsoleMailSender implements JavaMailSender {

 // ...

}

๋กœ์ปฌ์—์„œ๋Š” ์ง์ ‘ ๋ฉ”์ผ์„ ์ „์†กํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ„์™€ ๊ฐ™์ด JavaMailSender์„ implements ํ•œ ํด๋ž˜์Šค๋กœ ๋กœ๊น… ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

์ด ๋•Œ ํ•ด๋‹น ํด๋ž˜์Šค๋Š” local์—์„œ๋งŒ ์“ฐ์ด๋ฏ€๋กœ @Profile("local") ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

๋นŒ๋“œ

IntelliJ


IntelliJ IDE๋ฅผ ์ด์šฉํ•  ์‹œ์—” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์šฐ์ธก์ƒ๋‹จ์—์„œ Edit Configurations๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

์ค‘๊ฐ„์— ์žˆ๋Š” Active Profiles์— ์›ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๊ณต๋ž€์œผ๋กœ ๋‘˜ ์‹œ์—๋Š” application.yml์— ์žˆ๋Š” default ๊ฐ’์œผ๋กœ ์„ค์ •๋œ๋‹ค.

์„œ๋ฒ„๋กœ ๋ฐฐํฌ ์‹œ

์„œ๋ฒ„์—์„œ๋Š” -Dspring.profiles.active ์˜ต์…˜์„ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.

$ java -jar -Dspring.profiles.active={์ง€์ •ํ•  ํ™˜๊ฒฝ} api-0.0.1-SNAPSHOT.jar

์œ„์— ์ง€์ •ํ•  ํ™˜๊ฒฝ์— ์›ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐํฌ๋œ๋‹ค.