기본 패턴
sql
SELECT
profile ->> 'nickname' AS nickname
FROM users
WHERE profile ->> 'country' = 'KR';설명
- PostgreSQL의
jsonb는 JSON 형태 데이터를 이진 형식으로 저장하고, 검색과 연산에 더 적합하게 만든 타입입니다. 관계형 컬럼만으로는 너무 자주 바뀌는 속성을 담기 어려울 때 자주 선택됩니다. - 핵심은 "유연함"과 "구조"의 균형입니다. JSONB를 쓰면 새로운 속성을 빠르게 넣을 수 있지만, 모든 것을 JSONB로 밀어 넣으면 관계형 데이터베이스의 장점인 명확한 제약과 타입 관리가 약해질 수 있습니다.
->는 JSON 값으로,->>는 텍스트 값으로 꺼낸다고 이해하면 기본 조회가 쉬워집니다. 필터링할 때는 보통->>처럼 비교 가능한 텍스트 형태가 자주 쓰입니다.- JSONB는 이벤트 payload, 추가 메타데이터, 외부 API 응답 저장, 확장 속성 저장에 잘 맞습니다. 반면 핵심 식별자나 강한 제약이 필요한 데이터는 일반 컬럼이 더 자연스럽습니다.
- 실무에서는 "스키마를 미루는 도구"로만 보기보다, 어떤 데이터가 자주 바뀌고 어떤 데이터가 관계형 규칙을 꼭 지켜야 하는지를 구분하는 데 의미가 있습니다.
빠른 정리
| 연산자 | 의미 |
|---|---|
-> | JSON 값 꺼내기 |
->> | 텍스트 값 꺼내기 |
| 잘 맞는 곳 | 유연한 메타데이터, 외부 payload |
| 덜 맞는 곳 | 강한 제약이 필요한 핵심 컬럼 |
주의할 점
JSONB는 편하지만 "컬럼 설계를 나중으로 미루는 만능 해결책"은 아닙니다. 핵심 키와 자주 조인되는 값까지 모두 JSONB에 넣기 시작하면 제약과 인덱스 설계가 오히려 더 어려워질 수 있습니다.
참고 링크
2 sources