TIL

PostgreSQL JSON 데이터 활용 II

빈코 2023. 6. 1. 10:32

오늘은 저번 포스팅에 이어 PostgreSQL에서 JSON 데이터를 활용하는 더 다양한 방법들을 소개하려고 합니다😁

 

개요

PostgreSQL JSON Data

 

저번 포스팅에서는 JSON 데이터를 가져오는 다양한 연산자와 집계함수에 대해 설명했습니다. 이번 포스팅에서는 JSON과 JSONB의 차이, JSON 객체를 생성하는 방법, JSONB 값을 배열로 집계하는 방법 등 더 다양한 함수들을 소개하려 합니다.

 

JSON과 JSONB의 차이📙

가장 큰 차이점은 JSON은 입력받은 텍스트 값을 그대로 DB에 저장하기 때문에 DB에 INSERT 할 때는 성능이 좋습니다. 하지만 JSONB는 입력받은 문자열에서 공백을 제거해 주고, 인덱싱 처리를 하기 때문에 DB에 INSERT 할 때 쓰기 비용이 발생합니다. 이렇게만 본다면 성능이 좋은 JSON을 자주 사용할텐데 개발자들은 JSONB를 사용할 것을 권장합니다. 왜 그럴까요?

 

언급했던 것처럼 JSONB에서 제공하는 인덱싱 기능이 있기 때문입니다. 프로젝트를 진행하다 보면 데이터를 삽입하는 것보다 조회하는 로직이 월등히 많을 수밖에 없기 때문에, 쓰기 비용이 들더라도 인덱싱이 있는 JSONB의 사용을 권장하는 것입니다. 이밖에도 JSON과 JSONB의 공통점은 둘 다 JSON 포맷 유효성을 확인합니다.

 

json_build_object📘

json_build_obejct는 키-값 쌍을 사용하여 JSON 객체를 생성합니다. 

select jsonb_build_object('name', 'Binco', 'age', 30);

JSON Data

결괏값을 보시면 JSON 형태로 객체가 생성된 것을 확인할 수 있었습니다.

 

하지만, 실무에서는 실제 DB 테이블에서 배열로 집계해야 할 경우도 왕왕 있습니다. 그럴 때는 jsonb_agg 함수와 같이 사용하시면 쉽게 원하는 값을 추출할 수 있습니다. 예시 테이블 policy_t 테이블을 만들고 service_type, policy_type 칼럼 두 개를 예제로 사용해 보겠습니다.

policy_t Table

select jsonb_agg(jsonb_build_object
	('service_type', service_type, 'policy_type', policy_type)) 
from policy_t;

Result

 

jsonb_extract_path📒

jsonb_extract_path 함수는 JSON 객체에서 특정 키에 해당하는 값을 추출합니다.

select jsonb_extract_path('{"name" : "Binco", "age" : 30}', 'name');

Result

 

jsonb_array_elements📗

jsonb_array_elements 함수는 JSON 배열을 각 원소로 분리하여 반환합니다.

select jsonb_array_elements('[1,2,3]');

Result

 

 


👨‍👩‍👦‍👦 오픈채팅방 운영

취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁

 

참여코드 : 456456

https://open.kakao.com/o/gVHZP8dg

 

비전공 개발자 취업 준비방(질문&답변)

#비전공 #개발자 #취업 #멘토링 #부트캠프 #국비지원 #백엔드 #프론트엔드 #중소기업 #중견기업 #자바 #Java #sql

open.kakao.com

 


👨‍💻 전자책 출간

아울러 제가  🌟비전공자에서 2년만에 보안 전문 중견기업으로 이직 한 방법들을 정리한 전자책을 출간 하게 되었습니다. 어떤 걸 공부해야 하는지, 이직을 위해서 무엇을 준비해야 하는지, 제가 받았던 기술 면접 리스트 등 다양한 목차로 구성되어 있습니다. 또한, 구매 시 1:1 채팅을 이용하여 포트폴리오 첨삭을 도와드리고 있습니다. 🐕전자책으로 얻은 모든 수익은 유기견 센터 '팅*벨 입양센터'에 후원될 예정입니다. 관심 있으신 분들은 아래 링크를 참고해주세요😁

https://kmong.com/gig/480954

 

비전공개발자 2년만에 중견기업 들어간 방법 | 14000원부터 시작 가능한 총 평점 0점의 전자책, 취

0개 총 작업 개수 완료한 총 평점 0점인 Binco의 전자책, 취업·이직 전자책 서비스를 0개의 리뷰와 함께 확인해 보세요. 전자책, 취업·이직 전자책 제공 등 14000원부터 시작 가능한 서비스

kmong.com


 

마치며

지금까지 PostgreSQL에서 JSON을 활용하는 다양한 방법들을 알아보았습니다😁

반응형