๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ•Š๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค

SpringBoot Part1-4

by hyeon-z 2023. 6. 23.

 

1. Environment profile

 

ApplictionContext์—์„œ ์ œ๊ณตํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ

 

public interface ApplicationContext extends EnvironmentCapable, .. {}

 

ApplicationContext๋Š” EnvironmentCapable์„ ์ƒ์†ํ•˜๊ณ  ์žˆ๋‹ค.

 

๐Ÿค”IoC์ปจํ…Œ์ด๋„ˆ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์š”์ธ๋“ค์—๋Š” ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

DB์ ‘์†์ •๋ณด, Server Port ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค.

ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.

๊ฐœ๋ฐœ ์‹œ์—๋Š” H2 Database๊ฐ€ ์‚ฌ์šฉ๋˜๋„๋ก ๋นˆ์ด ๋“ฑ๋ก๋œ๋‹ค.
์‚ฌ์šฉํ•˜๋Š” DataSource์— Connection ๋Œ€์ƒ์ด H2 Database์ธ ๊ฒƒ์ด๋‹ค.

์šด์˜ ์ค‘์—๋Š” MySQL์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค.
=> DB๊ฐ€ ๋ฐ”๋€๋‹ค.
=> ํ™˜๊ฒฝ์ด ๋ฐ”๋€๋‹ค.

 

์Šคํ”„๋ง์˜ ํ™˜๊ฒฝ์€ Property์™€ Profile๋กœ ์ œ๊ณต๋œ๋‹ค.

Profile์— ๋”ฐ๋ผ์„œ ํ™˜๊ฒฝ์ด ๋ฐ”๋€Œ๊ณ  ๊ทธ์— ๋”ฐ๋ผ Property๊ฐ€ ๋ฐ”๋€๋‹ค.

=> ํ™˜๊ฒฝ์— ๋”ฐ๋ผ์„œ Profile๊ณผ Property๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •๋œ Environment Object๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

 

์Šคํ”„๋ง์—. properties์™€. yaml ํŒŒ์ผ, ๋‘ ๊ฐ€์ง€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Property๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

Property

 

key-value ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ๊ฐ์˜ ํ‚ค์™€ ๊ฐ’์€ ๋“ฑํ˜ธ(=)๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

 

PropertyํŒŒ์ผ์— ์„ค์ •ํ•œ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

 

1. ์„ค์ • ํŒŒ์ผ์— @PropertySource ์• ๋…ธํ…Œ์ด์…˜ ๋ถ™์ด๊ธฐ

@PropertySource("application.properties")
public class AppConfiguration {

}
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfiguration.class);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
Integer property = environment.getProperty("kdt.minimum-order-amount", Integer.class);

 

applicationContext์˜ getEnvironment(). getProperty()๋ฅผ ํ†ตํ•ด์„œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์•ž์—๋Š”. properties์—์„œ ์ง€์ •ํ•œ key ๊ฐ’์„ ์ž‘์„ฑํ•˜๊ณ  ํ•ด๋‹น ๊ฐ’์˜ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋’ค์— ์ ์–ด์ค€๋‹ค.

 

2. ํŠน์ • ํ•„๋“œ์— @Value ์• ๋…ธํ…Œ์ด์…˜ ๋ถ™์ด๊ธฐ

 

@Value ์• ๋…ธํ…Œ์ด์…˜์€ ์ฃผ์ž…ํ•  ๊ฐ’์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ‘† ๋ณ€์ˆ˜์— ์ง์ ‘ ์‚ฌ์šฉ

@Value("v1.1.1")
private String version;

"v1.1.1"์ด๋ผ๋Š” ๊ฐ’์„ version๋ณ€์ˆ˜์— ์ฃผ์ž…ํ•œ๋‹ค.

 

 ๐Ÿ‘†์Šคํ”„๋ง ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ

@Value("${kdt.version:v0.0.0}")
private String version;

kdt.version์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ version ๋ณ€์ˆ˜์— ์ฃผ์ž…ํ•œ๋‹ค. 

ํ”„๋กœํผํ‹ฐ ๊ฐ’์€ ์Šคํ”„๋ง์˜ Environment ๊ฐ์ฒด์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.

๋’ค์— ์ ์€ :v0.0.0์˜ ์˜๋ฏธ๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ ์ฃผ์ž…ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

Property Search Hierarchy

 

https://docs.spring.io/spring-framework/reference/core/beans/environment.html#beans-property-source-abstraction

4, 5๋ฒˆ์„ ๋ณด๋ฉด  JVM์˜ ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๊ณ  JVM ์‹œ์Šคํ…œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

=> ๋ฒˆํ˜ธ๊ฐ€ ๋†’์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Œ


2. YAML๋กœ ํ”„๋กœํผํ‹ฐ ์ž‘์„ฑ

 

YAML

 

๋“ค์—ฌ ์“ฐ๊ธฐ์™€ ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ฝœ๋ก (:)๊ณผ ๋Œ€์‹œ(-)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งต๊ณผ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

 

db:
  username: admin
  password: secretpassword
server:
  port: 8080

 

@ConfigurationProperties


์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ ์™ธ๋ถ€ ์†์„ฑ์„ ํ†ตํ•ด์„œ ๋ณ„๋„์˜ ๋นˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ @ConfigurationProperties ์• ๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค.

ํŠน์ • ๊ทธ๋ฃน์˜ ์†์„ฑ์„ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ๊ณ  ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


3. Profile

 

ํŠน์ • ํ™˜๊ฒฝ ๋˜๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

 

๊ฐ๊ฐ์˜ ํ”„๋กœํŒŒ์ผ์€ ํŠน์ •ํ•œ ์„ค์ • ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ํ•ด๋‹น ํ”„๋กœํŒŒ์ผ์ด ํ™œ์„ฑํ™”๋˜๋ฉด ํ•ด๋‹น ์„ค์ •์ด ์ ์šฉ๋œ๋‹ค.

Spring ํ”„๋กœํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ, ์šด์˜ ํ™˜๊ฒฝ ๋“ฑ์—์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฐฐํฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

Profile ์„ค์ • ๋ฐฉ๋ฒ•

 

1. application.properties ๋˜๋Š” application.yaml ํŒŒ์ผ์„ ์—ด์–ด์„œ spring.profiles.active ์†์„ฑ์„ ์„ค์ •ํ•œ๋‹ค.

spring.profiles.active=dev
...

 

+) application-dev.yaml, application-prod.yaml ํ˜•ํƒœ๋กœ ํŒŒ์ผ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๋ฉด ํ•ด๋‹น ํ”„๋กœํŒŒ์ผ์˜ ์„ค์ •์ด ์ ์šฉ๋œ๋‹ค.

 

2. @Profile ์• ๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

 

@Component
@Profile("dev")
public class MyComponent {}

ํด๋ž˜์Šค ๋ ˆ๋ฒจ ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ํ”„๋กœํŒŒ์ผ์ด ํ™œ์„ฑํ™”๋  ๋•Œ๋งŒ ํ•ด๋‹น ํด๋ž˜์Šค ๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

 

Intellij์—์„œ์˜ ๊ฐ„ํŽธํ•œ Profile ์„ค์ •

 

1. Run/Debug Configuration์˜ Spring Boot Application์„ค์ •์—์„œ Active profile์˜ ์นธ์— ์›ํ•˜๋Š” profile์„ ์ž…๋ ฅํ•œ๋‹ค.

 

2. Run/Debug Configuration์˜ Spring Boot Application์„ค์ •์—์„œ Profram arguments์˜ ์นธ์— ์›ํ•˜๋Š” profile์„ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

--spring.profiles.active=dev

4. Resource

 

์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค(์ด๋ฏธ์ง€ํŒŒ์ผ, ํ…์ŠคํŠธํŒŒ์ผ, ์•”๋ณตํ˜ธํ™”๋ฅผ ์œ„ํ•œ ํ‚คํŒŒ์ผ)๋ฅผ ์ฝ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค.

Resource์™€ ResourceLoader ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์ด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ๊ณตํ•œ๋‹ค.

 

Resource

 

์ธํ„ฐํŽ˜์ด์Šค๋Š” org.springframework.core.io ํŒจํ‚ค์ง€์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

๊ฐ ๊ตฌํ˜„์ฒด๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

 

๊ตฌํ˜„์ฒด ์ข…๋ฅ˜

https://docs.spring.io/spring-framework/reference/core/resources.html#resources-implementations

 

์˜ˆ์‹œ

 

Resource resource = applicationContext.getResource("classpath:application.yaml");
Resource resource1 = applicationContext.getResource("file:sample.txt");

'๐Ÿ•Š๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SpringBoot Part2-1  (0) 2023.06.27
SpringBoot Part1-5  (0) 2023.06.26
SpringBoot Part1-3  (0) 2023.06.22
SpringBoot Part1-2  (0) 2023.06.21
SpringBoot Part 1-1  (0) 2023.06.21

๋Œ“๊ธ€