PostgreSQL데이터 조작

JSONB 기본과 조회

관계형 스키마 안에서 유연한 속성을 함께 저장할 때 많이 쓰는 JSONB와, 기본 조회 연산을 어떻게 읽어야 하는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

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