오늘은 저번 포스팅에 이어 PostgreSQL에서 JSON 데이터를 활용하는 더 다양한 방법들을 소개하려고 합니다😁
개요
저번 포스팅에서는 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 형태로 객체가 생성된 것을 확인할 수 있었습니다.
하지만, 실무에서는 실제 DB 테이블에서 배열로 집계해야 할 경우도 왕왕 있습니다. 그럴 때는 jsonb_agg 함수와 같이 사용하시면 쉽게 원하는 값을 추출할 수 있습니다. 예시 테이블 policy_t 테이블을 만들고 service_type, policy_type 칼럼 두 개를 예제로 사용해 보겠습니다.
select jsonb_agg(jsonb_build_object
('service_type', service_type, 'policy_type', policy_type))
from policy_t;
jsonb_extract_path📒
jsonb_extract_path 함수는 JSON 객체에서 특정 키에 해당하는 값을 추출합니다.
select jsonb_extract_path('{"name" : "Binco", "age" : 30}', 'name');
jsonb_array_elements📗
jsonb_array_elements 함수는 JSON 배열을 각 원소로 분리하여 반환합니다.
select jsonb_array_elements('[1,2,3]');
👨👩👦👦 오픈채팅방 운영
취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁
참여코드 : 456456
https://open.kakao.com/o/gVHZP8dg
👨💻 전자책 출간
아울러 제가 🌟비전공자에서 2년만에 보안 전문 중견기업으로 이직 한 방법들을 정리한 전자책을 출간 하게 되었습니다. 어떤 걸 공부해야 하는지, 이직을 위해서 무엇을 준비해야 하는지, 제가 받았던 기술 면접 리스트 등 다양한 목차로 구성되어 있습니다. 또한, 구매 시 1:1 채팅을 이용하여 포트폴리오 첨삭을 도와드리고 있습니다. 🐕전자책으로 얻은 모든 수익은 유기견 센터 '팅*벨 입양센터'에 후원될 예정입니다. 관심 있으신 분들은 아래 링크를 참고해주세요😁
마치며
지금까지 PostgreSQL에서 JSON을 활용하는 다양한 방법들을 알아보았습니다😁
'TIL' 카테고리의 다른 글
Java String, StringBuilder, StringBuffer 차이와 장단점 (2) | 2023.08.21 |
---|---|
PostgreSQL Join 활용 예제 (0) | 2023.08.03 |
PostgreSQL JSON 데이터 활용 (0) | 2023.05.30 |
AOP(Aspect-Oriented Programming) 파헤치기 (0) | 2022.06.22 |
TDD 정의 및 암호 검사기 예시 (0) | 2022.05.25 |