skip to content
Q
Table of Contents

Spring Boot์—์„œ application.properties ํ”„๋กœํ•„ ๊ด€๋ฆฌ

Spring Boot์—์„œ๋Š” application.properties ํŒŒ์ผ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ์„ค์ •์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ•„(Profile)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” application.properties์™€ ํ”„๋กœํ•„์„ ํ™œ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณธ๋‹ค.

ํ”„๋กœํ•„ ๋‚˜๋ˆ„๊ธฐ์˜ ํ•„์š”์„ฑ๐Ÿค”

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

ํ”„๋กœํ•„์„ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค:

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

ํ”„๋กœํ•„ ์„ค์ • ๋ฐฉ๋ฒ• ๐Ÿ“‚

Spring Boot์—์„œ๋Š” application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์„ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์— ๊ฐ ํ”„๋กœํ•„์— ๋”ฐ๋ฅธ ์„ค์ • ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ์˜ˆ์ œ ๐Ÿ“„

๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ: application.properties

spring.application.name=learn-spring-boot
logging.level.org.springframework=debug
spring.profiles.active=dev
currency-service.url=https://qyinm.github.io
currency-service.username=qyinm
currency-service.key=defaultKey

๊ฐœ๋ฐœ ํ”„๋กœํ•„ ์„ค์ • ํŒŒ์ผ: application-dev.properties

spring.application.name=learn-spring-boot-dev
logging.level.org.springframework=trace
currency-service.url=https://dev.qyinm.github.io
currency-service.username=devUser
currency-service.key=devKey

๋ฐฐํฌ ํ”„๋กœํ•„ ์„ค์ • ํŒŒ์ผ: application-prod.properties

spring.application.name=learn-spring-boot-prod
logging.level.org.springframework=error
currency-service.url=https://prod.qyinm.github.io
currency-service.username=prodUser
currency-service.key=prodKey

์„ค๋ช… ๐Ÿ“

  • ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ (application.properties): ๋ชจ๋“  ํ”„๋กœํ•„์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •์„ ์ •์˜ํ•œ๋‹ค.
  • ํ”„๋กœํ•„๋ณ„ ์„ค์ • ํŒŒ์ผ (application-dev.properties, application-prod.properties): ํŠน์ • ํ”„๋กœํ•„์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์„ค์ •์„ ์ •์˜ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, dev ํ”„๋กœํ•„์—์„œ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๋Š” ์„ค์ •์„, prod ํ”„๋กœํ•„์—์„œ๋Š” ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋งž๋Š” ์„ค์ •์„ ์ •์˜ํ•œ๋‹ค.

ํ”„๋กœํ•„ ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ• ๐Ÿ”ง

Spring Boot์—์„œ๋Š” spring.profiles.active ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•  ํ”„๋กœํ•„์„ ์ง€์ •ํ•œ๋‹ค. ์ด ์†์„ฑ์€ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์— ์ •์˜ํ•˜๊ฑฐ๋‚˜, JVM ์˜ต์…˜์„ ํ†ตํ•ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐฉ๋ฒ• 1: ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์—์„œ ํ™œ์„ฑํ™”

spring.profiles.active=dev

๋ฐฉ๋ฒ• 2: JVM ์˜ต์…˜์„ ํ†ตํ•ด ํ™œ์„ฑํ™”

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ JVM ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ”„๋กœํ•„์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

Terminal window
java -jar -Dspring.profiles.active=prod learn-spring-boot.jar

๋ฐฉ๋ฒ• 3: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ™œ์„ฑํ™”

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ”„๋กœํ•„์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Terminal window
export SPRING_PROFILES_ACTIVE=prod

Component์—์„œ ๊ฐ’ ๊ฐ€์ ธ์™€ ์“ฐ๊ธฐ ๐Ÿ“

Spring Boot์—์„œ๋Š” @ConfigurationProperties ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ๋ณ„๋กœ ๋‹ค๋ฅธ ์„ค์ • ๊ฐ’์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ ์˜ˆ์ œ ๐Ÿ“„

CurrencyController.java

package com.hippoo.learnspringboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CurrencyController {
@Autowired
private CurrencyServiceConfiguration configuration;
@GetMapping("/currency-configuration")
public CurrencyServiceConfiguration retrieveCurrencyConfiguration() {
return configuration;
}
}

CurrencyServiceConfiguration.java

package com.hippoo.learnspringboot;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "currency-service")
@Component
public class CurrencyServiceConfiguration {
private String url;
private String username;
private String key;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}

์„ค์ • ํŒŒ์ผ ์˜ˆ์ œ ๐Ÿ“„

application.properties

spring.application.name=learn-spring-boot
logging.level.org.springframework=debug
spring.profiles.active=dev
currency-service.url=https://qyinm.github.io
currency-service.username=qyinm
currency-service.key=defaultKey

application-dev.properties

spring.application.name=learn-spring-boot-dev
logging.level.org.springframework=trace
currency-service.url=https://dev.qyinm.github.io
currency-service.username=devUser
currency-service.key=devKey

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด, ํ™œ์„ฑํ™”๋œ ํ”„๋กœํ•„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„ค์ • ๊ฐ’์ด CurrencyServiceConfiguration ์ปดํฌ๋„ŒํŠธ์— ์ฃผ์ž…๋œ๋‹ค.

ํ”„๋กœํ•„ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ โš ๏ธ

ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค์Œ ์‚ฌํ•ญ์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค:

  • ํ”„๋กœํ•„ ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™ ์ค€์ˆ˜: application-{profile}.properties ๋˜๋Š” application-{profile}.yml ํ˜•์‹์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.
  • ํ•„์ˆ˜ ํ”„๋กœํผํ‹ฐ ํ™•์ธ: ํŠน์ • ํ”„๋กœํ•„์—์„œ๋งŒ ํ•„์š”ํ•œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํ”„๋กœํ•„ ํŒŒ์ผ์— ๋ˆ„๋ฝ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ณด์•ˆ ์ •๋ณด ๊ด€๋ฆฌ: ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํ”„๋กœํ•„๋ณ„ ์„ค์ • ํŒŒ์ผ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋‚˜ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ํ”„๋กœํ•„ ํ˜ผ์šฉ ํ”ผํ•˜๊ธฐ: ํ•œ ํ™˜๊ฒฝ์— ์—ฌ๋Ÿฌ ํ”„๋กœํ•„์„ ๋™์‹œ์— ํ™œ์„ฑํ™”ํ•˜๋ฉด ์„ค์ • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋œ ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๊ฒฐ๋ก  ๐ŸŽฏ

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

ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ํ”„๋กœํ•„์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด๋ณด์ž. ์ด๋ฅผ ํ†ตํ•ด ๋”์šฑ ๊ฒฌ๊ณ ํ•˜๊ณ  ์œ ์—ฐํ•œ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ ๐Ÿ“š