PostgreSQL의 JSONB 타입이란

5 min read
TL;DR
  • PostgreSQL JSON과 JSONB 차이를 성능·인덱싱·운영 관점에서 명확히 정리했습니다.
  • 문서 저장 방식을 결정할 때 어떤 선택이 유리한지, 근거 있는 기준을 빠르게 세울 수 있습니다.
Cover

들어가기 전

JSONB는 PostgreSQL 데이터베이스에서 JSON 데이터를 저장하는 방식입니다. PostgreSQL에는 jsonjsonb 두 타입이 모두 존재하며, 같은 JSON 문서를 저장하더라도 저장 방식과 성능 특성이 다릅니다. 처음 PostgreSQL을 사용하며 JSONB를 접했을 때, 이 낯선 타입을 단순히 JSON과 같다고 생각하고 별다른 고민 없이 사용했습니다. 하지만 사용 중 문제가 발생하면서, 확인했던 내용들을 정리해보았습니다.

JSON

JSON 포맷은 텍스트 기반의 경량 데이터 교환 포맷입니다. 여담이지만 10년 전쯤 제가 처음 개발을 시작할 때는 SOAP나 XML 같은 데이터 포맷도 종종 볼 수 있었는데, 현재는 JSON이 보편화되었습니다.

데이터베이스에서의 JSON

여러 데이터베이스에서 JSON 타입을 도입했습니다. 이는 위에서 언급한 것처럼 JSON 포맷이 보편화되었고, JSON 데이터를 직접 저장하고 처리할 수 있는 기능에 대한 수요가 커졌기 때문입니다.

MySQL에서의 JSON 타입: MySQL도 JSON 전용 타입을 제공하지만, PostgreSQL의 json/jsonb와는 구현 방식과 연산자 생태계가 다릅니다. 이 글에서는 PostgreSQL 내부의 jsonjsonb 차이에 집중합니다.

PostgreSQL에서의 JSON / JSONB: PostgreSQL은 9.2에서 json 타입을, 9.4에서 jsonb 타입을 추가했습니다. json은 입력한 텍스트를 거의 그대로 보존하고, jsonb는 파싱된 이진 표현으로 저장합니다.

  • 비교 테이블
JSONJSONB
StoragePreserves the original textStores a parsed binary representation
Input costLowerHigher
Reparsing requiredYes, many operations need reparsingNo, it is already decomposed for processing
IndexingDoesn't support general GIN indexingSupported
Data processingSlower for queries/operatorsFaster for most queries/operators
WhitespacesPreserves whitespaces and key orderRemoves insignificant whitespace and does not preserve order
DuplicatesPreserved in the original textDuplicate keys collapse to the last value

장점은 JSONB 데이터에 대한 인덱스 생성이 가능해 대규모 데이터셋에서 검색 속도가 빨라진다는 점입니다. 또한, 연산자와 함수 사용 시 이미 파싱된 형태라 처리 비용이 줄어드는 경우가 많습니다.

단점으로는 JSONB가 데이터 저장 시 내부 변환 과정을 거쳐 입력 비용이 더 들 수 있다는 점입니다. 또한, 공백과 키 순서가 보존되지 않아 원본 문서와 완전히 동일한 텍스트를 그대로 돌려받는 용도에는 맞지 않을 수 있습니다.

JSONB에서의 데이터 비교

jsonb 컬럼은 문자열이 아니라 jsonb 값으로 비교하는 것이 일반적입니다. 따라서 문자열 리터럴과 직접 비교할 때는 ::jsonb로 타입 변환이 필요합니다.

SELECT * 
FROM table_name 
WHERE jsonb_column_name = 'JSON_string_value'::jsonb;

저장된 값과 동일한지 확인하려면 위와 같이 ::jsonb로 타입 변환 후 비교해야 합니다.

JSONB 쿼리와 관련된 더 많은 가이드는 PostgreSQL 공식 문서와 아래 링크에서 확인할 수 있습니다.

이와 같이 데이터베이스에서 JSON 타입을 다루는 방법을 알면, 작동 방식과 성능적 차이를 예측할 수 있습니다.