지원한 회사에서 PostgreSQL 을 사용한단다.
이런 불시장에서 면접 기회를 얻은 것만 해도 감사한 일이다.
그리고 이 귀한 기회를 놓치고 싶지 않다.
그래서 PostgreSQL 이 뭔데? 🤔
PostgreSQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS) 이다.
이건 기존에 사용했던 MySQL, MariaDB, Oracle 과 같다.
간단하게 각각의 특징을 살펴보자면,
이렇게 정리할 수 있겠다.
PostgreSQL 의 확장성에 대해 조금 더 알아보자면,
PostgreSQL은 NoSQL 기능도 함께 제공한다.
NoSQL? 그건 또 뭔데? 🤔
NoSQL은 데이터베이스의 한 종류다.
데이터베이스란? 정보를 저장하고 관리하는 장소라고 생각하면 된다.
이전에 사용했던 MySQL, Oracle 같은 데이터베이스는 정보를 테이블에 보관한다.
그런데, 최근에는 테이블에 딱 맞지 않는 비정형 데이터라는 게 많아졌다.
비정형 데이터는 쉽게 말해, 정해진 틀이 없는 정보다.
NoSQL 데이터베이스는 이런 비정형 데이터를 유연하게 다루기 위해 만들어졌다.
테이블 구조가 아니라, JSON 같은 형식을 사용해 원하는 대로 정보를 저장할 수 있다.
JSON은 간단히 말해, 정보를 키-값 쌍으로 저장하는 방식이다.
예를 들어, 사용자의 프로필 정보는 사람마다 다를 수 있다.
어떤 사람은 취미를, 어떤 사람은 위치를 추가할 수도 있잖나!
비교를 해보자.
☑️테이블로 저장하는 방식이다.
| ID | Name | Hobby | Location | |
|---|---|---|---|---|
| 1 | 김민지 | minji@example.com | 노래 | 서울 |
| 2 | 팜하니 | pham@example.com | 춤 | NULL |
| 3 | 다니엘 | danielle@example.com | NULL | 호주 |
데이터가 깔끔하게 정리되지만, 모든 사용자에게 동일한 필드를 적용해야 하므로,
필드가 비어 있는 경우가 생기거나, 테이블을 자주 변경해야 할 수 있다.
☑️다음은 JSON 형식으로 저장하는 방식이다.
{
"users": [
{
"id": 1,
"name": "김민지",
"email": "minji@example.com",
"hobby": "노래",
"location": "서울"
},
{
"id": 2,
"name": "팜하니",
"email": "pham@example.com",
"hobby": "춤"
},
{
"id": 3,
"name": "다니엘",
"email": "danielle@example.com",
"location": "호주"
}
]
}
각 사용자가 자신에게 필요한 정보만을 저장할 수 있다. 추가적인 필드가 필요할 때에도 테이블 구조를 변경할 필요 없이, JSON 구조에 해당 필드를 추가하면 된다. → 유연성이 높다.
PostgreSQL은 이런 NoSQL 방식도 지원한다.
즉, 전통적인 테이블 구조는 물론이고 비정형 데이터도 유연하게 다룰 수 있다는 것이다.
그래서 PostgreSQL은 기존의 RDBMS보다 더 다양한 데이터를 처리할 수 있다는 장점이 있다.
다른 형식의 데이터를 처리하기 위해서는 작성하는 쿼리문의 형식도 다를 것이다.
☑️아래는 전통적인 테이블 구조로 저장된 데이터를 조회하는 쿼리문이다.
SELECT name, email, hobby, location
FROM users
WHERE hobby IS NOT NULL;
☑️다음은 JSON 데이터를 다룰 때의 쿼리문이다.
SELECT json_data->>'name' AS name,
json_data->>'email' AS email,
json_data->>'hobby' AS hobby,
json_data->>'location' AS location
FROM users_json
WHERE json_data->>'hobby' IS NOT NULL;
(_users_json_ 테이블에는 JSON 데이터를 저장하는 _json_data_ 필드가 존재)
위의 쿼리문은 너무나 익숙하지만, 아래의 쿼리문은 익숙하지 않다.
어떤 느낌인지 알겠지만, 명확하게는 모르겠달까? 🤔
그래서 한 줄씩 뜯어보겠다.
json_data->>'name'
->> 연산자는 JSON 객체에서 문자열을 추출할 때 사용된다.AS name
FROM users_json
WHERE json_data->>'hobby' IS NOT NULL