JSON이란? 초보자 가이드

웹 개발 여정을 시작하는 경우, 이미 수없이 많은 JSON을 접했을 것입니다. 비록 그것이 무엇인지 몰랐을지라도 말입니다. JavaScript Object Notation의 약자인 JSON은 애플리케이션 간 데이터 전송에 가장 널리 사용되는 형식입니다. 소셜 미디어에서 읽는 트윗부터 휴대폰의 날씨 데이터까지, JSON은 이 모든 것을 가능하게 하기 위해 뒤에서 작동하고 있습니다.

간단한 용어로 JSON

JSON을 다른 컴퓨터 시스템 간 데이터의 범용 번역기라고 생각해보세요. 마치 인간이 국제 비즈니스에서 공통 언어로 영어를 사용하기로 합의한 것처럼, 컴퓨터와 애플리케이션은 정보 교환을 위한 공통 형식으로 JSON을 사용하기로 크게 합의했습니다. 그러나 이전에 나온 대안들과 비교하여 JSON을 특별하게 만드는 것은 무엇일까요? JSON의 핵심은 특정 규칙을 따르는 텍스트로 데이터를 작성하는 방법일 뿐입니다. 이러한 규칙은 사람이 읽을 수 있고 컴퓨터가 쉽게 파싱할 수 있을 만큼 간단합니다. JSON 파일을 보면 몇 가지 기본 요소만 사용하여 명확한 계층 구조로 조직된 데이터를 볼 수 있습니다: 객체용 중괄호 {}, 목록용 대괄호 [], 이름과 값을 구분하는 콜론, 항목을 구분하는 쉼표. <name>John</name>과 같은 장황한 여는 태그와 닫는 태그를 사용하는 전신인 XML과 달리, JSON은 더 깔끔한 구문을 사용합니다: {"name": "John"}. 이 단순성은 JSON이 매우 인기를 얻게 된 주요 이유 중 하나입니다. 덜 복잡하고, 작성하기 쉬우며, 네트워크를 통해 전송될 때 더 적은 공간을 차지합니다. JSON은 실제 세계의 개념을 자연스럽게 표현합니다. 사람은 이름, 나이, 이메일과 같은 속성을 가진 객체로 표현될 수 있습니다. 쇼핑 카트는 제품 객체의 배열이 될 수 있습니다. 회사는 직원과 부서의 배열을 포함하는 객체가 될 수 있습니다. 실제 엔티티와 JSON 구조 사이의 이러한 자연스러운 매핑이 작업을 매우 직관적으로 만듭니다. 이름에 'JavaScript'가 있음에도 불구하고, JSON은 완전히 언어 독립적입니다. 모든 주요 프로그래밍 언어는 JSON을 파싱하고 생성하기 위한 내장 지원을 가지고 있습니다. Python에는 json이 있고, Java에는 Jackson과 Gson이 있으며, PHP에는 json_encode와 json_decode가 있고, JavaScript는 구문이 객체 리터럴 표기법을 기반으로 하기 때문에 JSON과 자연스럽게 작동합니다. 이러한 범용 지원은 JSON이 데이터 교환의 사실상 표준이 된 또 다른 이유입니다.

JSON이 인기 있는 이유

데이터 교환 세계에서 JSON의 지배력 상승은 우연히 일어난 것이 아닙니다. 개발자들이 직면한 실제 문제에 대한 솔루션으로 등장했으며, 대안보다 더 잘 문제를 해결하기 때문에 계속 번성하고 있습니다. JSON이 널리 퍼지기 전에, XML은 웹 서비스 간 데이터 교환의 주요 형식이었습니다. XML은 강력하고 유연하지만 상당한 오버헤드를 동반합니다. XML 문서는 처리 지시문, 네임스페이스, 속성 대 요소 결정, 복잡한 DOM 또는 SAX 파서를 사용한 파싱이 필요합니다. 단순한 데이터 교환에는 과도했습니다. 개발자들은 더 가벼운 것을 원했습니다. JSON은 그 경량 대안을 제공했습니다. XML로 사용자 목록을 반환하는 REST API는 여는 태그와 닫는 태그로 수십 줄이 필요할 수 있지만, JSON의 동일한 데이터는 공간의 일부로 표현될 수 있습니다. 이러한 페이로드 크기 감소는 더 빠른 네트워크 전송과 더 낮은 대역폭 비용으로 직접 이어지며, 특히 모든 킬로바이트가 중요한 모바일 애플리케이션에 중요합니다. 파싱 이야기도 마찬가지로 설득력이 있습니다. JavaScript에서 JSON.parse()는 문자열을 네이티브 JavaScript 객체로 즉시 변환하므로 JSON 파싱은 본질적으로 무료입니다. 이것을 파서 객체를 만들고, 노드 유형을 처리하고, 문서 트리를 탐색해야 하는 XML 파싱과 비교해보세요. 다른 언어에서도 JSON 파싱은 일반적으로 XML 파싱보다 더 간단하고 빠릅니다. JSON의 단순성은 또한 개발자를 위한 학습 곡선을 줄입니다. 주니어 개발자는 몇 분 안에 JSON의 구문을 이해할 수 있습니다: 키-값 쌍을 가진 객체, 값의 배열, 그리고 소수의 데이터 타입(문자열, 숫자, 불린, null). DTD, XPath, XSLT 또는 종종 XML과 함께 제공되는 다른 수십 가지 기술에 대해 배울 필요가 없습니다. REST API와 단일 페이지 애플리케이션의 등장은 JSON이 번성할 완벽한 환경을 만들었습니다. 웹 애플리케이션이 비동기적으로 데이터를 가져와 클라이언트 측에서 렌더링하는 것으로 전환하면서, 개발자들은 JavaScript가 쉽게 작업할 수 있는 형식이 필요했습니다. JSON이 바로 그 형식이었습니다. 오늘날, JSON은 어디에나 있습니다. 거의 모든 웹 API의 응답 형식입니다. MongoDB 및 CouchDB와 같은 문서 데이터베이스의 저장 형식입니다. Node.js 패키지(package.json), TypeScript(tsconfig.json), VS Code 설정 및 수많은 다른 도구의 구성 형식입니다. JSON을 배우는 것은 유용할 뿐만 아니라 현대 소프트웨어 개발에 필수적입니다.

JSON 예제

JSON을 이해하는 가장 좋은 방법은 실제로 보는 것입니다. JSON의 기능과 실제 데이터를 모델링하는 방법을 보여주는 점진적으로 복잡한 예제를 살펴보겠습니다. 가장 간단한 JSON은 단일 값일 뿐입니다. API에서 흔히 볼 수는 없지만, 이것들은 모두 유효한 JSON입니다: 42(숫자), "안녕하세요"(문자열), true(불린), null(null 값). 그러나 만날 대부분의 JSON은 객체나 배열로 구성됩니다. 기본 JSON 객체는 속성을 가진 단일 엔티티를 나타냅니다: {"name": "홍길동", "age": 30, "email": "[email protected]"}. 각 속성은 키(따옴표로 묶인 이름)와 값(모든 JSON 데이터 타입이 될 수 있음)을 가집니다. 키와 값은 콜론으로 구분되고, 속성은 쉼표로 구분됩니다. 배열을 사용하면 값의 목록을 나타낼 수 있습니다: ["사과", "바나나", "체리"]. 배열은 모든 JSON 값을 포함할 수 있으며, 타입의 혼합을 포함할 수 있지만, 실제로는 일관성을 위해 배열이 일반적으로 동일한 타입의 항목을 포함합니다. 객체와 배열을 중첩할 때 JSON의 진정한 힘이 나타납니다. 다음은 사용자 프로필을 나타내는 더 현실적인 예입니다: {"id": 12345, "username": "hongkildong", "profile": {"firstName": "길동", "lastName": "홍", "bio": "서울 출신 소프트웨어 개발자"}, "interests": ["프로그래밍", "등산", "사진"], "socialLinks": [{"platform": "twitter", "url": "https://twitter.com/hongkildong"}, {"platform": "github", "url": "https://github.com/hongkildong"}], "settings": {"newsletter": true, "darkMode": false, "language": "ko"}, "createdAt": "2024-01-15T10:30:00Z"} 이 단일 JSON 객체는 다음을 포함합니다: 원시 값(숫자로서의 id, 문자열로서의 username), 중첩된 객체(profile), 간단한 배열(interests), 객체의 배열(socialLinks), 불린 값을 가진 설정 객체, 그리고 ISO 8601 형식의 날짜 문자열. 이것은 JSON이 복잡한 실제 데이터 구조를 얼마나 우아하게 표현할 수 있는지를 보여줍니다. 적절한 들여쓰기로 포맷하면, 이 구조는 즉시 읽을 수 있게 되며, 각 중첩 레벨이 계층을 명확하게 보여주기 위해 들여쓰기됩니다.

JSON이 사용되는 곳

JSON은 너무 편재적이어서 어디에 사용되는지 나열하는 것은 전기가 어디에 사용되는지 나열하는 것과 거의 같습니다—어디에나 있습니다. JSON 애플리케이션의 폭을 이해하면 왜 그것이 마스터하기에 매우 가치 있는 기술인지를 알 수 있습니다. JSON의 가장 눈에 띄는 용도는 웹 API입니다. 날씨 앱이 예보를 가져올 때, 소셜 미디어 피드가 새 게시물을 로드할 때, 전자상거래 사이트가 제품 세부정보를 검색할 때—이 모든 것은 일반적으로 JSON 응답을 반환하는 HTTP 요청을 통해 발생합니다. REST 아키텍처 스타일과 JSON은 현대 웹 개발에서 거의 동의어가 되었습니다. GraphQL과 같은 새로운 API 패러다임조차도 응답 형식으로 JSON을 사용합니다. 구성 파일은 JSON의 또 다른 주요 영역입니다. Node.js 생태계는 종속성 및 프로젝트 메타데이터 관리를 위해 package.json으로 표준화했습니다. 이 단일 결정은 수백만 명의 개발자가 매일 JSON으로 작업한다는 것을 의미했습니다. TypeScript는 tsconfig.json을 사용하고, Babel은 babel.config.json을 사용하며, ESLint는 .eslintrc.json을 사용하고, VS Code는 JSON 파일에 설정을 저장하며, 목록은 계속됩니다. JSON의 사람이 읽을 수 있는 특성은 개발자가 읽고 편집해야 하는 구성에 이상적입니다. MongoDB 및 CouchDB와 같은 문서 데이터베이스는 데이터를 JSON 문서로 저장합니다(MongoDB의 경우 기술적으로 BSON, 이진 JSON 형식). 저장 형식과 API 형식 간의 이러한 정렬은 개발을 상당히 단순화합니다. 테이블과 열에 매핑하지 않고 JavaScript 객체를 직접 저장하고 동일한 형태로 검색할 수 있습니다. 브라우저 API는 JSON을 광범위하게 사용합니다. localStorage 및 sessionStorage API는 데이터를 문자열로 저장하므로 JSON.stringify() 및 JSON.parse()가 일반적으로 복잡한 데이터 구조를 저장하는 데 사용됩니다. Fetch API는 응답을 파싱하기 위한 편리한 .json() 메서드를 가진 Response 객체를 반환합니다. 메시지 큐, 이벤트 스트림 및 서비스 간 통신을 위한 데이터 직렬화는 종종 JSON을 사용합니다. Apache Kafka, RabbitMQ 및 AWS SQS는 일반적으로 JSON 인코딩된 메시지를 전송합니다. Stripe, GitHub 및 Slack과 같은 서비스의 웹훅은 이벤트 데이터를 JSON 페이로드로 전달합니다. 웹 개발 외부에서도 JSON은 애플리케이션을 찾았습니다. 과학 데이터 교환, Ansible과 같은 구성 관리 도구, IoT 장치 통신 및 로그 집계 시스템은 모두 JSON을 활용합니다. 형식의 단순성과 범용 지원은 여러 시스템이 데이터를 교환해야 할 때 안전한 선택이 됩니다. 개발 경력이 진행됨에 따라 수많은 컨텍스트에서 JSON을 다루게 될 것입니다. 깊이 이해하는 데 대한 투자는 당신이 접촉하는 모든 프로젝트에서 배당금을 지급합니다.

도구 사용해보기

JSON 포맷터

JSON 포맷터

관련 기사