JSON

옥영진·2020년 10월 22일
0
post-custom-banner

JSON 이란

JSON(JavaScript Object Notation)은 숫자, 문자 등 여러 형태의 데이터를 키와 값으로 구조화된 객체에 담아 처리하는 데이터 포맷 중 하나이다. JSON 데이터는 텍스트 기반이기 때문에 사람이 읽고 수정하기 쉬워 디버깅하기 편하다. 이로 인해 JSON을 사용하면 생산성이 증가한다.

JSON 특징

  • JSON 규격은 UTF-8 문자열 인코딩은 허용하지만 BOM(Byte Order Mark)은 원칙적으로 허용하지 않는다.
  • 주석을 지원하지 않기 때문에 주석이 필요할 경우 XML, YAML 등 주석을 지원하는 메세지 규격을 사용해야 한다.

BOM(Byte Order Mark)
유니코드가 리틀 엔디언(Little Endian) 인지 빅 엔디언(Big Endian) 인지 아니면 UTF-8 인지 쉽게 알 수 있도록 문서 맨 앞에 추가하는 바이트 값을 말한다. 이 BOM 값을 확인하여 어떤 인코딩 방식인지 알고 디코딩을 진행한다.

JSON 구조

 {
    "이름": "홍길동",
    "나이": 25,
    "성별": "여",
    "주소": "서울특별시 양천구 목동",
    "특기": ["농구", "도술"],
    "가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},
    "회사": "경기 수원시 팔달구 우만동"
 }

모든 JSON 데이터는 중괄호나 대괄호로 시작하는데, 다양한 형태의 데이터를 저장하기 위해 보통 객체를 의미하는 중괄호로 시작한다.

키와 값

콜론 앞에 있는 큰따옴표로 감싸진 데이터를 키, 뒤에 있는 데이터를 값이라고 부른다. 키는 무조건 큰따옴표로 감싼 문자열만 사용해야 한다. 값은 여러 형태의 데이터를 사용할 수 있는데, 숫자, 문자, 널(Null) 값뿐만 아니라 JSON 객체를 값으로도 사용할 수 있다. 여러 개의 키와 값은 쉼표로 구분하며 마지막에는 붙이지 않는다.

직렬화(Serialization) : JSON 데이터를 클래스, 맵, 리스트 등의 객체로 변환하는 것.
역직렬화(Deserialization) : 반대로 객체를 JSON 데이터로 변환하는 것.

JSON의 한계

트래픽 오버헤드

JSON 데이터는 텍스트 기반이여서 읽기는 쉽지만, 실질적인 데이터를 표현하는 데 비용이 크다. 물론 압축하면 바이너리 데이터와 비슷해질 순 있지만 압축하는 것 역시 CPU 자원을 사용하는 것이다. 따라서 클라이언트와 많은 메세지를 주고 받는 서버 애플리케이션 입장에서는 충분한 부하 테스트를 거친 후에 사용하는 것이 좋다.

메세지 호환성 유지의 어려움

JSON과 같이 텍스트 기반 데이터가 가지는 공통적인 단점이다. 서버에서 사용하는 JSON 규격을 변경하면 해당 메세지를 사용하는 모든 클라이언트에서도 수정이 필요하다. 그래서 보통, 규격을 변경해야 할 경우 새 규격을 사용한다.

profile
안녕하세요 함께 공부합시다
post-custom-banner

0개의 댓글