Python

[Python] YAML

웹개발자(진) 2024. 3. 23. 22:30
반응형
잡답

 

토요일엔 실무자분이 오셔서 수업을 해주시는데 python에서 YAML를 종종 사용한다고 합니다. JASON보다 읽고 쓰기 쉽다고 하시네요. 배울 게 점점 많아집니다~


YAML

 

YAML(YAML Ain't Markup Language)은 데이터 직렬화 양식 중 하나로, 사람이 쉽게 읽고 쓸 수 있으며 컴퓨터가 파싱하고 생성하기 쉬운 형식입니다.

 

다른 데이터 직렬화 양식인 JSON, XML과 비슷한 목적으로 사용됩니다.

그러나 YAML은 JSON보다 사람이 읽기 쉽고 작성하기 쉽습니다.

들여 쓰기를 사용하여 데이터의 계층 구조를 나타내며, 리스트, 딕셔너리, 스칼라 값 등을 지원합니다.

각 데이터 유형은 키-값 쌍으로 이루어진 매핑(Mapping)으로 나타낼 수 있습니다.

 

YAML은 다음과 같은 특징을 가지고 있습니다:

  1. 가독성: 사람이 읽고 쓰기 쉬운 형식으로 설계되어 있습니다. 들여 쓰기와 간결한 구문을 사용하여 가독성을 높였습니다.
  2. 간결성: JSON과 유사한 구조를 가지고 있지만, JSON보다 더 간결한 문법을 가지고 있습니다. JSON의 중괄호와 쉼표 대신 들여쓰기와 콜론을 사용합니다.
  3. 응용 프로그램 독립성: 다양한 프로그래밍 언어와 플랫폼에서 사용할 수 있습니다. 따라서 데이터를 교환하거나 설정 파일을 작성할 때 유용합니다.
  4. 확장성: YAML은 사용자 정의 데이터 유형과 태그를 지원하여 확장이 용이합니다.

YAML은 주로 설정 파일, 데이터 구조의 직렬화, 문서 마크업 등의 목적으로 사용됩니다. 주요 사용 사례로는 프로젝트 설정 파일, CI/CD 파이프라인 구성, RESTful API의 요청 및 응답 포맷, Docker Compose 파일 등이 있습니다.

 

YAML 예시

# YAML 예시: 사람의 정보
    person:
    name: John Doe
    age: 30
    occupation: Developer
    address:
        city: New York
        country: USA
    hobbies:
        - hiking
        - reading
        - coding

이 YAML 문서에서는 다음과 같은 정보를 표현하고 있습니다:

  • 사람의 이름(name), 나이(age), 직업(occupation) 등의 정보를 포함하는 매핑(mapping).
  • 주소(address)는 또 다른 매핑으로 이루어져 있으며, 도시(city)와 국가(country) 정보를 포함합니다.
  • 취미(hobbies)는 리스트로 표현되어 있으며, 등산, 독서, 코딩 등 세 가지 취미가 나열되어 있습니다.

YAML은 들여 쓰기를 사용하여 계층 구조를 나타내므로, 들여쓰기 수준에 따라 데이터의 계층 구조가 결정됩니다. 위 예시에서는 person, address, hobbies 등이 각각의 계층을 나타내며, 그 하위 키-값 쌍들이 해당 계층에 속합니다.

 


 

YAML 파일 읽기

YAML 파일을 읽기 위해서는 파이썬의 PyYAML 라이브러리를 사용할 수 있습니다. 이 라이브러리를 사용하여 YAML 파일을 파싱하고 파이썬 데이터 구조로 변환할 수 있습니다. 아래는 YAML 파일을 읽어서 파이썬 데이터로 변환하는 예시 코드입니다.

먼저, PyYAML 라이브러리를 설치해야 합니다. 아래 명령을 사용하여 설치할 수 있습니다:

pip install PyYAML

 

그런 다음, 다음과 같은 코드를 사용하여 YAML 파일을 읽고 파이썬 데이터로 변환할 수 있습니다:

    import yaml

    # YAML 파일 읽기
    with open('example.yaml', 'r') as file:
        data = yaml.safe_load(file)

    # 결과 출력
    print(data)

위 코드에서 'example.yaml'은 읽고자 하는 YAML 파일의 경로입니다. 이 코드는 해당 YAML 파일을 읽어 들여서 파이썬 데이터로 변환한 후 data 변수에 저장합니다.

주의할 점은, yaml.safe_load() 함수를 사용하여 YAML 파일을 안전하게 로드합니다. 이 함수는 신뢰할 수 없는 데이터에 대한 안전성을 보장하기 위해 사용됩니다. 만약 YAML 파일에 안전한 데이터만 포함되어 있다면 yaml.safe_load()를 사용하여 로드할 수 있습니다.

만약 다음과 같은 example.yaml 파일이 있다고 가정하고:

    # example.yaml
    person:
    name: John Doe
    age: 30
    occupation: Developer
    address:
        city: New York
        country: USA
    hobbies:
        - hiking
        - reading
        - coding

 

위 코드를 실행하면 example.yaml 파일을 읽어들여서 다음과 같은 파이썬 데이터로 변환됩니다:

  {
        'person': {
            'name': 'John Doe',
            'age': 30,
            'occupation': 'Developer',
            'address': {
                'city': 'New York',
                'country': 'USA'
            },
            'hobbies': ['hiking', 'reading', 'coding']
        }
    }

 

YAML 파일 쓰기

AML 파일을 쓰기 위해서도 파이썬의 PyYAML 라이브러리를 사용할 수 있습니다. 이 라이브러리를 사용하여 파이썬 데이터를 YAML 형식의 문자열로 변환한 다음, 파일에 쓸 수 있습니다. 아래는 YAML 파일을 쓰는 예시 코드입니다.

 import yaml

    # 쓰고자 하는 데이터
    data = {
        'person': {
            'name': 'John Doe',
            'age': 30,
            'occupation': 'Developer',
            'address': {
                'city': 'New York',
                'country': 'USA'
            },
            'hobbies': ['hiking', 'reading', 'coding']
        }
    }

    # YAML 파일로 데이터 쓰기
    with open('example.yaml', 'w') as file:
        yaml.dump(data, file, default_flow_style=False)

위 코드에서 'example.yaml'은 쓰고자 하는 YAML 파일의 경로입니다. 이 코드는 데이터를 YAML 형식의 문자열로 변환한 후 해당 파일에 씁니다.

yaml.dump() 함수의 default_flow_style=False 매개변수는 데이터를 블록 스타일로 출력하도록 지정하는 것입니다. 이렇게 하면 YAML 파일이 읽기 쉽고 이해하기 쉬운 형태로 저장됩니다.

만약 위의 예시 데이터를 example.yaml 파일에 쓴다면, 해당 파일은 다음과 같은 내용을 가지게 됩니다:

    person:
    address:
        city: New York
        country: USA
    age: 30
    hobbies:
    - hiking
    - reading
    - coding
    name: John Doe
    occupation: Developer

 

프로젝트 설정 관리

프로젝트 설정을 관리하기 위해 YAML 파일을 사용하는 예시를 살펴보겠습니다. 일반적으로 프로젝트의 설정은 YAML 파일에 키-값 쌍으로 저장되며, 이러한 설정은 프로젝트의 동작을 제어하고 환경 변수와 같은 중요한 정보를 포함할 수 있습니다. 아래는 간단한 프로젝트 설정을 관리하는 예시입니다.

  # config.yaml

    # 데이터베이스 설정
    database:
    host: localhost
    port: 5432
    username: myuser
    password: mypassword
    dbname: mydatabase

    # 서버 설정
    server:
    host: 0.0.0.0
    port: 8080
    debug: true

    # 로깅 설정
    logging:
    level: INFO
    format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    file: app.log

위의 예시에서는 config.yaml 파일에 데이터베이스 설정, 서버 설정 및 로깅 설정을 저장하고 있습니다. 각 설정은 키-값 쌍으로 표현되며, YAML의 계층 구조를 활용하여 데이터베이스, 서버, 로깅 등의 각 섹션을 구분하고 있습니다.

이러한 설정을 사용하는 Python 프로젝트의 경우, PyYAML 라이브러리를 사용하여 설정 파일을 읽어 들이고 파이썬 데이터로 변환할 수 있습니다. 예를 들어:

    import yaml

    # 설정 파일 읽기
    with open('config.yaml', 'r') as file:
        config = yaml.safe_load(file)

    # 데이터베이스 설정 확인
    db_host = config['database']['host']
    db_port = config['database']['port']
    db_username = config['database']['username']
    db_password = config['database']['password']
    db_name = config['database']['dbname']

    # 서버 설정 확인
    server_host = config['server']['host']
    server_port = config['server']['port']
    server_debug = config['server']['debug']

    # 로깅 설정 확인
    logging_level = config['logging']['level']
    logging_format = config['logging']['format']
    logging_file = config['logging']['file']

    # 설정 확인
    print(f"Database Host: {db_host}")
    print(f"Server Host: {server_host}")
    print(f"Logging Level: {logging_level}")

위의 코드는 config.yaml 파일을 읽어 들여서 각 설정을 파이썬 변수에 저장한 후, 확인하는 예시입니다. 이렇게 하면 YAML 파일에 저장된 프로젝트 설정을 파이썬 코드에서 쉽게 사용할 수 있습니다.

반응형

'Python' 카테고리의 다른 글

[Python] 가상환경 - venv  (0) 2024.04.03
[Python] Logging(로깅)  (0) 2024.03.23