어떤 형식의 설정 파일을 사용할까?

Webserv 과제를 진행하다보면 프로그램에서 사용할 설정 파일을 만들고 파싱(parsing)해야 하는 경우를 마주하게 됩니다. 많은 경우 Nginx를 참고하여 프로그램을 만들다 보니 Nginx의 config 형식을 사용하게 되는데, Nginx의 config는 Nginx만의 정해진 구문 규칙을 따르고 각 요소들이 계층 구조를 이루어, 구현하기 조금 까다롭고 확장성도 떨어진다는 단점이 있는 것 같습니다.

Nginx의 config를 어떻게 파싱할까 고민하던 와중… 문득 ‘굳이 Nginx의 config 형식을 그대로 따라야만 할까?’ 고민을 하게 되었습니다. Nginx의 구문 규칙에 JSON 형식을 적용한다면 Nginx config의 계층 구조도 따를 수 있고, JSON은 확장성이 넓고 보편적인 형식이기에 해당 과제 이후에도 널리 사용할 수 있겠다는 생각이 들어, 팀원에게 양해를 구하고 나만의 작은 JSON 파서(parser)를 만들어보게 되었습니다.

그리고 조금씩 JSON 파서를 만들다보니… JSON 파서를 만들어보는 일이 재귀 파싱을 연습하는 데 좋은 대상이 될 것 같다는 생각을 하게 되었고, 과제를 끝내고 게으르게 보내는 시간에 오랜만에 팔코에 들어와 JSON 파싱에 관한 글을 남겨봅니다…

JSON이란?

우리의 든든한 ChatGPT 선생님에게 물어보니 좋은 답변을 해주지만… 너무 길기에 간단히 요약해본다면…

<aside> 💡 **JSON(JavaScript Object Notation)**은 데이터 교환을 위한 텍스트 형식으로, 이해하기 쉽고, 플랫폼 독립적이며, Key-Value 쌍과 배열을 사용하여 복잡한 데이터 구조를 나타낼 수 있다. 또한 간단한 구문 규칙을 가져 데이터의 유효성을 검사할 수 있다.

</aside>

… 라고 합니다. JSON의 자료형과 문법을 하나씩 확인해봅시다.

기본 자료형

마지막으로 전체적인 JSON의 모습을 한 번 확인해볼까요?

{
    "name": "John Doe",
    "age": 30,
    "isStudent": false,
    "courses": ["Math", "Science", "History"],
    "address": {
        "street": "123 Main St",
        "city": "Exampleville"
    }
}

Structure of JSON