포스트 난이도: HOO_Middle
* 개인적인 견해가 포함되어 있는 포스트입니다.
# 잡담
개발자라는 직업은 모르는 게 너무 많다. 그 말인즉슨 알아야 할 게 너무 많다는 소리이다. 우리가 이번 포스트에서 다룰 yaml만 봐도 그렇다. 솔직히 yaml이 텍스트기반의 메타데이터를 담고 있는 파일정도로만 알지 왜 이걸 쓰고 어디서 많이 사용하면 좋은지에 대해서 구체적으로 알지도 않고 알아가고 싶지도 않다. 그저 어떻게 쓰는지에만 관심이 있을 뿐이다. LLM이 대중화되면서 내 블로그와 같이 정보를 공유하지 않아도 충분히 챗지피티에서 검색해서 찾아보면 된다. 그렇다 보니, 요즘 신입 개발자 브로들과 이야기를 나누다 보면 모르는 게 있으면 챗지피티에 검색을 하고 스마트폰 화면을 내 눈앞에 가져다 둔다. 나는 yaml에 대한 정의를 알고 싶은게 아니라 나랑 일하는 개발자 브로가 yaml에 대한 콘셉트를 이해하고 언제, 어떤 환경에서 json이 아닌 yaml을 써야 하는지를 이해하고 응용이 가능한지를 보고 싶은 것이지, 수학문제에 있는 정답지를 내 눈앞에 가져다 두는 것처럼 검색해서 보여주면 멘붕이 오곤 한다. 한마디로 LLM이 개발자의 효율성을 높여주는 반면에 개발자가 스스로 익혀서 LLM이 하지 못하는 걸 해야하는데, 그걸 방해하고 있다고 느껴졌다. 그래서 이번 포스트에서 다룰 yaml은 챗지피티에서 검색해서 나올 내용을 최대한 배제한채, 내가 느껴왔던 yaml에 대해서 이야기를 나눌까 한다.
# YAML, Ain't Markup Language
내 멋대로 기질이 있어서인지 몰라도는 나는 yaml을 얌이라고 부른다. 얌하면 맛있는 게 생각나서 그런가 보다. 얌 (yaml)은 마크업 언어가 아니야!라고 말해주는 자체로 시작하는 아주 귀여운 녀석이다. 얌은 주로 설정 파일을 작성하는 데 사용이 되며, 여기서 말하는 설정 파일은 데이터와 관련이 있다. 프로그램을 설명하는데 얌을 사용하기도 하지만 이제 와서 얌이 많이 보이고 있는 이유는 데이터 때문이다. 우리는 데이터 기반의 프로그램을 개발하고 데이터 기반으로 된 인공지능을 사용한다. 그렇다 보니 이제는 application, 즉 어떤 프로그램을 만들거나 인공지능 기반의 모델을 만드는 것과 별개로 여기에 들어가는 데이터가 중요해지고 있다. (좀 재수 없을 수도 있지만) 더 이상 AI application을 만드는 것 자체는 어렵지 않다. 솔직히 나뿐만 아니라 인공지능을 다뤄봤던 개발자들은 내가 무슨 말을 하는지 이해할 수 있을 것이다. 과거만 해도 처음부터 끝까지 만들던 인공지능 모델이 이제는 한 줄 코드로 뚝딱 머신러닝을 돌리고 뚝딱 모델링 작업을 할 수 있다. 거기에 LLM이 기본 틀을 작성해 주니 완전히 새로운 로직을 제안하지 않는 이상을 비슷비슷하다.
내가 말하고 싶은건 "인공지능이 별로야."가 아니다. 이제 applicaiton 개발이 더 쉬워졌다는 건 환영할 일이다. 다만, 여기에 들어갈 데이터에 대해서 관심을 더 가져야할 시기가 되었다는 것이다. 마치 먹고사는 문제가 여유가 생겼으니 본질적인 문제를 돌이켜 생각해 보자는 것이다. 이러한 점에서 얌의 중요성은 점차적으로 커지고 있다. json이나 xml은 여러 목적성을 지니고 있었다면, ymal은 데이터 계층 구조를 나타내기 위한 목적으로 사용이 된다. 쉽게 말해서 앞서 이야기한 xml, json보다 가독성, 간결성, 언어 독립성 등 다양한 장점들을 가지고 있다. 더 쉽게 말해서 개발자가 보기에도 표준 언어기반이다 보니 한 번에 이해하기 쉽고 기계들도 해당 파일을 가지고 이해할 수가 있다는 것이다. 아래 예제코드에서 살펴볼 수 있듯이, 표준언어 기반의 메타데이터가 얌 파일에 제공되어 해당 파일을 블록체인과 같은 layers가 많고 여러 조건의 데이터를 다루는 환경에서 사용할 수가 있다.
Organizations:
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
Application: &ApplicationDefaults
Organizations:
# yaml 언제 쓰나요?
사실 AI에 대한 자체적인 개발에서는 얌을 자주 보지는 못했을 것이다. 왜냐하면 인공지능 모델을 개발하는 것이지 데이터 자체를 다루는 툴이 아니였기 때문이다. AI에서 데이터나 메타데이터를 다룰 때 많이 사용하는 포맷은 Json이나 python 자체에 넣기도 한다. 아직도. ini를 사용하기도 하지만 (이건 블록체인도 마찬가지이다) 대부분 database와 AI를 연동하는 과정에서 Json기반을 많이 사용할 것이다.
반면에 얌은 설정의 구조화와 가독성이 중요한 복잡한 환경에서 많이 사용한다. AI에서도 그냥 AI modeling application에서 사용하는 것이 아니라 앞서 이야기한 MLOps와 같은 환경에서는 "오케이 얌을 쓰자!"라고 할 수가 있다. 그렇다보니 블록체인과 같이 다중 레이어와 여러 조건 (Smart contracts)가 존재하는 환경에서는 얌이 안성맞춤인 셈이다. 결과적으로 얌은 데이터와 메타데이터를 다루기 좋고, 특히 여러 종류의 복잡한 데이터 트랜잭션이 필요로 하는 환경에서 사용하기 좋다는 것이다. 왜냐하면 사용자나 특히 개발자가 각 데이터 환경 및 조건을 명확히 파악해야 하는데 수많은 얌 파일을 하나하나 확인하면서도 빠르게 살펴보고 보완해 나갈 수 있기 때문이다.
"그럼 앞으로 얌 (yaml)만 사용하나요?"
나는 개인적으로 yaml과 json을 같이 사용하는걸 선호한다. 내가 느낀 얌과 제이슨은 서로 경쟁하듯이 싸우는 관계가 아니다. 왜냐하면 하는 역할 자체가 다르기 때문이다. 따라서 데이터 사용이 많아지고 중요해진다는 점에서 이러한 데이터와 메타데이터를 다루는 파일을 잘 알아야 하는 건 당연하면서도 제이슨이나 xml만 다루는 거에서 벗어나서 얌과 제이슨을 같이 사용할 수 있어야 한다. 예를 들어서 사용자가 직접 수정해야 하는 부분에 있어서는 얌을 사용하는 것이 좋다. 이를 우리는 configuration file이라고 부르는데 사실 몰라도 된다. 제이슨은 이미 브로들도 알고 있겠지만 애플리케이션 내부에서 처리하거나 시스템 간 데이터를 주고받을 때 어떻게 주고받고 어떤 식으로 데이터가 존재하는지를 정의할 때 좋다. API 리액팅이라든가 블록체인 트랜잭션 데이터, 아니면 데이터베이스에 저장할 문서 등 Acting이 이러지는 단계에서는 제이슨이 좋다.
자꾸 나만 좋은 블록체인 얘기를 해서 인공지능, 머신러닝 모델을 배포하는걸 가정해 보도록 하자. MLOps 환경을 우리는 설정을 해야 하는데 이 과정에서 배포 설정을 얌으로 할 수가 있다는 것이다. 해당 파일에는 모델의 이름이라든가 버전, 필요한 메모리, autoscaling 등 한마디로 사용자가 알아둬야 되는 사용 설명서가 담겨 있다. 물론 여기에 기계에 입력할 수 있는 데이터 조건이나 메타데이터도 작성이 가능하다. 제이슨의 경우 모델 입출력 데이터를 다룬다. 그렇다 보니 사용자가 다루기보다는 개발자가 application 단계에서 머신한테 알려주는 사용설명서 역할을 한다. 따라서 제이슨은 머신한테 알려주는 역할을 주로 담당하면 얌은 사용자에게 알려주는 역할을 담당하면서도 사용자와 머신 사이에서 데이터나 메타데이터를 전달하는 역할도 담당할 수 있는 셈이다.
결과적으로 AI를 다루는다는 건 이제 application만 하는게 아니라 해당 모델과 연관된 여러 환경들을 고려하고 연결할 줄 알아야 한다고 생각한다. 그 점에서 데이터, 메타데이터를 다루는 방법에 익숙해져야 하며 얌과 제이슨은 콧방귀가 나올 만큼 기초적인 것이지만 그만큼 잘 알아둬야 된다고 생각한다. 아래의 Table1은 간략하게 비교한 얌과 제이슨의 특징이다. 두 가지를 병행해서 사용하다 보면 이따금씩 sytax를 헷갈리는 경우가 있어서 같이 넣어두었다. (사실 나를 위해서이다.)
Table 1. yaml과 json의 특징
| Feature | YAML | JSON |
| Readability | Very high | Medium |
| Syntax | Identation, -, : | {}, [], commas, : |
| Comments | # | None |
| Use cases | Configuration files | Data exchange |
| Key advantage | High readability and flexibility | Simpler |
'Computer Science' 카테고리의 다른 글
| 깃허브 사용하기 귀찮을때, Github Desktop (3) | 2025.09.01 |
|---|---|
| HOOAI가 추천하는 툴 모음집 (12) | 2025.07.28 |
| 무료 클라우드기반 Jupyter Notebook, Colaboratory (코랩) (3) | 2025.07.28 |
| (REST API 아주 조금 곁들인) API란 무엇인가요? (1) | 2025.02.13 |
| [Github] Managing Data with Git (fork, git clone, git checkout, git push) (8) | 2024.09.08 |
댓글