JSONB는 PostgreSQL이 JSON 데이터를 분해된 이진 형태로 저장하는 자료형이다. 입력 원문을 매번 다시 해석하는 비용을 줄이고 내용에 대한 연산과 인덱스를 지원한다. 파일의 공백과 키 순서를 그대로 보존하기 위한 형식은 아니다.
JSON과의 차이
PostgreSQL의 json 타입은 입력 텍스트를 보존하지만 jsonb는 의미 있는 값 중심으로 저장한다. 객체 키 순서와 불필요한 공백을 보존하지 않으며, 같은 키가 반복되면 마지막 값만 남는다. 원문 전체를 그대로 보관해야 하는 요구와 내용 검색 요구를 구분해야 한다. 공식 JSON 타입 문서
문서 부가 정보의 예
문서마다 다른 부가 정보를 저장할 때 JSONB가 편리할 수 있다. 영상 문서는 재생 시간, 소프트웨어 문서는 저장소 주소처럼 서로 다른 속성이 있기 때문이다.
| 정보 | 저장 설계의 예 |
|---|---|
| 문서 번호·공개 상태 | 규칙이 분명한 일반 열 |
| 선택적 부가 속성 | JSONB 객체 |
| 작성자와 문서의 관계 | 별도 참조 열 |
이 구분은 하나의 예시이며 실제 요구에 따라 바뀔 수 있다. 자주 검색하거나 정렬하는 속성은 일반 열로 분리할지, 표현식 인덱스를 둘지 함께 검토한다.
유연성과 규칙
JSONB에 넣는다고 데이터 모델이 필요 없어지는 것은 아니다. 같은 속성을 어떤 문서에서는 문자열, 다른 문서에서는 숫자로 저장하면 조회와 검증이 복잡해진다. 허용 키와 타입, 누락 값의 의미를 정해야 한다. JSON 연산과 누락 값 처리
인덱스도 검색 연산에 맞게 선택해야 한다. 모든 JSONB 쿼리가 인덱스를 자동 활용하는 것은 아니다. 큰 객체를 반복 수정하는 비용과 동시 수정 범위도 살펴야 한다. 부가 속성 전체를 무제한으로 쌓기보다 안정적인 핵심 열과 확장 가능한 객체의 책임을 나누면 관리하기 쉽다.