JSONB 쿼리 심화 — 연산자 총정리 · GIN 인덱싱 · CI4에서 다루기
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. attrs->'tags'->>0 의 반환 타입은?
💡 ->> 연산자는 항상 TEXT(문자열)를 반환합니다. -> 연산자는 JSONB를 반환합니다. 따라서 attrs->'tags'->>0은 배열의 첫 번째 요소를 텍스트로 반환합니다.
Q2. GIN 인덱스가 가장 효과적으로 활용되는 연산자는?
💡 @> (포함) 연산자는 GIN 인덱스를 직접 활용합니다. ->> 와 = 비교는 표현식 인덱스가 있어야 하고, LIKE는 시퀀셜 스캔이 필요합니다. GIN 인덱스로 최적화하려면 @> 연산자를 사용하세요.
Q3. jsonb_set(attrs, '{discount,rate}', '0.2')에서 경로 '{discount,rate}'의 의미는?
💡 jsonb_set의 두 번째 인자는 중첩 경로를 나타내는 배열입니다. '{discount,rate}'는 attrs 객체의 discount 키 안에 있는 rate 키를 가리킵니다. 중첩된 JSON 구조에서 특정 경로의 값만 수정할 때 사용합니다.
Q4. JSONB에서 숫자 비교 시 (attrs->>'ram')::int가 필요한 이유는?
💡 ->> 연산자는 항상 TEXT를 반환합니다. 텍스트 비교는 사전순 정렬을 하므로 '9' > '16'이 됩니다. 숫자 비교를 올바르게 하려면 ::int, ::numeric 등으로 명시적 캐스팅이 필요합니다.
Q5. attrs || '{"color":"red"}'::jsonb 의 동작은?
💡 || 연산자는 두 JSONB 객체를 병합합니다. 오른쪽 객체의 값이 우선되므로, 같은 키가 있으면 오른쪽 값으로 덮어씁니다. 기존 키는 유지되고 새 키가 추가됩니다. attrs에 color:red가 추가됩니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.