2023. 5. 11. 13:40ใ์ธํ๋ฐ/์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ
0๏ธโฃ YAML ์ด๋?
์คํ๋ง์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ application.properties ๋ง๊ณ ๋ appliction.yml YAML ํ์ผ ํ์์ ์ง์ํ๋ค.
์ด๋ YAML ์ด๋ YAML Ain't Markup Language ์ ์ฝ์๋ก ํ์ฅ์๋ yaml, yml๋ก ์ฃผ๋ก yml ์ ์ฌ์ฉํ๋ค.
application.properties
my.datasource.url=local.db.com
my.datasource.username=username
my.datasource.password=password
my.datasource.etc.max-connection=1
my.datasource.etc.timeout=3500ms
my.datasource.etc.options=CACHE,ADMIN
application.yml
my:
datasource:
url: local.db.com
username: local_user
password: local_pw
etc:
max-connection: 1
timeout: 60s
options: LOCAL, CACHE
YAML์ application.properties๋ฅผ ๋น๊ตํด๋ณด๋ฉด application.properties๋ ํํ? ํ๊ฒ ๋์ด ์์ด์ ๊ตฌ์กฐ ํ์ ์ด ์ด๋ ต์ง๋ง YAML ์ ์ฌ๋์ด ์ฝ๊ธฐ ์ข๊ฒ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๊ทผ๋ฐ YAML ์ ์ฌ๋์ด ์ฝ๊ธฐ ์ข๊ฒ ๊ณ์ธต ๊ตฌ์กฐ ํํ๋ฅผ ๋๋๊ฑฐ์ง ์คํ๋ง์ด ์ค์ ์ฝ์ ๋๋ ํํํ๊ฒ ๋ง๋ค์ด์ ์ฝ๋๋ค.
YAML ์ space(๊ณต๋ฐฑ)์ผ๋ก ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ space๋ ๋ณดํต 2์นธ์ ์ฌ์ฉํ๊ณ ์ด๋ ์ผ๊ด์ฑ ์์ง ์๋ค๋ฉด ๊ตฌ์กฐ๊ฐ ๊นจ์ง ์๋ ์๋ค.
* ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ application.properties์ application.yml์ด ๋๊ฐ ๊ฐ์ด ์๋ค๋ฉด application.properties๊ฐ ์ฐ์ ๊ถ์ ๊ฐ์ง๋ค๊ณ ๋ ํ๋๋ฐ ๋ณดํต ์ค๋ฌด์์๋ properties๋ณด๋ค๋ yml ์ด ์ฝ๊ธฐ ํธํ๊ธฐ ๋๋ฌธ์ yml์ ์ฌ์ฉํ๋ค.
1๏ธโฃ ํ๋กํ ์ค์
YML ์์๋ properties์ ๊ฐ์ด ํ๋กํ์ ์ค์ ํ ์ ์๋ค.
my:
datasource:
url: local.db.com
username: local_user
password: local_pw
etc:
max-connection: 1
timeout: 60s
options: LOCAL, CACHE
---
spring:
config:
activate:
on-profile: dev
my:
datasource:
url: dev.db.com
username: dev_user
password: dev_pw
etc:
max-connection: 10
timeout: 60s
options: DEV, CACHE
---
spring:
config:
activate:
on-profile: prod
my:
datasource:
url: prod.db.com
username: prod_user
password: prod_pw
etc:
max-connection: 50
timeout: 10s
options: PROD, CACHE
yml ์์๋ ---- ์ ์ฌ์ฉํด ๋ ผ๋ฆฌ ํ์ผ์ ๊ตฌ๋ถํ๊ณ ,
spring.config.active.on-prifle ์ ์ฌ์ฉํด์ ํ๋กํ์ ์ ์ฉํ ์ ์๋ค.
2๏ธโฃ @Profile
application.yml ์ ํ๋กํ์ ์ค์ ํด์ ํ๋กํ์ ๋ฐ๋ผ ๊ฐ ํ๊ฒฝ์ ๋ง๋ ์ค์ ๊ฐ์ ์ง์ ํ ์ ์๋๋ก ํ๋๋ฐ
๋ง์ฝ ์ค์ ๊ฐ ๋ฟ๋ง ์๋๋ผ ๊ฐ ํ๊ฒฝ๋ง๋ค ์๋ก ๋ค๋ฅธ ๋น์ ๋ฑ๋กํด์ผ ํ๋ค๋ฉด ? ์ด๋ป๊ฒ ํด์ผํ ๊น ?
์๋ก ๊ฒฐ์ ๊ธฐ๋ฅ์ธ๋ฐ ์ด์ ํ๊ฒฝ์์๋ ์ค์ ๊ฒฐ์ ๊ฐ ๋์ผ ํ๋๊ฒ ๋ง์ง๋ง ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ํ ์คํธํ๋๋ฐ ์ค์ ๊ฒฐ์ ๊ฐ ๋๋ฉด ์๋๋ค.
์ด๋ด ๋ ์ด์ ํ๊ฒฝ์์๋ ์ค์ ๊ฒฐ์ ๊ฐ ๋๋ ๋น์ ๋ฑ๋กํ๊ณ , ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๊ฐ์ง ๊ฒฐ์ ๊ธฐ๋ฅ์ ๋น์ ๋ฑ๋กํ๋๋ก ํด์ผ ํ๋ค.
PayClient
public interface PayClient
{
void pay(int money);
}
LocalPayClient
@Slf4j
public class LocalPayClient implements PayClient
{
@Override
public void pay(int money)
{
log.info("๋ก์ปฌ ๊ฒฐ์ money = {} ", money);
}
}
ProdPayClient
@Slf4j
public class ProdPayClient implements PayClient
{
@Override
public void pay(int money)
{
log.info("์ด์ ๊ฒฐ์ money = {} ", money);
}
}
OrderService
@Service
@RequiredArgsConstructor
public class OrderService
{
private final PayClient payClient;
public void order(int money)
{
payClient.pay(money);
}
}
OrderService๋ PayClient๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ผ๋ก ์ํฉ์ ๋ฐ๋ผ LocalPayClient ๋๋ ProdPayClient๋ฅผ ์ฃผ์ ๋ฐ๋๋ก ํ๋ค.
PayConfig
@Slf4j
@Configuration
public class PayConfig
{
@Bean
@Profile("default")
public LocalPayClient localPayClient()
{
log.info("LocalPayClient ๋น ๋ฑ๋ก");
return new LocalPayClient();
}
@Bean
@Profile("prod")
public ProdPayClient prodPayClient()
{
log.info("ProdPayClient ๋น ๋ฑ๋ก");
return new ProdPayClient();
}
}
@Profile ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ ๊ฐ ํด๋นํ๋ ํ๋กํ์ด ํ์ฑํ๋๋ ๊ฒฝ์ฐ์๋ง ๋น์ ๋ฑ๋กํ๋๋ก ํ๋ค.
default ํ๋กํ์ด ํ์ฑํ ๋๋ฉด LocalPayClient ๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ,
prod ํ๋กํ์ด ํ์ฑํ ๋๋ฉด ProdPayClient ์ ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
OrderRunner
@Component
@RequiredArgsConstructor
public class OrderRunner implements ApplicationRunner
{
private final OrderService orderService;
@Override
public void run(ApplicationArguments args) throws Exception
{
orderService.order(1000);
}
}
ApplicationRunner ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ๋ง์ ์ด์ ๋น ์ด๊ธฐํ๋ฅผ ๋๋ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๋ฉ์ด ์๋ฃ๋๋ ์์ ์ run ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
@Profile prod ์ธ ๊ฒฝ์ฐ
prod๋ก ํ๋กํ ์ ์ฉํ์ ๋๋ ProdPayClient ๊ฐ ๋น์ผ๋ก ๋ฑ๋ก๋๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
๐ @Profile ์ ์ฌ์ฉํ๋ฉด ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํด๋น ๋น์ ๋ฑ๋กํ ์ง ๋ง์ง ์ ํํ๋ค.
@Profile ์ ์ฌ์ฉํ๋ฉด ๊ฐ ํ๊ฒฝ ๋ณ๋ก ์ธ๋ถ ์ค์ ๊ฐ์ ๋ถ๋ฆฌ๋ฅผ ํฌํจํด์ ์คํ๋ง ๋น๋ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ์ ์๋ค.
'์ธํ๋ฐ > ์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง Actuator Endpoint (health, info, logger, httpexchanges) (0) | 2023.05.15 |
---|---|
์คํ๋ง๋ถํธ Actuator (0) | 2023.05.15 |
์คํ๋ง ์ธ๋ถ ์ค์ ์ฌ์ฉ ๋ฐฉ๋ฒ (Environment) (0) | 2023.05.11 |
์คํ๋ง ์ธ๋ถ ์ค์ ๋ฐฉ๋ฒ (์ค์ ํ์ผ ์ฐ์ ์์) (0) | 2023.05.10 |
์คํ๋ง ์ธ๋ถ ์ค์ ๋ฐฉ๋ฒ (์ธ๋ถ ๋ฐ์ดํฐ) (0) | 2023.05.09 |