[DB] PostgreSQL에 대해 araboza.

김효진·2021년 1월 26일
0

한눈에 살펴보는 PostgreSQL

데이터베이스의 한 종류인 오픈소스 DBMS인 PostgreSQL에 대해 알아보자!

PostgreSQL 공식 홈페이지

발음 : 포스트-그레스-큐엘 [Post-Gres-Q-L]

객체-관계형 데이터베이스 시스템(ORDBMS)으로,
엔터프라이즈급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 많은 기능을 제공하는 오픈소스 DBMS다. 실제 기능적인 면에서는 Oracle과 유사한 것이 많아, Oracle 사용자들이 가장 쉽게 적응할 수 있는 오픈소스 DBMS가 PostgreSQL이라는 세간의 평 또한 많다.

기능 및 제한

PostgreSQL은 관계형 DBMS의 기본적인 기능인 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원한다. 또한 ANSI SQL:2008 규격을 상당 부분 만족시키고 있으며, 전부를 지원하는 것을 목표로 현재도 기능이 계속 추가되고 있다.

또한 PostgreSQL은 기본적인 신뢰도와 안정성을 위한 기능뿐만 아니라 진보적인 기능이나 학술적 연구를 위한 확장 기능도 많이 가지고 있다. PostgreSQL의 기능을 대략적으로 열거해 보더라도 상당히 많은 기능을 가지고 있음을 알게 된다.

  • Nested transactions (savepoints)
  • Point in time recovery
  • Online/hot backups, Parallel restore
  • Rules system (query rewrite system)
  • B-tree, R-tree, hash, GiST method indexes
  • Multi-Version Concurrency Control (MVCC)
  • Tablespaces
  • Procedural Language
  • Information Schema
  • I18N, L10N
  • Database & Column level collation
  • Array, XML, UUID type
  • Auto-increment (sequences),
  • Asynchronous replication
  • LIMIT/OFFSET
  • Full text search
  • SSL, IPv6
  • Key/Value storage
  • Table inheritance

이외에도 엔터프라이즈급 DBMS의 다양한 기능과 새로운 기능을 자랑하고 있다.

PostgreSQL의 일반적인 제한 사항은 아래와 같다.

항목 제한 사항

최대 DB 크기(Database Size) 무제한
최대 테이블 크기(Table Size) 32TB
최대 레코드 크기(Row Size) 1.6TB
최대 컬럼 크기(Field Size) 1 GB
테이블당 최대 레코드 개수(Rows per Table) 무제한
테이블당 최대 컬럼 개수(Columns per Table) 250~1600개
테이블당 최대 인덱스 개수(Indexes per Table) 무제한

PostgreSQL의 내부 프로세스 구조


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


서버 내부의 질의 수행 과정

클라이언트로부터 질의 요청이 들어오면 구문 분석 과정(1)을 통해 Parse Tree를 생성하고 의미 분석 과정(2)를 통해 새로운 트랜잭션을 시작하고 Query Tree를 생성한다.
이후 서버에 정의된 Rule에 따라 Query Tree가 재 생성(3)되고 실행 가능한 여러 수행 계획 중 가장 최적화된 Plan Tree를 생성(4)한다. 서버는 이를 수행(5)하여 요청된 질의에 대한 결과를 클라이언트로 전달하게 된다
서버의 쿼리 수행 과정에서는 데이터베이스 내부의 시스템 카탈로그가 많이 사용되는데, 사용자가 함수나 데이터 타입은 물론 인덱스 접근 방식 및 RULE 등을 시스템 카탈로그에 직접 정의할 수도 있다. 따라서 PostgreSQL에서는 이것이 기능을 새로 추가하거나 확장하는데 있어 중요한 포인트로 활용된다.

현황, 동향

대부분의 PostgreSQL 사용기를 읽어 보면 알 수 있듯이 PostgreSQL을 사용하는 사람들은 대부분 개발자적인 성향을 가지고 있으며 제품에 대한 애정도와 충성도가 높은 편이다.

그도 그럴 것이 다른 제품과 비교하면 일반적으로 부족하지 않은 기능과 무난한 성능을 가지고 있고, 또 하나 중요한 것은 새로운 개발자를 끌어 들이기에 좋은 입문 조건들을 가지고 있다는 것이다.

프로젝트 페이지에 잘 정리된 매뉴얼, 문서와 300종 이상의 관련 서적, 그리고 세계 각국에서 개최되는 매년 10회 이상의 다양한 세미나와 콘퍼런스 등도 이를 뒷받침하고 있으며 최근에는 전문 잡지까지 등장했다. 이는 모두 왕성한 커뮤니티 활동의 산물이라 할 수 있다.

사용자가 꼽는 PostgreSQL의 대표적인 특징으로는 다음과 같은 것들이 있다.

'신뢰도'는 제품의 최우선 사항

  • ACID 및 트랜잭션 지원

  • 다양한 인덱싱 기법 지원

  • 유연한 Full-text search 기능

  • 동시성 성능을 높여주는 MVCC 기능

  • 다양하고 유연한 복제 방식 지원

  • 다양한 프로시져(PL/pgSQL, Perl, Python, Ruby, TCL, 등)/인터페이스(JDBC, ODBC, C/C++, - .Net, Perl, Python, 등) 언어

  • 질 좋은 커뮤니티 지원 및 상업적인 지원

  • 잘 만든 문서 및 충분한 매뉴얼 제공
    그리고, 다양한 확장 기능과 확장 기능 개발의 용이성 등이 있으며 PostgreSQL만의 차별화된 확장 기능으로 다음과 같은 것들이 있다.

  • GIS add-on 지원 (PostGIS)

  • Key-Value 스토어 확장 기능 (HStore)

  • DBLink 기능

  • Crypto, UUID 등 다양한 함수, 타입 지원
    이외에도 실용적이거나 실험적인 많은 확장 기능들이 있다.

출처는 요기

profile
맨땅에 헤딩 🐣

0개의 댓글