JSON이란 무엇인가?
JSON은 JavaScript Object Notation의 약어로, 데이터를 표현하는 데 사용되는 형식이다. 2000년대 초반 자바스크립트의 일부로 등장했고 점점 확장돼 텍스트 기반 데이터를 기술하고 교환하는 가장 보편적인 매체로 발전했다. 현재 JSON은 데이터 교환의 범용 표준이며 프런트 엔드와 서비스 측 개발, 시스템, 미들웨어, 데이터베이스를 포함해 프로그래밍의 모든 영역에 사용된다.
- JSON은 자바스크립트 클라이언트와 백엔드 서버 간의 통신을 위한 형식으로 개발
- 간결한고 표준화된 형식
- 사람이 읽을 수 있는 형식
- 즉석에서 필드 추가, 제거, 업데이트
JSON의 역사
JSON의 인기를 촉발한 것은 AJAX 혁명이다. XML에 중점을 뒀다는 사실을 감안하면 이상한 일이지만, AJAX가 제대로 빛을 발하게 해준 것은 사실 JSON이었다. API를 위한 규약으로 REST를 사용하고 교환 매체로 JSON을 사용하는 방법이 간소함과 유연함, 일관성의 적절한 조합이라는 것이 입증된 것이다.
이후 JSON은 프론트 엔드 자바스크립트에서 클라이언트-서버 통신으로 확산했고, 거기서 다시 시스템 구성 파일, 백엔드 언어에 이어 데이터베이스까지 이르렀다. JSON은 데이터 저장 분야에서 혁신을 일으킨 노SQL 운동에 박차를 가한 역할도 했다. 데이터베이스 관리자 역시 JSON의 유연함과 손쉬운 프로그래밍을 반겼다.
현재 MongoDB와 같은 문서 지향 데이터 스토어는 JSON과 같은 유사한 데이터 구조에서 작동하는 API를 제공한다. 중괄호와 콜론으로 소소하게 시작한 데이터 형식으로서는 나쁘지 않은 성과다.
개발자가 JSON을 사용하는 이유
소프트웨어 개발자는 어떤 유형의 프로그램 또는 사용 사례를 다루든 데이터를 기술하고 교환할 방법이 필요하다. 이 필요성은 데이터베이스, 비즈니스 로직, 사용자 인터페이스, 그리고 모든 시스템 통신에 존재한다. 교환을 위해 데이터를 구조화하는 방법은 많은데 크게 바이너리와 텍스트 기반 데이터, 두 진영으로 나뉜다. JSON은 텍스트 기반 형 식으므로 사람과 기계가 모두 읽을 수 있다.
JSON은 여러 이유로 매우 성공적인 데이터 형식 지정 방법이다.
- 자바스크립트에 네이티브이며 자바스크립트 프로그램 내부에서 JSON 리터럴로 사용된다.
- 다른 프로그래밍 언어와 함께 JSON을 사용할 수 있으므로 이종 시스템 간의 데이터 교환에 유용하다.
- JSON은 사람이 읽을 수 있다.
JSON 작동 원리
웹 페이지의 양식에 사용자 이름과 암호를 입력하면 사용자 이름과 암호, 두 개의 필드가 있는 하나의 객체와 상호작용하는 것이다.
{
username: “Bilbo Baggins”,
password: “fkj3442jv9dwwf”
}
중괄호({...}) 내에 포함된 것은 모두 같은 객체에 속한다. 여기서 객체는 일반적인 매락에서 '하나의 사물'을 나타낸다. 중괄호 안에는 이 사물에 속하는 속성이 있다. 각 속성에는 이름과 값, 두 부분이 콜론으로 구분돼 포함된다. 이것을 키와 값이라고 한다. "username"이 키, "Bilbo Baggins"가 값이다. 참고로 속성, 필드, 특성 등의 요소는 JSON 개체의 부분을 나타내는데 사용된다. 기술적으로 보면 객체 지향 프로그래밍 언어 맥락에서 이와 같은 요소를 멤버(member)라고 한다. 각 속성과 필드 또는 특성은 객체의 멤버다.
JSON vs. XML
JSON은 한때 데이터 교환의 지배적 형식이었던 XML의 대안으로 만들어졌다. 아래의 로그인 양식은 XML을 사용해 기술한 것이다.
<UserLogin>
<Username>Samwise Gamgee</Username>
<Password>ghB5fK5</Password>
</UserLogin>
JSON과 비교하면 보기만 해도 피곤하다. 이를 코드에서 만들어 파싱해야 한다고 상상해 보라. 반면 자바스크립트에서 JSON을 사용하면 극히 간단하다. 직접 해보면 안다.
let hobbitJson = {
name: "Pippin",
hometown: "Shire"
}
console.log(hobbitJson.name); // outputs “Pippin”
hobbitJson.bestFriend = "Merry"; // modify the object
console.log(JSON.stringify(hobbitJson)); //output entire object
// {"name":"Pippin","hometown":"Shire","bestFriend":"Merry"}
이처럼 XML은 읽기가 어렵고 코딩 민첩성 측면에서도 아쉬운 점이 많은데, JSON은 이러한 문제를 해결하도록 만들어졌다. JSON이 XML을 거의 대체했다는 것은 별로 놀라운 일은 아니다.
JSON vs. YAML vs. CSV
JSON과 종종 비교되는 두 데이터 형식은 YAML과 CSV다. 이 두 형식은 시간 스펙트럼의 양극단에 위치한다. CSV는 디지털 시대 이전의 옛 기술이지만 어떻게 하다 보니 컴퓨터에까지 도입됐으며 YAML은 JSON의 영향을 받아 탄생했고 개념적으로 JSON의 후손이라고 할 수 있다.
CSV는 단순한 값 목록이며 각 항목은 쉼표 또는 다른 구분 문자로 나타내고 첫 번째 헤더 필드 행은 선택적이다. 교환 매체 및 프로그래밍 구조로 제한되지만, 대량의 데이터를 디스크로 출력하는 데는 여전히 유용하다. 물론 CSV의 테이블 형식 데이터 구조는 스프레드 시트와 완벽하게 어울린다.
YAML은 사실상 JSON의 확대 집합으로, JSON이 지원하는 것은 모두 지원한다. 그러나 YAML은 그 외에 JSON보다 더 간결하게 만들어진 더 간소화된 구문도 지원한다. 예를 들어 YAML은 계층구조에 중괄호를 버리고 들여 쓰기를 사용한다. YAML은 데이터 교환 형식으로 종종 사용되기도 하지만 가장 유명한 사용 사례는 구성 파일이다.
복잡한 JSON : 중첩, 객체, 배열
JSON은 객체 그래프, 순환 그래프와 같이 임의의 복잡한 데이터 구조, 즉 순환 참조가 있는 구조도 모델링 할 수 있다. 여기서는 중첩, 객체 참조, 배열을 통한 복잡한 모델링의 예제를 살펴보자.
중첩된 JSON
let merry = { name: "Merry",
bestfriend: {
name: "Pippin"
}
}
bestfriend 속성은 JSON 리터럴로 인라인 정의된 다른 객체를 가르킨다.
객체 참조와 JSON
let merry = { race: "hobbit", name: “Merry Brandybuck” }
let pippin = {race: "hobbit", name: “Pippin Took”, bestfriend: merry }
console.log(JSON.stringify(pippin.bestfriend.name)); // outputs “Merry Brandybuck”
bestfriend 속성에 merry 객체에 대한 핸들을 넣는다. 그러면 bestfriend 속성을 통해 pippin 객체에서 실제 merry 객체를 얻을 수 있다. name 속성으로 merry 객체에서 이름을 구한다 이것이 객체 그래프 횡단이라고 하며, 점 연산자를 사용해 수행한다.
배열과 JSON
{
towns: [ “The Shire”, “Rivendale”, “Gondor” ]
}
JSON 속성이 가질 수 있는 또 다른 형식의 구조는 배열이다. 자바스크립트 배열과 비슷하며 대괄호를 사용해서 나타낸다. 물론 배열도 다른 객체에 대한 참조를 가질 수 있다.
정리하자면
JSON은 현대 소프트웨어 분야에 사용되는 가장 필수적인 기술 중 하나다. 자바스크립트에서 중대하지만 광범위한 기술 간의 공통 상호작용 모드로도 사용된다. JSON을 이처럼 유용하게 만든 이유는 명확하다. 텍스트 데이터 표현을 위한 간결하고 가독성 높은 형식이기 때문이다.
함께 읽으면 좋은 글
출처
'프로그래밍' 카테고리의 다른 글
Tortoise SVN externals 설정하기 (0) | 2023.11.15 |
---|---|
SOLID 디자인 원칙 - 단일 책임 원칙 (0) | 2023.11.15 |
간단하게 엑셀(Excel) 데이터를 Json 형식으로 변환하기 (0) | 2023.11.01 |
Statically typed vs. Dynamically typed, 정적 타입 vs 동적 타입 (1) | 2023.10.23 |
래셔널 통합 프로세스(RUP)란 무엇인가? (0) | 2023.10.20 |
댓글