한 글에서 PostgreSQL의 JSONB 유형을 마스터하기
PostgreSQL의 JSONB 유형을 효과적으로 저장, 질의하고 조작하는 방법을 배웁니다.
현대 응용 프로그램 개발에서는 비구조화 데이터를 처리하고 저장하는 것이 점점 더 일반적이게 되고 있습니다. PostgreSQL의 JSONB 유형은 개발자들이 효과적으로 JSON 데이터를 저장하고 질의할 수 있는 강력한 도구를 제공합니다. 이 글에서는 JSONB 유형의 개념과 사용 방법을 자세히 살펴보고 특정 코드 예제를 통해 그 강력한 기능을 보여줍니다.
JSONB란 무엇인가?
JSONB는 JSON 데이터를 이진 형식으로 저장하는 PostgreSQL의 데이터 유형입니다. 일반 JSON 유형과 달리 JSONB는 질의와 조작에서 더 효율적입니다. JSON 데이터 처리를 단순화하는 다양한 연산자와 함수를 지원합니다. 또한, JSONB는 B-트리, 해시, GIN, 및 GiST 인덱스를 포함하는 여러 인덱스 유형을 지원하여 질의 성능을 더욱 향상시킵니다.
JSONB 유형 생성하기
JSONB 유형으로 테이블 생성하기
먼저, JSONB 열이 있는 테이블을 생성해 봅시다. 'products' 테이블이 있고, 제품 정보를 JSONB 유형으로 저장한다고 가정해 봅시다.
JSONB 데이터 입력하기
단순한 'INSERT' 문을 사용하여 JSON 데이터를 JSONB 필드에 입력할 수 있습니다.
JSONB 데이터 질의하기
JSONB 필드에서 값 추출하기
'->>' 연산자를 사용하여 JSONB 필드에서 텍스트 값을 추출할 수 있습니다. 다음 예제는 제품의 브랜드 정보를 추출하는 방법을 보여줍니다.
JSONB와 함께 중첩된 값 추출하기
'->'와 '->>' 연산자의 조합을 사용하여 JSON 구조 내에 중첩된 값을 추출할 수 있습니다. 다음 예제는 제품의 CPU 정보를 추출하는 방법을 보여줍니다.
JSONB 경로를 사용하여 값 추출하기
'#>>' 연산자를 사용하여 JSON 데이터 내 특정 경로의 값을 추출할 수 있습니다. 다음 예제는 저장 정보를 추출하는 방법을 보여줍니다.
포함 물 검색에 '@>' 연산자 사용하기
'@>' 연산자는 한 JSONB 객체가 다른 JSONB 객체를 포함하고 있는지 확인합니다. 다음 예제는 특정 브랜드 의 제품을 질의하는 방법을 보여줍니다.
JSONB 데이터 수정하기
JSONB 데이터 업데이트하기
'jsonb_set' 함수를 사용하여 JSONB 데이터를 업데이트할 수 있습니다. 이 함수는 지정된 경로의 값을 업데이트합니다. 다음 예제는 제품의 저장 정보를 업데이트하는 방법을 보여줍니다.
JSONB 데이터에서 최상위 필드 제거하기
'-' 연산자를 사용하여 JSONB 데이터에서 최상위 필드를 제거할 수 있습니다. 이 연산자는 JSONB 객체에서 지정된 키를 삭제합니다. 다음 예제는 제품 세부 정보에서 최상위 필드를 제거하는 방법을 보여줍니다.
JSONB 데이터에서 중첩된 필드 제거하기
'#-' 연산자를 사용하여 JSONB 데이터에서 특정 경로의 요소를 제거할 수 있습니다. 이 연산자는 지정된 경로의 키를 삭제합니다. 다음 예제는 제품 사양에서 CPU 정보를 삭제하는 방법을 보여줍니다.
고급 JSONB 질의
JSONB 배열 사용하기
JSONB 데이터는 배열을 포함할 수 있으며, 이러한 데이터를 처리하기 위해 배열 관련 연산자를 사용할 수 있습니다. 다음 예제는 여러 태그가 있는 제품을 저장하고 질의하는 방법을 보여줍니다.
위의 예제에서는 또한 '?' 연산자를 사용하여 JSONB 배열이 특정 요소를 포함하고 있는지 확인할 수 있습니다:
JSONB 데이터 병합하기
'||' 연산자를 사용하여 두 JSONB 객체를 병합할 수 있습니다. 이 연산자는 두 JSONB 객체를 하나로 결합합니다. 다음 예제는 존재하는 제품 세부 정보에 새로운 사양을 병합하는 방법을 보여줍니다.
JSONB 데이터 집계하기
JSONB 데이터를 처리하기 위해 집계 함수를 사용할 수 있습니다. 예를 들어, 각 브랜드의 제품 수를 세는 것이 가능합니다.
JSONB 인덱싱 및 성능 최적화
JSONB 데이터를 이용한 질의 성능을 향상시키기 위해, JSONB 필드 내 특정 키에 대한 인덱스를 생성할 수 있습니다. 다른 질의 요구에 따라 적절한 유형의 인덱스를 선택하는 것이 중요합 니다.
- GIN 인덱스: 다중 값 데이터, 배열, 전체 텍스트 검색을 포함하는 복잡한 질의에 적합합니다.
- B-트리 인덱스: 단순한 키-값 쌍 질의, 범위 질의 및 정렬 작업에 적합합니다.
적절하게 선택하고 생성한 인덱스는 JSONB 데이터 질의의 성능을 크게 향상시킬 수 있습니다.
GIN 인덱스 생성하기
GIN 인덱스는 다중 값을 가진 데이터와 배열을 이용한 질의를 가속화하는 데 이상적입니다. 예를 들어, 앞서 언급한 'tags' 배열에 대한 GIN 인덱스를 생성하여 배열 요소에 대한 질의를 가속화할 수 있습니다.
B-트리 인덱스 생성하기
단순한 키-값 쌍 질의에 대해 B-트리 인덱스는 성능을 크게 향상시킬 수 있습니다. B-트리 인덱스는 범위 질의와 정렬 작업에 적합합니다. 다음 예제는 'details' 필드의 'model' 키에 대한 B-트리 인덱스를 생성하는 방법을 보여줍니다.
결론
PostgreSQL의 JSONB 유형은 JSON 데이터를 처리하기 위한 강력하고 유연한 해결책을 제공합니다. 이 글의 소개와 예제를 통해, 이제 JSONB 유형을 사용하는 방법에 대해 종합적인 이해를 갖추게 됐을 것입니다. 이 기법들을 습득함으로써 비구조화 데이터를 효과적으로 처리하고 질의할 수 있어, 응용 프로그램의 성능과 유연성을 향상시킬 수 있습니다.