본문 바로가기
비개발자를 위한 개발 상식

JSON, 무조건 이해 되는 기본 개념! feat. 데이터베이스 몰라도 됨

by keynotion 2023. 10. 15.
반응형

본 글 및 다음에 이어지는 세 개의 글은 "학교에서 알려주지 않는 17가지 실무 개발 기술 - 이기곤, 한빛미디어" 를 이해한 후 살을 덧붙여 재구성한 내용임을 밝힌다. 비개발자 관점에서 꼭 필요한 최소 기본 개념을 요약하여 전달하고자 한다.

프로그래밍을 공부할 때, 가장 처음 나오는 개념이 무엇일까? 마치, "수학의 정석" 을 딱 펼쳤을 때 "집합" 이 나오는 것처럼 말이다. 파이썬이건 뭐건, 어떤 프로그래밍 언어에서든지 가장 먼저 나오는 개념은 "자료형(Data type)" 이다. 도대체 그게 무엇이길래 가장 먼저 배워야만 하는 것일까? 자료형을 한글에 비유하자면 자음/모음 이고, 영어에 비유하자면 알파벳이다. 3색 볼펜으로 비유하자면, 빨간색 파란색 검정색을 칠할 수 있지만, 노란색을 칠할 수는 없는 것과 같다. 내가 가진 프로그래밍 "재료" 가 무엇인지 알아야 코딩을 할 수 있기 때문이다. 재료 없이는 프로그래밍을 할 수도 알 수도 없다.

 

JSON 설명한다고 하더니 갑자기 웬 자료형이냐고? JSON은 결국 데이터 통신할 때 필요한 재료를 담는 "그릇" 이기 때문이다. 재료를 담는 또 다른 그릇으로는 YAML과 XML이 있다. 데이터 통신할 때, 즉 정보를 주고 받을 때 사용하는 일정한 양식이라는 점에서 셋은 모두 동일하다. 각 양식은 저마다 특징이 있어서, 사용 목적에 따라 적절한 양식을 사용하면 된다. 그 중에서도 JSON은 가장 쉽고, 범용적이므로 중요하다. 상세히 이해하고 나면 YAML, XML을 더 잘 이해할 수 있다.

 

데이터 재료에 대한 간단한 설명

자, 그럼 우리가 사용 가능한 볼펜의 색에 무엇이 있을까? 매우 간단하다. "숫자", "문자", "표", "참/거짓" 이 전부다. 다음 예시를 보자.

  • A = 100
  • B = 안녕
  • C = [ (가로, 세로, 높이) = (10, 20, 30) ]
  • D = 참

여기서 조금 헷갈릴 수 있는 개념이 C와 D인데, 특히 표는 굳이 줄글로 표현하느라 저런 모양인 것이고, 실제로는 아래 엑셀 표를 떠올려 보면 쉽다.

가로 10
세로 20
높이 30

그리고 D는 말 그대로 담을 수 있는 재료가 참 또는 거짓 밖에 없는 재료라고 보면 된다. 스위치는 On/Off 밖에 없는 것처럼 말이다. 일반적으로 프로그래밍에서는 참 개념을 "1, True" 라고 표현하고, 거짓 개념은 "0, False" 라고 표현한다.

영어로 대화할 때 알파벳을 사용하는 것 처럼, 프로그래밍으로 소통할 때(데이터를 주고/받을 때)에는 숫자, 문자, 표, "참/거짓" 을 사용한다. 이것을 사람이 읽기 쉬운 형태로 정의한 것이 JSON이다. 사람이 읽기 쉽기 때문에 편리하다. 데이터를 "주고/받는" 대부분의 요즘 개발 환경에서는 JSON을 사용한다. 이와 비슷한 개념으로 YAML과 XML이 존재하는 것이다.

 

JSON 특징 살펴보기

JSON은 위에서 언급한 데이터 재료를 "키"와 "값" 으로 구조화시켜서 저장하는 텍스트 기반의 규격이다. 사람이 쉽게 읽고 수정할 수 있기 때문에 디버깅에 매우 유리하다. 즉, 생산성이 올라간다는 뜻이다. 서버와 클라이언트 간 데이터 통신을 위한 메시지 표준 규격으로 사용된다. 데이터베이스 스키마와 비슷한 형태로도 활용이 가능하며, MySQL 등 관계형 데이터베이스에서 정형화되지 않은 데이터 보관시 JSON이 많이 사용된다. 단점으로는, 관계형 데이터베이스의 장점인 인덱싱이 불가하다는 것인데, 인덱싱, 쿼리 기능을 위해서는 JSON 데이터를 테이블로 옮기는 작업이 필요하다.

JSON은 UTF-8 문자열 인코딩만 허용한다. 따라서 UTF-16 환경인 윈도우, 자바, EUC-KR 환경에서 JSON을 다룰 때에는 주의가 필요하다. 주석이 불가하다는 특징이 있어서, 설정 파일이나 데이터 구조 정의하는 파일에서 JSON을 사용하면 데이터에 대한 설명을 추가할 수 없다. 주석이 필요하다면 XML, YAML처럼 주석 지원 메시지 규격을 사용해야만 한다.

 

JSON 구조 이해하기 feat. 키(Key) & 값(Value)

아래와 같은 sample.json 파일을 살펴보자.

{
	"number": 12345,
	"pi": 3.14,
	"str": "text value"
	"null key": null,
	"object": {
		"str2": "text value 2",
		"object2": {
			"number2": 12345
		}
	},
	"num_array": [1, 2, 3, 4, 5],
	"str_array": ["one", "two", "three", "four", "five"]
}

일단 JSON은 데이터 묶음을 중괄호({}) 또는 대괄호([])로 표현한다. 중괄호는 객체를 의미하고, 대괄호는 배열을 의미한다. 데이터 유형 중 "표" 를 떠올리자. 실무에서는 대부분 객체(중괄호)를 선호한다. 배열은 숫자, 문자, 객체 중 한 가지 형태로만 표현 가능하므로 비효율적이다.

여기서, 큰따옴표(””)와 콜론(:) 쉼표(,)의 의미를 살펴보자. 큰따옴표로 감싼 문자열 데이터는 키(key)를 의미한다. 큰따옴표로 감싼 문자열만 사용 가능하고, 정수, 실수를 그대로 키로 사용하면 안된다. 콜론 뒤에 오는 데이터는 값(value)을 의미한다. 키와 값을 여러 개 나열할 때 쉼표(,)를 사용하고, 맨 마지막 데이터 뒤에는 쉼표를 사용하지 않는다.

 

참고. 문자 이스케이프

문자열 값 안에 큰따옴표를 담기 위해서는 역슬래시(\)를 사용하는데, 이것을 이스케이프 한다라고 표현한다.

{
  "str": "큰따옴표는 \\"이렇게\\" 표현한다."
}

결과

큰따옴표는 "이렇게" 표현한다.

 

탭 추가(\t), 개행(\n) 이스케이프 사용시,

{
	"str": "첫 번째 줄.\\n두\\t번째 줄."
}

결과

첫 번째 줄.
두    번째 줄.

 

 

다음 글에서는 JSON을 사용하는 보다 자세한 방법을 소개하고, 이어지는 글에서 YAML과 XML에 대해 안내하고자 한다.


참고 문헌

  • 학교에서 알려주지 않는 17가지 실무 개발 기술 - 이기곤, 한빛미디어

댓글