[PostgreSQL] PostgreSQL을 알아보자

윤동환·2023년 2월 6일
0

DataBase

목록 보기
1/1
post-thumbnail

PostgreSQL이란?

PostgreSQL은 대용량의 복잡한 트랜잭션 처리를 위한 ORDBMS이다.

무료 오픈소스 소프트웨어입니다. 때문에 어떠한 형태로든 자유롭게 사용, 수정 및 배포할 수 있습니다.

역사

PostgreSQL의 조상에는 여러 제품이 있는데, 그중 Ingres(INteractive Graphics REtrieval System)는 PostgreSQL의 시조라고 할 수 있다. 이 Ingres는 현재까지도 활발하게 활동하고 있는 데이터베이스 계의 거장 Michael Stonebraker가 1977년 미국 버클리대학에서 시작한 프로젝트다.

이후 Ingres를 잇는 Postgres(Post-Ingres)라는 또 다른 프로젝트 또한 그의 손을 거쳐 탄생됐으며 1991년에 버전 3이 출시되며 많은 사용자를 확보하였다. 하지만 1993년에 사용자 지원의 부담으로 인해 프로젝트를 종료하였다.

사용자와 학생들이 프로젝트 종료와 별개로 개발을 계속 진행하였고, SQL 지원과 구조 개선을 통해 Postgres보다 40% 정도 빠른 성능을 보여 주는 Postgres95를 만들어 냈다.

이 Postgre95는 1996년 오픈소스가 되면서 Postgres를 계승했다는 것과 SQL을 지원한다(Postgres는 SQL이 아니라 QUEL이라는 언어를 지원했다)는 것을 반영하기 위해 현재의 PostgreSQL로 이름을 변경한 후 1997년 최초 버전을 6.0으로 정해 PostgreSQL을 출시했다.

이후에도 PostgreSQL은 오픈 소스 커뮤니티에 의해 최근까지도 활발히 개발되고 있으며 2012년 10월 현재 9.2 버전까지 출시됐다.

요약
1977년 프로젝트 시작 (Ingres)
1991년 버전 3출시와 사용자 확보 (Postgres)
1993면 Postgres 프로젝트 종료
1995 Postgres95 개발
1996 PostgreSQL로 이름 변경
1997 최초 버전 6.0으로 PostgreSQL 출시
현재까지 오픈 소스 커뮤니티에 의해 활발히 개발중

특징

  1. 관계형 모델
    복합 객체, 규칙들을 다루는 고수준으로 확장가능한 관계형 DBMS를 제작하려고 하였습니다. 때문에 관계형 DB가 갖는 기능이 거의다 있습니다.

    트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원합니다.
    ex) 최적화, 동시성 제거, 트랜잭션 처리, 멀티유저 기능 등

  2. 고수준 확장성
    사용자 정의 오퍼레이터와 타입, 함수, 엑세스 메소드를 지원하여 확장이 용이하다.
    외부 데이터 래퍼를 사용하여 다른 데이터 베이스, 스트림에 연결이 가능하다.

  3. 객체지향
    상속, 객체와 같은 OOP에서 볼수 있는 여러 특징을 구현하고있다. 이러한 이유로 ORDBMS라고 불린다.

  4. 안정성, 재해 복구
    미리 쓰기 로깅(WAL), 복제, 시점 복구, 활성 대기, 테이블 스페이스 등 의 기능을 제공한다.

  5. 보안
    열 및 행 수준의 보안을 제공한다. 강력한 액세스 제어 시스템이 있다.

내부 구조

프로세스 구조


1. 클라이언트가 JDBC와 같은 인터페이스를 통해 서버와의 연결 요청
2. Postmaster 프로세스가 서버와워 연결을 중계
3. 클라이언트와 서버간 쿼리 수행

쿼리 수행 절차


1. 구문을 분석하여 Pars Tree 생성
2. 의미를 분석하여 새로운 트랜젝션을 시작하고 Query Tree 생성
3. 서버에 정의된 Rule에 따라서 Query Tree 재생성
4. 실행가능한 수행계획중 최적화된 Plan Tree 생성
5. 서버가 Plan Tree에 맞게 수행
6. 결과를 클라이언트로 전달

PostgreSQL을 선택하는 이유들

1. 비용 절감

오픈소스 소프트 웨어이므로 개발비용이 적게 들어갑니다.

2. 빠르고 유연한 개발

오픈소스 커뮤니티를 활용하여 최신 기술 정보를 공유받아 개발 할 수 있습니다.

3. 호환성/유연성

오픈소스는 주로 오픈 포맷 또는 오픈 프로토콜을 사용하기 때문에 서로 다른 소프트웨어간 연동이 쉽습니다.
특정 기기, 운영체제, 애플리케이션에 종속되지 않고 자유로운 변경이 가능합니다. 네트워크를 통해 여러 기기가 하나로 연결되는 유비쿼터스 시대와 적합합니다.

4. 신뢰성/안정성

전 세계 많은 개발자들이 오픈소스 개발에 참여하기 때문에 폐쇄적으로 개발되는 독점 프로그램에 비해 안정적입니다.

5. 풍부한 데이터 유형 지원

  • Key - Value
  • JSON, JSONB
  • Columnar Store
  • Graph

6. 대량의 데이터를 처리하는 것을 도와주는 기능들

  • Table Partitioning
  • Paraller query & numtiple processes
  • analytic & aggregate fuction
  • indexing & JOIN

참고

참고 블로그
위키백과
참고 블로그2
NaverD2

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글