[PostgreSQL] json and jsonb

C__W.A·2025년 1월 22일

SQL

목록 보기
5/5
post-thumbnail

PostgreSQL에서 JSON과 JSONB는 JSON 데이터를 저장하고 처리하기 위한 데이터 타입입니다. 두 타입 모두 JSON 포맷의 데이터를 저장할 수 있지만, 내부적으로 데이터를 처리하는 방식과 성능이 다릅니다.

✅ JSON 데이터 타입

특징

  • 텍스트 형식으로 데이터를 저장합니다.
  • 데이터를 그대로 저장하며, 입력된 JSON의 구조를 변경하지 않습니다.
  • 데이터 처리 시 항상 파싱(parse)이 필요합니다.
  • 읽기 전용 작업(read operations)에는 적합하지만, 데이터 검색이나 업데이트에는 비효율적입니다.

장점

  • 데이터의 원본 구조를 유지합니다.
  • 사람이 읽을 수 있는 JSON 데이터 그대로 저장됩니다.

단점

데이터 처리 속도가 느립니다.
인덱싱을 지원하지 않으므로 검색 작업이 비효율적입니다

✅ JSONB 데이터 타입

특징

  • JSON 데이터를 바이너리 형식으로 저장합니다.
  • 입력된 데이터를 파싱하여 저장하며, 키 순서를 정렬하고 중복 키를 제거합니다.
  • 검색 및 업데이트 작업에 최적화되어 있습니다.
  • GIN 인덱스(Generalized Inverted Index)를 지원하여, JSON 필드를 빠르게 검색할 수 있습니다.

장점

  • 빠른 데이터 처리 및 검색이 가능합니다.
  • 중복된 키를 제거하고, 데이터 구조를 정렬하여 저장합니다.
  • 다양한 JSON 연산자를 활용할 수 있습니다.

단점

  • 데이터를 저장할 때 추가 처리(파싱 및 변환)가 필요하므로 저장 속도가 JSON보다 느립니다.
  • 사람이 직접 읽기는 어렵습니다.

✍️ 정리

항목 JSON JSONB
저장 형식 텍스트 형식으로 저장 바이너리 형식으로 저장
데이터 입력 시 처리 입력 데이터 그대로 저장 데이터를 파싱하고 정렬 후 저장
검색 속도 느림 빠름
인덱스 지원 지원하지 않음 GIN, BTREE 인덱스를 지원
데이터 구조 유지 입력된 JSON 구조를 그대로 유지 키를 정렬하고 중복 키 제거
저장 공간 더 적게 사용 (파싱 정보 미포함) 더 많이 사용 (파싱된 데이터 포함)

사용 예제

🧑‍💻 데이터 생성 및 데이터 삽입

-- JSON 타입
CREATE TABLE json_example (
    id serial PRIMARY KEY,
    data json
);

-- JSONB 타입
CREATE TABLE jsonb_example (
    id serial PRIMARY KEY,
    data jsonb
);

-- 데이터 삽입
INSERT INTO json_example (data) 
VALUES (json_build_object('name', 'Alice', 'age', 25));

INSERT INTO jsonb_example (data) 
VALUES (json_build_object('name', 'Bob', 'age', 30));

🟢 json_build_object

PostgreSQL 함수로, 키-값 쌍을 받아 JSON 객체를 생성합니다.
결과는 JSON 형식으로 반환되며, JSONB 컬럼에도 사용할 수 있습니다.

🧑‍💻 데이터 조회

-- 특정 키의 값 추출 (JSON과 JSONB 동일)
SELECT data->>'name' AS name
FROM jsonb_example;

-- 조건 검색 (JSONB에서 더 빠름)
SELECT *
FROM jsonb_example
WHERE data->>'age' = '30';
profile
기술은 문제를 해결하기 위해 존재한다

0개의 댓글