
JSON이란?
JSON(JavaScript Object Notation)은 데이터를 교환하기 위한 경량의 데이터 형식
일반적으로 웹 어플리케이션에서 클라이언트와 서버 간에 데이터를 주고 받을때 사용
기본적으로 JavaScript의 객체 표기 문법을 따르지만, 다른 프로그래밍 언어에서도 쉽게 해석하고 생성할 수 있습니다.
(대부분의 언어에서 JSON 데이터를 다룰수있게 도와주는 라이브러리를 제공합니다)
Key-Value 쌍으로 이루어진 객체 형식이며, 배열과 문자열 등의 다양한 데이터 형식을 포함할 수 있습니다.
JSON은 다른 데이터 교환 형식(예를 들어, XML..)보다 더 간단하고 가볍기 때문에, 최근에는 많은 어플리케이션에서 JSON을 사용합니다. 또한, JSON데이터는 쉽게 파싱할 수 있어서, 다양한 프로그래밍 언어와 플랫폼에서 쉽게 사용할 수 있습니다.
XML이란?
XML(eXtensible Markup Language)은 데이터를 표현하고 전송하기 위한 마크업 언어
XML은 HTML과 마찬가지로 태그를 사용하여 데이터를 구조화하며, 데이터의 의미와 구조를 명확하게 표현
XML은 많은 어플리케이션에서 데이터를 교환하고 저장하기 위해 사용됩니다.
예를 들어, RSS 피드, SOAP 웹 서비스, SVG 그래픽 등에서 XML이 사용됩니다.
XML은 유연성과 확장성이 뛰어나기 때문에, 데이터의 구조를 변경하거나 새로운 데이터 요소를 추가하는 것이 쉽습니다.
또한, XML은 플랫폼에 독립적이어서, 다양한 운영체제 및 언어에서 쉽게 처리할 수 있습니다.
하지만, XML은 태그와 속성이 많이 사용되어 파일 크기가 커질 수 있고, 처리 속도가 느려질 수 있다는 단점이 있습니다.
JSON의 구성 요소?
JSON의 기본 구성 요소는 다음과 같습니다
1. 객체(Object) : 중괄호 { }로 표현되며, Key-Value 쌍의 집합
{
"name": "John",
"age": 30,
"city": "New York"
}
2. 배열(Array) : 대괄호 [ ]로 표현되며, 값들의 리스트
["apple", "banana", "orange"]
3. 키(Key) : 객체 내부의 값에 접근하기 위한 이름으로, 반드시 문자열 형식으로 표현
4. 값(Value) : 문자열, 숫자, 불리언, Null, 객체, 배열 등의 다양한 데이터 형식이 가능
"John"
30
true
null
JSON의 문법?
- 모든 문자열은 큰 따옴표(" ")로 감싸져야 합니다
- 숫자는 따옴표로 감싸지 않습니다
- 모든 키는 큰 따옴표(" ")로 감싸져야 합니다
- 객체의 키와 값은 콜론( : )으로 구분되며, 키-값 쌍은 쉼표( , )로 구분됩니다
- 배열의 값은 쉼표( , )로 구분됩니다
- 주석은 사용하지 않습니다
JSON의 예시
- 예시1
{
"name": "John",
"age": 30,
"city": "New York",
"pets": ["dog", "cat"],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY",
"zip": "10001"
}
}
위의 예시는 객체 형식으로, "name", "age", "city", "pets", "address"가 Key에 대응합니다.
"pets"와 "address"의 Key에는 각각 배열과 객체가 Value로 주어져 있습니다.
- 예시2
[
{ "name": "John", "age": 30, "city": "New York" },
{ "name": "Jane", "age": 25, "city": "London" },
{ "name": "Bob", "age": 40, "city": "Paris" }
]
위의 예시는 배열 형식으로, 배열 안에 세 개의 객체가 들어있습니다. 그리고 각 객체 안에 Key-Value 쌍이 세 개씩 들어있습니다. 배열 안에는 위와 같이 여러 개의 객체가 포함될 수 있습니다
- 예시3
{
"name": "John",
"age": 30,
"city": "New York",
"pets": [
{
"name": "Buddy",
"species": "dog",
"age": 2
},
{
"name": "Fluffy",
"species": "cat",
"age": 4
}
],
"family": [
{
"name": "Mary",
"relation": "mother",
"age": 60
},
{
"name": "Tom",
"relation": "father",
"age": 62
},
{
"name": "Sarah",
"relation": "sister",
"age": 25
}
],
"job": {
"title": "Software Engineer",
"company": "Acme Co.",
"salary": 100000
}
}
위의 예시는 "name", "age", "city", "pets", "family", "job"을 Key로 가집니다
- "pets" 키의 Value는 2개의 객체를 포함하는 배열입니다. 각 객체는 "name", "species", "age"를 Key로 가지고, 그에 대응하는 Value를 가집니다.
- "family" 키의 Value는 3개의 객체를 포함하는 배열입니다. 각 객체는 "name", "relation", "age"를 Key로 가지고, 그에 대응하는 Value를 가집니다.
- "job"키의 Value는 1개의 객체입니다. 이 객체는 "title", "company", "salary"를 Key로 가지고, 그에 대응하는 Value를 가집니다.
JSON의 문제점?
1. 스키마(Schema)의 강제성 부재
- JSON은 스키마를 강제하지 않습니다. 즉, JSON 데이터의 구조, 필드 명, 데이터 타입 등을 명확하게 정의하지 않아도 된다는 말입니다. 이로 인해 무결성 검사와 유효성 검사와 같은 작업이 추가적으로 필요할 수 있습니다.
2. 보안 문제
- JSON은 JavaScript에서 사용되기 때문에, 코드 인젝션, 크로스 사이트 스크립팅(XSS) 등의 보안 문제가 발생할 수 있습니다. 이를 방지하기 위해서는 JSON 데이터를 신뢰할 수 있는 소스에서만 수신해야 하며, 데이터를 처리하는 안전한 방식을 사용해야 합니다.
3. 데이터 용량 문제
- JSON은 텍스트 형식으로 저장되기 때문에, 데이터 용량이 크다는 문제가 있습니다. 이런 문제는 대량의 데이터를 다루는 웹 어플리케이션에서 성능에 영향을 미칠 수 있습니다.
4. 날짜 및 시간 처리 문제
- JSON은 날짜와 시간을 표현하는 공식적인 표준이 없습니다. 따라서 다른 형식의 날짜-시간 데이터가 상호 작용할 때, 문제가 발생할 수 있습니다. 이런 문제를 해결하기 위해선 ISO 8601 표준을 따르는 방식으로 날짜와 시간을 처리해야 합니다.
5. 다른 언어 간 호환성 문제
- JSON은 모든 언어에서 기본적으로 지원되기 때문에, 다른 언어 간에 데이터를 교환하기에 매우 유용하다고 했습니다. 그런데 각 언어마다 JSON을 다루는 라이브러리나 패키지가 다르기 때문에, 서로 호환되지 않는 문제가 발생할 수 있습니다. 이를 방지하려면 JSON을 다루는 라이브러리를 선택할 때, 각 언어의 요구 사항을 고려해야 합니다.

JSON이란?
JSON(JavaScript Object Notation)은 데이터를 교환하기 위한 경량의 데이터 형식
일반적으로 웹 어플리케이션에서 클라이언트와 서버 간에 데이터를 주고 받을때 사용
기본적으로 JavaScript의 객체 표기 문법을 따르지만, 다른 프로그래밍 언어에서도 쉽게 해석하고 생성할 수 있습니다.
(대부분의 언어에서 JSON 데이터를 다룰수있게 도와주는 라이브러리를 제공합니다)
Key-Value 쌍으로 이루어진 객체 형식이며, 배열과 문자열 등의 다양한 데이터 형식을 포함할 수 있습니다.
JSON은 다른 데이터 교환 형식(예를 들어, XML..)보다 더 간단하고 가볍기 때문에, 최근에는 많은 어플리케이션에서 JSON을 사용합니다. 또한, JSON데이터는 쉽게 파싱할 수 있어서, 다양한 프로그래밍 언어와 플랫폼에서 쉽게 사용할 수 있습니다.
XML이란?
XML(eXtensible Markup Language)은 데이터를 표현하고 전송하기 위한 마크업 언어
XML은 HTML과 마찬가지로 태그를 사용하여 데이터를 구조화하며, 데이터의 의미와 구조를 명확하게 표현
XML은 많은 어플리케이션에서 데이터를 교환하고 저장하기 위해 사용됩니다.
예를 들어, RSS 피드, SOAP 웹 서비스, SVG 그래픽 등에서 XML이 사용됩니다.
XML은 유연성과 확장성이 뛰어나기 때문에, 데이터의 구조를 변경하거나 새로운 데이터 요소를 추가하는 것이 쉽습니다.
또한, XML은 플랫폼에 독립적이어서, 다양한 운영체제 및 언어에서 쉽게 처리할 수 있습니다.
하지만, XML은 태그와 속성이 많이 사용되어 파일 크기가 커질 수 있고, 처리 속도가 느려질 수 있다는 단점이 있습니다.
JSON의 구성 요소?
JSON의 기본 구성 요소는 다음과 같습니다
1. 객체(Object) : 중괄호 { }로 표현되며, Key-Value 쌍의 집합
{
"name": "John",
"age": 30,
"city": "New York"
}
2. 배열(Array) : 대괄호 [ ]로 표현되며, 값들의 리스트
["apple", "banana", "orange"]
3. 키(Key) : 객체 내부의 값에 접근하기 위한 이름으로, 반드시 문자열 형식으로 표현
4. 값(Value) : 문자열, 숫자, 불리언, Null, 객체, 배열 등의 다양한 데이터 형식이 가능
"John"
30
true
null
JSON의 문법?
- 모든 문자열은 큰 따옴표(" ")로 감싸져야 합니다
- 숫자는 따옴표로 감싸지 않습니다
- 모든 키는 큰 따옴표(" ")로 감싸져야 합니다
- 객체의 키와 값은 콜론( : )으로 구분되며, 키-값 쌍은 쉼표( , )로 구분됩니다
- 배열의 값은 쉼표( , )로 구분됩니다
- 주석은 사용하지 않습니다
JSON의 예시
- 예시1
{
"name": "John",
"age": 30,
"city": "New York",
"pets": ["dog", "cat"],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY",
"zip": "10001"
}
}
위의 예시는 객체 형식으로, "name", "age", "city", "pets", "address"가 Key에 대응합니다.
"pets"와 "address"의 Key에는 각각 배열과 객체가 Value로 주어져 있습니다.
- 예시2
[
{ "name": "John", "age": 30, "city": "New York" },
{ "name": "Jane", "age": 25, "city": "London" },
{ "name": "Bob", "age": 40, "city": "Paris" }
]
위의 예시는 배열 형식으로, 배열 안에 세 개의 객체가 들어있습니다. 그리고 각 객체 안에 Key-Value 쌍이 세 개씩 들어있습니다. 배열 안에는 위와 같이 여러 개의 객체가 포함될 수 있습니다
- 예시3
{
"name": "John",
"age": 30,
"city": "New York",
"pets": [
{
"name": "Buddy",
"species": "dog",
"age": 2
},
{
"name": "Fluffy",
"species": "cat",
"age": 4
}
],
"family": [
{
"name": "Mary",
"relation": "mother",
"age": 60
},
{
"name": "Tom",
"relation": "father",
"age": 62
},
{
"name": "Sarah",
"relation": "sister",
"age": 25
}
],
"job": {
"title": "Software Engineer",
"company": "Acme Co.",
"salary": 100000
}
}
위의 예시는 "name", "age", "city", "pets", "family", "job"을 Key로 가집니다
- "pets" 키의 Value는 2개의 객체를 포함하는 배열입니다. 각 객체는 "name", "species", "age"를 Key로 가지고, 그에 대응하는 Value를 가집니다.
- "family" 키의 Value는 3개의 객체를 포함하는 배열입니다. 각 객체는 "name", "relation", "age"를 Key로 가지고, 그에 대응하는 Value를 가집니다.
- "job"키의 Value는 1개의 객체입니다. 이 객체는 "title", "company", "salary"를 Key로 가지고, 그에 대응하는 Value를 가집니다.
JSON의 문제점?
1. 스키마(Schema)의 강제성 부재
- JSON은 스키마를 강제하지 않습니다. 즉, JSON 데이터의 구조, 필드 명, 데이터 타입 등을 명확하게 정의하지 않아도 된다는 말입니다. 이로 인해 무결성 검사와 유효성 검사와 같은 작업이 추가적으로 필요할 수 있습니다.
2. 보안 문제
- JSON은 JavaScript에서 사용되기 때문에, 코드 인젝션, 크로스 사이트 스크립팅(XSS) 등의 보안 문제가 발생할 수 있습니다. 이를 방지하기 위해서는 JSON 데이터를 신뢰할 수 있는 소스에서만 수신해야 하며, 데이터를 처리하는 안전한 방식을 사용해야 합니다.
3. 데이터 용량 문제
- JSON은 텍스트 형식으로 저장되기 때문에, 데이터 용량이 크다는 문제가 있습니다. 이런 문제는 대량의 데이터를 다루는 웹 어플리케이션에서 성능에 영향을 미칠 수 있습니다.
4. 날짜 및 시간 처리 문제
- JSON은 날짜와 시간을 표현하는 공식적인 표준이 없습니다. 따라서 다른 형식의 날짜-시간 데이터가 상호 작용할 때, 문제가 발생할 수 있습니다. 이런 문제를 해결하기 위해선 ISO 8601 표준을 따르는 방식으로 날짜와 시간을 처리해야 합니다.
5. 다른 언어 간 호환성 문제
- JSON은 모든 언어에서 기본적으로 지원되기 때문에, 다른 언어 간에 데이터를 교환하기에 매우 유용하다고 했습니다. 그런데 각 언어마다 JSON을 다루는 라이브러리나 패키지가 다르기 때문에, 서로 호환되지 않는 문제가 발생할 수 있습니다. 이를 방지하려면 JSON을 다루는 라이브러리를 선택할 때, 각 언어의 요구 사항을 고려해야 합니다.