PostgreSQL은 JSON 데이터를 처리하는 강력한 기능을 제공하며
특히 JSONB 데이터 타입은 복잡한 데이터를 효율적으로 저장하고 검색할 수 있는 유용한 도구입니다.
이번 글에서는 PostgreSQL의 JSONB를 활용해 복잡한 데이터를 처리하는 방법을 실제 코드와 함께 알아보겠습니다.
1. JSONB란?
JSONB
는 PostgreSQL에서 제공하는 이진 JSON 데이터 타입으로, JSON 데이터를 바이너리 형태로 저장하여 빠른 조회와 효율적인 인덱싱을 제공합니다. 일반 JSON과 비교했을 때 검색 속도와 공간 효율성에서 뛰어난 성능을 발휘합니다.
JSON과 JSONB의 차이
JSON | JSONB |
---|---|
텍스트 형태로 저장 | 바이너리 형태로 저장 |
검색 속도 느림 | 검색 속도 빠름 |
공백 및 키 순서 유지 | 공백 및 키 순서 무시 |
2. JSONB 데이터 처리
2.1 테이블 생성
JSONB 데이터를 저장하기 위한 테이블을 생성합니다.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
data JSONB
);
2.2 데이터 삽입
JSON 데이터를 삽입할 때는 JSONB
타입으로 변환하여 저장합니다.
INSERT INTO products (data) VALUES
('{"name": "Laptop", "brand": "Dell", "price": 1200, "specs": {"cpu": "i7", "ram": "16GB"}}'),
('{"name": "Phone", "brand": "Samsung", "price": 800, "specs": {"cpu": "Exynos", "ram": "8GB"}}');
2.3 데이터 조회
JSONB 데이터를 효율적으로 조회하는 다양한 방법을 소개합니다.
1) 특정 키 값 조회
-- 제품 이름 가져오기
SELECT data->>'name' AS name FROM products;
결과:
name
-----
Laptop
Phone
2) 중첩된 데이터 조회
중첩된 JSON 데이터에서 특정 값을 가져올 수 있습니다.
-- 제품의 RAM 정보 가져오기
SELECT data->'specs'->>'ram' AS ram FROM products;
결과:
ram
-----
16GB
8GB
2.4 데이터 업데이트
JSONB 데이터를 부분적으로 업데이트할 수 있습니다.
-- 가격 정보 업데이트
UPDATE products
SET data = jsonb_set(data, '{price}', '1000')
WHERE data->>'name' = 'Laptop';
2.5 JSONB 인덱싱
JSONB 데이터를 효율적으로 검색하려면 GIN 인덱스를 활용합니다.
-- GIN 인덱스 생성
CREATE INDEX idx_products_data ON products USING gin (data);
-- 특정 조건 검색 (브랜드가 Dell인 제품)
SELECT * FROM products
WHERE data @> '{"brand": "Dell"}';
결과: GIN 인덱스를 사용하면 조건 검색 속도가 크게 향상됩니다.
3. JSONB 활용 예제
3.1 통계 데이터 분석
JSONB를 활용해 통계 데이터를 처리하는 방법입니다.
-- 평균 가격 계산
SELECT AVG((data->>'price')::NUMERIC) AS avg_price FROM products;
3.2 데이터 집계
JSONB 데이터를 집계하여 통계를 구할 수 있습니다.
-- 브랜드별 제품 수 집계
SELECT data->>'brand' AS brand, COUNT(*) AS product_count
FROM products
GROUP BY data->>'brand';
결과:
brand | product_count
---------|--------------
Dell | 1
Samsung | 1
4. JSONB 사용 시 주의 사항
- JSONB는 비정규화된 데이터를 저장할 때 유용하지만, 관계형 데이터베이스의 장점을 놓치지 않도록 설계에 유의해야 합니다.
- 대량의 JSONB 데이터를 저장할 경우 GIN 인덱스를 적극 활용하세요.
- JSONB를 자주 수정해야 하는 경우 성능 문제가 발생할 수 있으므로 필요한 데이터만 저장하도록 최적화하세요.
결론
PostgreSQL의 JSONB는 복잡한 데이터를 처리하는 데 매우 강력한 도구입니다.
이 글에서 소개한 기능과 예제를 활용하면 JSON 데이터를 보다 효율적으로 저장, 검색, 분석할 수 있습니다.
PostgreSQL JSONB로 데이터 처리 효율성을 높여보세요!
'DB' 카테고리의 다른 글
트랜잭션 격리 수준 완벽 가이드: 실무에서 만나는 문제와 해결법 (0) | 2025.01.21 |
---|---|
데이터베이스 파티셔닝 전략 비교: MySQL vs PostgreSQL (0) | 2025.01.21 |
[Oracle] ORA-04036 에러 해결 및 SGA와 PGA 메모리 설정 가이드 (5) | 2025.01.17 |
[Oracle] Oracle Text 대량 텍스트 색인화 (feat. 상품검색기능) (7) | 2024.06.07 |
Oracle DB 관리자 필수 가이드: 기본 쿼리로 데이터베이스 리소스 정보 확인하기 (3) | 2024.05.22 |