const-tommy.dev
기록을 불러오는 중입니다
json은 텍스트 원본 그대로, jsonb는 파싱한 이진(binary) 구조로 저장한다.json과 jsonb 두 가지로 나뉜다.json: 입력한 문자열을 그대로 저장. 쓰기는 빠르지만, 값을 꺼낼 때마다 매번 다시 파싱해야 해서 읽기·검색이 느리다. 키 순서와 공백까지 원본 보존.jsonb: 저장 시 한 번 파싱해서 이진 구조로 보관(b = binary). 쓰기는 살짝 느리지만, 내부 값으로 검색·필터·인덱싱(GIN 인덱스)이 가능하다. 키 순서·공백은 보존되지 않음.jsonb를 쓴다.-- 분석 결과를 jsonb 컬럼으로 저장
create table insights (
id uuid primary key default gen_random_uuid(),
result jsonb not null,
created_at timestamptz default now()
);
-- jsonb는 내부 값으로 검색이 가능하다
-- result 안의 "category" 키가 'unmet_demand'인 행만 조회
select * from insights
where result ->> 'category' = 'unmet_demand';
-- 검색이 잦다면 GIN 인덱스로 속도를 높일 수 있다 (json은 불가)
create index idx_insights_result on insights using gin (result);->와 ->>의 차이는?
A. 둘 다 jsonb에서 값을 꺼내는 연산자인데, ->는 결과를 jsonb 타입으로, ->>는 text 타입으로 반환한다. 문자열 비교를 하려면 ->>를 써야 한다.json은 언제 쓰나?
A. 원본 텍스트를 토씨 하나 안 바꾸고 보존해야 하거나(감사 로그 등), 저장만 하고 내부를 들여다볼 일이 없을 때 정도. 그 외엔 jsonb가 기본값.jsonb를 쓴다 — 내부 값으로 검색·인덱싱이 되기 때문.json은 텍스트 원본 보존, jsonb는 파싱한 이진 구조. 쓰기는 json이, 읽기·검색은 jsonb가 빠르다.