๐ก YAML ํ์ผ์ด๋?
์ํค ์ฐธ์กฐ
YAML์ XML, C, ํ์ด์ฌ, ํ, RFC2822์์ ์ ์๋ e-mail ์์์์ ๊ฐ๋ ์ ์ป์ด ๋ง๋ค์ด์ง '์ฌ๋์ด ์ฝ๊ฒ ์ฝ์ ์ ์๋' ๋ฐ์ดํฐ ์ง๋ ฌํ ์์์ด๋ค. 2001๋ ์ ํด๋ผํฌ ์๋ฐ์ค๊ฐ ๊ณ ์ํ๊ณ , Ingy dot Net ๋ฐ Oren Ben-Kiki์ ํจ๊ป ๋์์ธํ๋ค.
YAML์ด๋ผ๋ ์ด๋ฆ์ "YAML์ ๋งํฌ์ ์ธ์ด๊ฐ ์๋๋ค (YAML Ain't Markup Language)” ๋ผ๋ ์ฌ๊ท์ ์ธ ์ด๋ฆ์์ ์ ๋๋์๋ค. ์๋ YAML์ ๋ป์ “๋ ๋ค๋ฅธ ๋งํฌ์ ์ธ์ด (Yet Another Markup Language)”์์ผ๋, YAML์ ํต์ฌ์ ๋ฌธ์ ๋งํฌ์ ์ด ์๋ ๋ฐ์ดํฐ ์ค์ฌ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด๋ฆ์ ๋ฐ๊พธ์๋ค. ์ค๋๋ XML๊ณผ JSON์ด ๋ฐ์ดํฐ ์ง๋ ฌํ์ ์ฃผ๋ก ์ฐ์ด๊ธฐ ์์ํ๋ฉด์, ๋ง์ ์ฌ๋๋ค์ด YAML์ '๊ฐ๋ฒผ์ด ๋งํฌ์ ์ธ์ด'๋ก ์ฌ์ฉํ๋ ค ํ๊ณ ์๋ค.
- ์ฌ๋์ด ์ฝ๊ฒ ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ์์
- ๋งํฌ์ ์ธ์ด๊ฐ ์๋์ ์งํฅํ ์ธ์ด
- ๋ค๋ฅธ ์ธ์ด๋ณด๋ค ์๋์ ์ผ๋ก ๋ฌธ๋ฒ์ ์ดํดํ๊ธฐ ์ฝ๊ณ , ๊ฐ๋ ์ฑ์ด ์ข์ผ๋ฉฐ, ๊ณ ๊ธ ์ปดํจํฐ์ ์ ํฉ
- XML๊ณผ ๊ฑฐ์ ๋น์ทํ ์ธ์ด
โ๏ธ ํ์ ๋น๊ต (properties vs yml)
โ๏ธ application.properties
server.port : 8080
โ๏ธ application.yml
server:
port: 8080
๐ application.yml ๋งคํ ํ๊ธฐ
๋งคํ ๋ฐฉ์์ ๊ธฐ์กด์ ์กด์ฌํ๋ application.properties์ ๋์ผํ๋ค.
@Value์ @ConfigurationProperties์ ์ฌ์ฉํด ๋งคํ์ ํ ์ ์๋ค.
์ด๋ @Value๋ ๋ฉํ๋ฐ์ดํฐ ์ง์๊ณผ ์ ์ฐํ ๋ฐ์ธ๋ฉ์ด ๋ถ๊ฐ๋ฅํ ๋ฐ๋ฉด
@ConfigurationProperties๋ ๊ฐ๋ฅํด ์ด ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฝ๊ฒ ๋งคํ์ ํด๋ณผ ์ ์๋ค.
๊ฐ์ฅ ๋ฌด๋ํ List, Map ์๋ฃ๊ตฌ์กฐ๋ก ๋งคํ
1. application.yml์ fruit๋ฅผ ํค ๊ฐ์ผ๋ก ํ๋ ๋ฆฌ์คํธํ์ ํ ์คํธ ๋ฐ์ดํฐ ์ ์ฅ
fruit:
list:
- name : banana
color : yellow
- name : apple
color : red
- name : water melon
color : green
2. @ConfigurationProperties์ fruit ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉ
@Data
@Component
@ConfigurationProperties("fruit")
public class FruitProperty {
private List<Fruit> list;
}
@Data : Lombok์ด ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก, Getter, Setter ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑ์์ผ ์ค๋ค.
@Component : @ConfigurationProperties๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ฅผ ์ ์ธํด์ค์ผ ์์กด์ฑ ์ฃผ์ ์ด ๊ฐ๋ฅํ๋ค.
3. Test๋ฅผ ํด๋ณด์
@RunWith(SpringRunner.class)
@SpringBootTest
class DemoApplicationTests {
@Autowired
FruitProperty fruitProperty;
@Test
public void test() {
List<Fruit> fruitData = fruitProperty.getList();
assertThat(fruitData.get(0).getName(), is("banana"));
}
}
@Autowired : ์ฐธ๊ณ -> https://withseungryu.tistory.com/65
๐ ๊ฒฐ๊ณผ
ํ ์คํธ ์ฑ๊ณต ํ์์ ๋ณผ ์ ์๋ค.
๐ @ConfigurationProperties - ์ ์ฐํ ๋ฐ์ธ๋ฉ
ํ๋กํผํฐ ๊ฐ์ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉํ ๊ฒฝ์ฐ์ Camel Case๋ก ์ ์ธํ์ฌ๋, ํ๋กํผํฐ์ ํค๋ ๋ค์ํ ํ์(๋ํ, ์ผ๋ฐฅ, ์ธ๋๋ฐ)์ผ๋ก ์ ์ธํ ์ ์๋ค.
(์์)
public class FruitProperties{
private String colorName;
}
fruit.colorname ( x )fruit.color-name ( ์ผ๋ฐฅ )fruit.color_name ( ์ธ๋, ์ค๋ค์ดํฌ )fruit.colorName ( ๋ํ, ์นด๋ฉ )