쓰기에 알맞은 세 경우
- 여러 출처의 이벤트나 감사 기록처럼 모양이 실제로 달라져.
- 가능한 속성이 50개여도 각 행은 5-10개만 쓰는 희소 데이터야.
- 사용자 설정처럼 키 집합이 시간에 따라 진화해.
피해야 할 세 핑계
마이그레이션을 피하려고, 막연히 유연하다는 이유로, ORM이 쉽게 지원한다는 이유로 모든 값을 JSONB에 넣지 마. 검증 부담을 모든 소비자에게 떠넘기게 돼.
안정된 열과 가변 영역을 함께 써
식별자·종류·시각처럼 안정된 값은 NOT NULL·CHECK·외래 키가 있는 열에 두고, 정말 달라지는 payload만 JSONB에 둬. 관계형 정합성과 JSON 유연성을 동시에 얻는 가장 흔한 답이야.