PostgreSQL을 사용하다 보면 컬럼 타입으로
JSON과 JSONB가 따로 존재하는 걸 보게 된다.
처음에는
“JSON이면 JSON이지, 왜 B가 붙은 게 따로 있지?”
라는 생각이 들었고,
실제로는 대부분 JSONB를 사용한다고 해서 정리해보게 되었다.
JSONB는 JSON 데이터를 이진(Binary) 형태로 저장하는 PostgreSQL의 데이터 타입이다.
JSONB는 단순히 JSON 문자열을 저장하는 것이 아니라,
PostgreSQL이 내부적으로 파싱해서 구조화된 형태로 저장한다.
PostgreSQL에는 JSON과 JSONB 두 가지 타입이 있다.
| 구분 | JSON | JSONB |
|---|---|---|
| 저장 방식 | 문자열 그대로 저장 | 이진(Binary) 형태로 저장 |
| 검색 속도 | 느림 | 빠름 |
| 인덱스 | 불가능 | 가능 |
| 사용 빈도 | 낮음 | 높음 |
JSONB는 데이터를 저장할 때 한 번 파싱해서
이진 형태로 저장한다.
그래서:
반면 JSON 타입은
문자열 그대로 저장되기 때문에
조회할 때마다 파싱이 필요하다.
JSONB 컬럼을 가진 테이블 예시다.
CREATE TABLE orders (
id SERIAL,
info JSONB
);
데이터를 JSON 형태로 저장할 수 있다.
INSERT INTO orders (info)
VALUES ('{"product": "book", "price": 10000}');
JSONB 내부 값 조회도 가능하다.
SELECT info->>'product'
FROM orders;
이렇게 JSON 구조 안의 값에 바로 접근할 수 있다.
JSONB는 다음과 같은 경우에 유용하다.
예를 들면:
JSONB가 편리하다고 해서
모든 데이터를 JSONB로 저장하는 것은 좋지 않다.
이런 경우에는
일반 컬럼으로 분리하는 것이 더 좋다.
JSONB는 보조적인 용도로 사용하는 게 적절하다.
JSONB는 PostgreSQL에서
유연한 구조의 데이터를 효율적으로 저장하고 조회할 수 있는 데이터 타입이다.
구조가 자주 바뀌거나
모든 필드를 컬럼으로 만들기 애매한 경우에
특히 강점을 가진다.