PostgreSQL 입문

woori·2024년 8월 20일

PostgreSQL

목록 보기
1/2

지원한 회사에서 PostgreSQL 을 사용한단다.
이런 불시장에서 면접 기회를 얻은 것만 해도 감사한 일이다.
그리고 이 귀한 기회를 놓치고 싶지 않다.

그래서 PostgreSQL 이 뭔데? 🤔

PostgreSQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS) 이다.
이건 기존에 사용했던 MySQL, MariaDB, Oracle 과 같다.

간단하게 각각의 특징을 살펴보자면,

  • MySQL, MariaDB : 속도와 성능에 중점을 둔 경량화된 RDBMS (오픈 소스)
  • Oracle : 고성능과 보안성, 데이터 복구 기능 등이 뛰어난 RDBMS (상용)
  • PostgreSQL : 안정성과 확장성에서 독보적인 RDBMS (오픈 소스)

이렇게 정리할 수 있겠다.


데이터 형식

PostgreSQL 의 확장성에 대해 조금 더 알아보자면,
PostgreSQL은 NoSQL 기능도 함께 제공한다.

NoSQL? 그건 또 뭔데? 🤔

NoSQL은 데이터베이스의 한 종류다.
데이터베이스란? 정보를 저장하고 관리하는 장소라고 생각하면 된다.

이전에 사용했던 MySQL, Oracle 같은 데이터베이스는 정보를 테이블에 보관한다.
그런데, 최근에는 테이블에 딱 맞지 않는 비정형 데이터라는 게 많아졌다.
비정형 데이터는 쉽게 말해, 정해진 틀이 없는 정보다.

NoSQL 데이터베이스는 이런 비정형 데이터를 유연하게 다루기 위해 만들어졌다.
테이블 구조가 아니라, JSON 같은 형식을 사용해 원하는 대로 정보를 저장할 수 있다.
JSON은 간단히 말해, 정보를 키-값 쌍으로 저장하는 방식이다.

예를 들어, 사용자의 프로필 정보는 사람마다 다를 수 있다.
어떤 사람은 취미를, 어떤 사람은 위치를 추가할 수도 있잖나!

비교를 해보자.

☑️테이블로 저장하는 방식이다.

IDNameEmailHobbyLocation
1김민지minji@example.com노래서울
2팜하니pham@example.comNULL
3다니엘danielle@example.comNULL호주

데이터가 깔끔하게 정리되지만, 모든 사용자에게 동일한 필드를 적용해야 하므로,
필드가 비어 있는 경우가 생기거나, 테이블을 자주 변경해야 할 수 있다.

☑️다음은 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'

    • PostgreSQL에서 JSON 데이터 타입을 다룰 때 사용하는 연산자.
    • ->> 연산자는 JSON 객체에서 문자열을 추출할 때 사용된다.
  • AS name

    • 추출한 값을 name이라는 별칭으로 표시하게 한다.
  • FROM users_json

    • users_json이라는 테이블에서 데이터를 조회한다.
  • WHERE json_data->>'hobby' IS NOT NULL

    • JSON 데이터에서 hobby 키의 값이 존재하는 행만 필터링한다.
profile
할 건 해야지

0개의 댓글