TIL

PostgreSQL JSON 데이터 활용

빈코 2023. 5. 30. 10:07

PostgreSQL은 관계형 데이터베이스이고 JSON(Javascrpit Object Notation)은 데이터를 저장하고 교환하기 위한 경량의 데이터 형식입니다. JSON 데이터를 활용하면 칼럼을 추가할 필요 없이 해당 JSON 칼럼에만 추가하면 되기 때문에 상당히 편리하게 사용이 가능합니다. 

 

개요

PostgreSQL
PostgreSQL JSON Data

 

앞서 말씀드렸듯이, PostgreSQL은 JSON 데이터를 저장하고 쿼리하는 데에도 지원을 제공합니다. PostgreSQL에서 JSON 데이터는 JSON형식으로 표현된 문자열로 저장됩니다. 이 문자열은 테이블의 열에 저장될 수 있으며, JSON 데이터는 구조화된 데이터를 표현할 수 있어, 키-값 쌍의 컬렉션 형태로 저장이 가능합니다.

 

JSON 데이터는 일반적인 텍스트 형식이기 때문에 PostgreSQL에서는 JSON 데이터를 쿼리 하기 위해 특정 함수와 연산자를 제공합니다. JSON 데이터를 쿼리 할 때는 JSONB 데이터 타입을 사용하는 것이 일반적인데, JSONB는 내부적으로 이진 형식으로 데이터를 저장하기 때문에 더 빠른 검색이 가능합니다.

 

Table 생성📙

CREATE TABLE members (
   Id serial NOT NULL PRIMARY KEY,
   personal_info json NOT NULL,
   group_name varchar(50)
);

쿼리를 이용해서 members 테이블을 생성해줍니다. 이때, personal_info 칼럼은 json 형식으로 지정해줍니다. 이후에 테스트 데이터 2개를 삽입해 보겠습니다.

 

insert into members (personal_info, group_name) 
values (
'{"name": "binco", "age": "15"}', 'Backend'
);

insert into members (personal_info, group_name) 
values (
'{"name": "toy", "age": "20"}', 'Frontend'
);

 

db
실제 DB 화면

 

다양한 연산자📘

PostgreSQL은 두 가지 기본 JSON 데이터용 연산자를 제공합니다. "->" 연산자는 키 형태로 JSON 객체를 반환하고, "->>" 연산자는 텍스트 형태로 JSON 객체를 반환합니다. 

 

select 
	Id,
	personal_info -> 'name' as name,
	personal_info -> 'age' as age,
	group_name
from members;

key 값 그대로 Select

 

select 
	Id,
	personal_info ->> 'name' as name,
	personal_info ->> 'age' as age,
	group_name
from members;

텍스트 형식으로 Select

기본적으로 데이터를 가져오는 방법을 알게 되었습니다. 하지만, 프로젝트를 진행하다 보면 조회를 할 때에도 특정한 조건이 생기긴 마련입니다. 예시로 미성년자인 회원만 조회하고 싶을때는 어떻게 처리해야 할까요? PostgreSQL에서는 당연하게도 JSON 데이터를 조건문에서도 사용할 수 있게 지원합니다.

 

select 
	Id,
	personal_info ->> 'name',
	personal_info ->> 'age' as age,
	group_name
from members
where 
	(personal_info ->> 'age')::integer < 20;

 

여기서 하나 주목해야 할 점은 '->>' 연산자로 꺼내 온 데이터는 텍스트 형식이기 때문에 숫자로 비교가 불가능합니다. 그렇기에 ::integer 를 이용하여 cast 해주어야 오류가 나지 않습니다.

 

select 
	min (cast (personal_info ->> 'age' as integer)),
	max (cast (personal_info ->> 'age' as integer)),
	avg (cast (personal_info ->> 'age' as integer))
from members;

집계함수
집계함수

 

MIN, MAX, AVG와 같은 집계함수도 사용이 가능합니다.

 


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

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

 

참여코드 : 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 데이터에 대해 알아보았습니다. PostgreSQL은 관계형 데이터베이스지만, JSON 데이터를 활용할 때는 마치 NoSQL을 사용하는 것처럼 편리하게 칼럼을 넣고 뺄 수 있는 장점이 있는 것 같습니다😄

반응형

'TIL' 카테고리의 다른 글

PostgreSQL Join 활용 예제  (0) 2023.08.03
PostgreSQL JSON 데이터 활용 II  (7) 2023.06.01
AOP(Aspect-Oriented Programming) 파헤치기  (0) 2022.06.22
TDD 정의 및 암호 검사기 예시  (0) 2022.05.25
Java MVC 패턴 바로 알기  (1) 2022.05.20