Home > CS > 2024 > πŸ’Ύ [CS] ymlμ΄λž€?

πŸ’Ύ [CS] ymlμ΄λž€?
CS

πŸ’Ύ [CS] ymlμ΄λž€?

YML(λ˜λŠ” YAML, YAML Ani’t Markup Language) 은 μ‚¬λžŒμ΄ 읽기 μ‰¬μš΄ 데이터 직렬화 ν˜•μ‹μž…λ‹ˆλ‹€.

주둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성(configuration) νŒŒμΌμ„ μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

YAML은 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ κ°„λ‹¨ν•˜κ³  가독성 높은 포맷으둜, Python의 λ“€μ—¬μ“°κΈ° 방식과 μœ μ‚¬ν•œ 계측적 ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

JSONκ³Ό μœ μ‚¬ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λ©΄μ„œλ„ 더 κ°„κ²°ν•˜κ³  인간이 읽고 μ“°κΈ° μ‰¬μš΄ 문법을 μ‚¬μš©ν•©λ‹ˆλ‹€.

1️⃣ YAML의 μ£Όμš” νŠΉμ§•.

1. κ°„κ²°ν•œ 문법.

  • YAML은 κ°„κ²°ν•œ 문법을 μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.
  • ꡬ뢄 기호둜 주둜 콜둠(:), ν•˜μ΄ν”ˆ(-) λ“± 을 μ‚¬μš©ν•˜κ³ , λ“€μ—¬μ“°κΈ°λ₯Ό 톡해 계측 ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ΄λŸ¬ν•œ κ°„λ‹¨ν•œ κ΅¬μ‘°λŠ” μ‚¬λžŒκ³Ό 기계 λͺ¨λ‘ μ‰½κ²Œ 읽을 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

2. 계측적 데이터 ꡬ쑰.

  • YAML은 λ“€μ—¬μ“°κΈ°λ₯Ό 톡해 계측적 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.
  • μ΄λŠ” ν‚€-κ°’ 쌍, λͺ©λ‘, μ€‘μ²©λœ 데이터 ꡬ쑰λ₯Ό μ§κ΄€μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 데 μœ λ¦¬ν•©λ‹ˆλ‹€.

3. λ‹€μ–‘ν•œ 데이터 ν˜•μ‹ 지원.

  • YAML은 λ¬Έμžμ—΄, 숫자, λ°°μ—΄, 객체 λ“± λ‹€μ–‘ν•œ 데이터 νƒ€μž…μ„ μ§€μ›ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό μ§λ ¬ν™”ν•˜κ³  전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.

4. 주둜 μ„€μ • 파일둜 μ‚¬μš©.

  • YAML은 ꡬ성 νŒŒμΌμ„ μ •μ˜ν•˜λŠ” 데 자주 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, Docker, Ansible, Kubernetes, Spring Boot와 같은 도ꡬ듀을 섀정을 μ •μ˜ν•˜κΈ° μœ„ν•΄ YAML을 μ‚¬μš©ν•©λ‹ˆλ‹€.

5. 주석 지원.

  • YAML은 주석을 μ§€μ›ν•˜λ©°, 주석은 # 기호둜 μ‹œμž‘ν•©λ‹ˆλ‹€.
  • 주석은 μ„€λͺ…을 μΆ”κ°€ν•˜μ—¬ μ‚¬λžŒμ΄ 더 μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

2️⃣ YAML 문법 μ˜ˆμ‹œ

1. ν‚€-κ°’ 쌍(Key-Value Pairs)

name: Kobe
age: 30
email: kobe@example.com
  • 이 μ˜ˆμ‹œλŠ” ν‚€-κ°’ μŒμ„ μ •μ˜ν•˜λŠ” YAML의 κΈ°λ³Έ ν˜•νƒœμž…λ‹ˆλ‹€.
  • 각 ν‚€λŠ” 콜둠(:) 으둜 κ°’κ³Ό κ΅¬λΆ„λ˜λ©°, κ°„κ²°ν•˜κ²Œ ν‘œν˜„λ©λ‹ˆλ‹€.

2. 리슀트(List)

fruits:
 - Apple
 - Banan
 - Orange
  • ν•˜μ΄ν”ˆ(-) 을 μ‚¬μš©ν•˜μ—¬ 리슀트 ν•­λͺ©μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 이 λ¦¬μŠ€νŠΈλŠ” fruitsλΌλŠ” 킀에 μ—°κ²°λœ λ°°μ—΄μž…λ‹ˆλ‹€.

3. μ€‘μ²©λœ 데이터 ꡬ쑰(Nested Data)

person:
    name: Kobe
    age: 25
    contact:
        email: kobe@example.com
        phone: 123-4567-8910
  • YAMLμ—μ„œλŠ” λ“€μ—¬μ“°κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ 계측 ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • contactλŠ” person 객체 μ•ˆμ— ν¬ν•¨λœ μ€‘μ²©λœ κ°μ²΄μž…λ‹ˆλ‹€.

4. λ¦¬μŠ€νŠΈμ™€ ν‚€-κ°’ 쌍의 ν˜Όν•©

employees:
    - name: Minseong
      age: 30
      position: Developer
    - name: Naeun
      age: 25
      position: Designer
  • 이 μ˜ˆμ‹œμ—μ„œλŠ” 리슀트 μ•ˆμ— μ—¬λŸ¬ 객체가 ν¬ν•¨λœ ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 각 κ°μ²΄λŠ” name, age, positionκ³Ό 같은 ν‚€-κ°’ 쌍으둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

5. 주석.

# 이 νŒŒμΌμ€ μ„œλ²„ ꡬ성 νŒŒμΌμž…λ‹ˆλ‹€.
server:
    host: localhost
    port: 8080 # κΈ°λ³Έ ν¬νŠΈλŠ” 8080μž…λ‹ˆλ‹€.
  • # 을 μ‚¬μš©ν•΄ 주석을 μΆ”κ°€ν•  수 있으며, 주석은 νŒŒμΌμ— μ„€λͺ…을 μΆ”κ°€ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

3️⃣ YAML의 μ£Όμš” μ‚¬μš© 사둀

1. ꡬ성 파일(Configuration Files)

  • YAML은 주둜 ꡬ성 파일둜 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 섀정을 μ •μ˜ν•˜κ³ , ꡬ쑰적 데이터λ₯Ό κ°„λ‹¨ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, Spring Boot의 application.yml νŒŒμΌμ—μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •μ΄λ‚˜ μ„œλ²„ 섀정을 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. DevOps 도ꡬ

  • YAML은 Ansible, Docker Compose, Kubernetes와 같은 DevOps λ„κ΅¬μ˜ μ„€μ • 파일 ν˜•μ‹μœΌλ‘œ 널리 μ‚¬μš©λ©λ‹ˆλ‹€.
  • YMAL을 μ‚¬μš©ν•˜μ—¬ μ„œλ²„ μ„€μ •, μ»¨ν…Œμ΄λ„ˆ μ„€μ •, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포 μ „λž΅ 등을 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ: Docker Compos μ„€μ • 파일

version: '3'
services:
    web:
        image: nginx
        ports:
            - "8080:80"
        db:
            image: postgres
            enviroment:
                POSTGES_USER: user
                POSTGRES_PASSWORD: password

4️⃣ YAML의 μž₯점.

1. κ°„κ²°ν•˜κ³  읽기 쉬움.

  • YAML은 μ‚¬λžŒμ΄ 읽고 μ“°κΈ° μ‰½κ²Œ μ„€κ³„λœ 데이터 ν˜•μ‹μž…λ‹ˆλ‹€.
  • μ€‘μ²©λœ 데이터 ꡬ쑰λ₯Ό μ§κ΄€μ μœΌλ‘œ ν‘œν˜„ν•  수 μžˆμ–΄, JSON보닀 더 κ°„κ²°ν•˜κ²Œ 데이터λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

2. λ‹€μ–‘ν•œ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©.

  • YAML은 λ‹€μ–‘ν•œ μ‹œμŠ€ν…œκ³Ό λ„κ΅¬μ—μ„œ ꡬ성 파일둜 널리 μ‚¬μš©λ˜λ©°, 데이터 직렬화 포맷으둜 ν™œμš©λ©λ‹ˆλ‹€.

3. ꡬ쑰적 데이터 ν‘œν˜„.

  • YAML은 λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό 직관적이고 λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμ–΄, μ€‘μ²©λœ κ°μ²΄λ‚˜ 배열을 닀루기 μ ν•©ν•©λ‹ˆλ‹€.

4. 주석 지원.

  • 주석을 톡해 ꡬ성 νŒŒμΌμ— μ„€λͺ…을 μΆ”κ°€ν•  수 μžˆμ–΄ λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 더 μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.

5️⃣ YAML의 단점.

1. 곰백에 민감.

  • YAML은 λ“€μ—¬μ“°κΈ°κ°€ μ€‘μš”ν•œ 역할을 ν•˜κΈ° λ•Œλ¬Έμ—, 잘λͺ»λœ λ“€μ—¬μ“°κΈ°λ‚˜ 곡백으둜 인해 νŒŒμ‹± 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ •ν™•ν•œ 곡백과 λ“€μ—¬μ“°κΈ°λ₯Ό μœ μ§€ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

2. λŒ€μš©λŸ‰ 데이터 처리 λΉ„νš¨μœ¨μ„±.

  • YAML은 주둜 ꡬ성 파일과 같은 κ°„λ‹¨ν•œ 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λŠ” 데 μ ν•©ν•˜λ©°, λŒ€μš©λŸ‰ 데이터λ₯Ό 직렬화할 λ•ŒλŠ” JSONμ΄λ‚˜ λ‹€λ₯Έ 포맷보닀 νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

7️⃣ μš”μ•½.

  • YAML(YML) 은 κ°„κ²°ν•˜κ³  μ‚¬λžŒμ΄ 읽기 μ‰¬μš΄ 데이터 직렬화 포맷으둜, 주둜 ꡬ성 νŒŒμΌμ„ μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • λ“€μ—¬μ“°κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ 계측적 데이터λ₯Ό ν‘œν˜„ν•˜λ©°, μ—¬λŸ¬ DevOps 도ꡬ와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„€μ • νŒŒμΌμ—μ„œ 널리 ν™œμš©λ©λ‹ˆλ‹€.
  • YAML은 읽기 쉽고 주석을 μ§€μ›ν•˜λŠ” μž₯점이 μžˆμ§€λ§Œ, 듀여쓰기에 λ―Όκ°ν•˜κΈ° λ•Œλ¬Έμ— ꡬ문 였λ₯˜λ₯Ό μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • YAML은 λ‹¨μˆœν•˜κ³  λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό μ§κ΄€μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 데 μ ν•©ν•œ ν¬λ§·μž…λ‹ˆλ‹€.