목차

    PostgreSQL이란?

    PostgreSQL은 오픈소스 객체-관계형 데이터베이스 시스템(ORDBMS)으로, Enterprise급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 기능들을 제공합니다. 약 20여년의 오랜 역사를 갖는 PostgreSQL은 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 마치 새로운 하나의 프로그래밍 언어처럼 무한한 기능을 손쉽게 구현할 수 있습니다.

     

    PostgreSQL 내부 구조

    postgreSQL의 프로세스 구조를 간단히 살펴보면 다음과 같습니다.

     

    https://d2.naver.com/helloworld/227936

     

    클라이언트는 (1)인터페이스 라이브러리(libpg, JDBC, ODBC 등의 다양한 인터페이스)를 통해 서버와의 연결을 요청하면, (2)Postmaster 프로세스가 서버와의 연결을 중계합니다. 이후 (3)클라이언트는 할당된 서버와의 연결을 통해 질의를 수행합니다. Shared Memory를 이용하여 GC와 같은 작업을 통해 MVCC를 관리합니다.

     

    서버 내부의 질의 수행 과정을 간단히 살펴보면 다음과 같습니다.

     

    https://d2.naver.com/helloworld/227936

     

    클라이언트로부터 질의 요청이 들어오면 (1)구문 분석 과정을 통해 Parse Tree를 생성하고 (2)의미 분석 과정을 통해 새로운 트랜잭션을 시작하고 Query Tree를 생성합니다.

     

    이후 (3)서버에 정의된 Rule에 따라 Query Tree가 재생성되고 (4)실행 가능한 여러 수행 계획 중 가장 최적화된 Plan Tree를 생성합니다. (5) 서버는 이를 수행하여 요청된 질의에 대한 결과를 클라이언트로 전달하게 됩니다.

     

    서버의 쿼리 수행 과정에서는 데이터베이스 내부의 시스템 카탈로그가 많이 사용되는데, 사용자가 함수나 데이터 타입은 물론 인덱스 접근 방식 및 RULE 등을 시스템 카탈로그에 직접 정의할 수도 있습니다. 따라서 PostegreSQL에서는 이것이 기능을 새로 추가하거나 확장하는데 있어 중요한 포인트로 활용됩니다.

     

    이러한 작업 방식이 방대한 데이터에 복잡한 쿼리에서는 높은 성능을 보이지만 작은 데이터에 간단한 쿼리에는 오히려 약점을 보이는 이유인 것으로 보입니다.

     

    데이터가 저장되는 파일들은 여러개의 페이지들로 구성되며, 하나의 페이지는 확장 가능한 slotted page 구조를 가집니다.

     

    - 데이터 페이지 구조

     

    https://d2.naver.com/helloworld/227936

    - 인덱스 페이지 구조

    https://d2.naver.com/helloworld/227936

     

    PostgreSQL 장단점 및 MySQL과의 차이점

     

    PostgreSQL 장단점

    장점 단점
    함수, 데이터 유형, 언어 등을 추가할 수 있는 확장성이 높음 단순한 CRUD, 작은 데이터 셋에서는 MySQL보다 낮은 성능을 제공하는 경우가 있음
    구조화되지 않은 데이터 유형 지원(예: 오디오, 동영상, 이미지) 독창적인 자료형과 문법 때문에 러닝 커브가 있음
    교착 상태가 거의 발생하지 않고 동시 처리가 가능하며 트랜잭션 속도가 빠른 MVCC 독창적인 자료형 및 문법으로 인해 다른 DB로 migration이 쉽지 않
    고가용성 및 서버 장애 복구  
    데이터 암호화, SSL 인증서, 고급 인증 방법과 같은 보안 기능  
    활발한 오픈소스 커뮤니티가 지속적으로 솔루션을 개선하고 업데이트  

     

    MySQL과의 차이점

    MySQL8.0 업데이트를 기준으로 PostgreSQL과의 차이점이 많이 사라졌다고 합니다. 그럼에도 존재하는 MySQL과의 차이점을 소개드립니다.

     

    1. MVCC 성능이 PostgreSQL에서 더 좋다.

    2. PostgreSQL은 고급 인덱싱 기법들을 제공한다. (GIN, GiST 등)

     

    결론

    PostgreSQL에 대해 간단히 알아보았습니다. 공부하다보니 Java의 GC와 같은 Vaccum이 있고 저장하는 페이지 자료형에 대한 내용도 있고 공부할 것이 많더군요. 찬찬히 공부해보며 정리해보려고합니다.

    그리고 장단점과 차이점등에 대해서는 구글링을 통해 얻은 지식을 정리했지만 실무에서 사용해보며 몸으로 체감하는 차이점을 적을 수 있는 날이 왔으면 좋겠습니다.

     

    Reference

    https://d2.naver.com/helloworld/227936

    https://mangkyu.tistory.com/71

    https://mystory-blog.vercel.app/blog/mysql-to-postgres/mysql-versus-postgres

    https://cloud.google.com/learn/postgresql-vs-sql?hl=ko

    https://codecamp.tistory.com/2

    https://gksdudrb922.tistory.com/245

    https://uminoh.tistory.com/32

     

    'DB > PostgreSQL' 카테고리의 다른 글

    윈도우에 PostgreSQL 설치하기  (0) 2023.10.24