_D_ata_B_ase _M_anagement _S_ystem | |||
{{{#!wiki style="margin: 0 -10px;" {{{#!folding [ 주요 DBMS ] {{{#!wiki style="margin-bottom: -15px;" | |||
그 외 DBMS |
PostgreSQL | |
<colbgcolor=#ffffff,#1f2023><colcolor=#000,#FFF> 개발자 | PostgreSQL Global Development Group |
발표일 | 1996년 7월 8일 |
라이선스 | PostgreSQL License |
| |
[clearfix]
1. 개요
The PostgreSQL Global Development Group에서 개발하는 오픈 소스 ORDBMS. 1996년에 첫 출시되었다. 처음에는 BSD 라이선스였으나 언제부터인가 MIT 라이선스 비스무리한 독자적 라이선스[1]를 따르기 시작했다. 발음은 '포스트그레스큐엘'이라고 한다.[2]
전 세계 사용률은 상위 3개의 DB(Oracle DB, MySQL, Microsoft SQL)에 이어 4위인데, 꾸준히 상승하고 있는 것이 특징이다. 비교적 사용률이 높은 국가는 북미와 일본. 북미에서는 MySQL과 반대로 꾸준히 구인율이 증가하고 있으며, 일본에서는 관공서에서 사용할 경우 상용은 오라클 데이터베이스, 무료는 PostgreSQL을 사용한다는 말이 있다.
2. 타 DB와의 비교
MySQL에 비해서 SQL 표준을 더 잘 지원하고 기능이 더 강력하며[3] 쿼리가 복잡해질수록 성능이 더 잘 나오는 편이다.[4] 특히 PostGIS를 통한 Geospatial query(위치기반 쿼리)는 오라클마저 씹어삼키는 강력함을 자랑하며, Citus 익스텐션을 이용하면 그동안 약점으로 지적돼왔던 병렬 인덱싱도 손쉽게 처리 가능하다.여러 DBMS 중에서도 특히 개발자들이 선호하는 편이며 충성도가 높은 편이고 여러 나라에서 개최되는 컨퍼런스나 세미나도 꾸준한 편이다.
대신 기본적인 CRUD 성능이 MySQL 등 경쟁 DB에 비해 좋지 않은 편이라고 여겨진다. 하지만 이는 상대적인 것으로, 엔진의 아키텍처적인 특성이 반영된 결과라고 볼 수 있다. 일반적으로 조회성 트랜잭션에서는 파일베이스 아키텍처의 IO 한계로 인해 타 DBMS에 비해 우수한 성능을 내기 어렵다. 하지만 충분한 메모리가 제공되는 환경에서는 큰 차이를 보이지 않으며, 삽입성 트랜잭션에서는 오라클을 상회하는 엄청난 속도를 보여준다.
다만 PostgreSQL은 아직까지(15버전 기준) 공유볼륨을 지원하고 있지 않기 때문에 수평확장에서 1:1의 추가적인 스터리지 볼륨을 요구한다. 이러한 관계로 수평확장에서는 오라클이나 MySQL등에 비해 약점으로 꼽히는 부분이다.
우버에서는 PostgreSQL을 메인으로 쓰다가 scalability 문제를 극복하지 못하고 MySQL로 전환하기도 했다.[5]
2011년 애플은 MySQL이 오라클에 넘어가면서 향후 일어날지도 모를 저작권 분쟁을 방지하기 위해 OS X Lion Server 버전에서는 MySQL을 퇴출시키고 PostgreSQL를 도입하였다. 사실 MySQL과 PostgreSQL은 성능이나 제공하는 기능에 약간의 차이가 있을 뿐 문법이나 구현상으로는 큰 차이가 없다. 따라서 양 DB간 Migration도 상단에 언급한 check constrants 정도를 제외하면 쉬운 편이다.
3. PostgreSQL을 사용하는 웹사이트
- 야후!: 유저 사용형태 분석에 관한 자료를 저장하는 데 쓰이고 있다. 물론, 다루는 용량이 엄청나게 큰지라(2 페타바이트 정도라 한다) 많이 고쳐서 사용하고 있다고 하는 중.
- MySpace: 데이터 저장에 쓰이고 있다. Yahoo!처럼 마개조해서 사용하고 있지는 않다.
- OpenStreetMap
- Afilias: .org나 .info 도메인 저장에 쓰인다.
- Sony Online: 멀티플레이 게임용 데이터베이스로 쓰인다.
- BASF: 웹 쇼핑 데이터베이스 관리용으로 사용된다.
- hi5.com
- Skype: 중앙 데이터베이스로 사용된다.
- Sun xVM
- MusicBrainz: 온라인 음악 백과사전 데이터 수록용으로 쓰인다.
- International Space Station: 그 우주 정거장 맞다. 천체 관측 자료를 저장하여 지상에서 분석할 때 사용한다.
- MyYearbook
- Heroku: 클라우드 서비스용 데이터베이스로 사용된다.
- ZOHO ManageEngine: OpManager, SDP 등의 MySQL을 신버전부터 PostgreSQL로 변경.
- KT: 공개SW 도입을 위한 시범 사업 추진 건으로 CentOS, JBoss EAP 등과 함께 도입되었다.
- Unity Asset Server: 유니티 엔진의 에셋 버전 관리 시스템의 데이터베이스에 사용한다.
- 인스타그램 참고
- 끄투의 데이터베이스로도 사용된다.
이렇듯이 일본 외에도 생각보다 많은 사용자를 가지고 있다.
4. 특징
4.1. 확장 기능
PostgreSQL은 확장 기능을 통해 자유로운 기능 추가가 가능하다는 특징이 있다. 익히 알고 있는 PostGIS, Citus 등도 기본 PostgreSQL에 특수한 목적을 가지고 기능을 추가시키는 확장 기능에 속한다.PostgreSQL 커뮤니티는 이러한 확장 기능의 개발을 장려하고, 편의를 도모하기 위해 PGXS를 도입하였다.
이러한 확장 기능은 PostgreSQL의 가장 큰 특징이자 장점으로 꼽히며, 전세계적으로 활발한 커뮤니티 활동을 바탕으로 다른 DBMS들이 따라올 수 없는 기술확장성을 보여준다. 최근에는 인공지능 연구를 위한 벡터기반의 데이터를 다루는 확장 기능들도 활발하게 공개되고 있다.
5. Supabase
PostgreSQL에 기반하여 만들어진 Supabase라는 오픈 소스 데이터베이스 프로젝트 겸 호스팅 서비스가 존재한다. 자세한 내용은 항목 참조.6. 기타
공식 홈페이지의 Download 섹션을 통해 설치를 진행하게 되면 기본적으로 PostgreSQL은 운영체제에 postgres라는 계정을 생성하며 설치가 진행된다. 설치가 완료되면 해당 계정으로 로그인하여 접속을 진행하는 것이 좋다.만약 다른 계정으로 터미널 창에 'psql'을 입력하면 기본 슈퍼유저인 postgres로 접속하는 게 아니라 현재 로그인되어 있는 운영 체제의 계정으로 접속을 시도하여 오류 메시지를 띄운다. 이 오류가 보기 싫다면 직접 postgres로 접속한 후 해당 계정명과 일치하는 데이터베이스 및 유저를 생성해 주면 된다.
만약 다른 데이터베이스나 DBMS 유저를 기본으로 사용하고 싶다면 PGUSER, PGDATABASE 등과 같은 운영 체제의 환경 변수에 원하는 유저와 데이터베이스를 지정하면 된다.
PostgreSQL 기반으로 GraphQL 엔드포인트를 만들 수 있는 hasura라는 기술이 등장했다.[6] 서버 엔드포인트를 순식간에 만들 수 있다.
[1] PostgreSQL License http://www.postgresql.org/about/licence/[2] Post + Gres + Q + L로 끊는 식이다. 여담으로 PostgreSQL과 형제 소리를 듣는 SQL DBMS인 MySQL은 정해진 공식 발음법이 마이스큐엘이 아니고 '마이에스큐엘'이다. 미묘하게 'SQL'을 읽는 방식이 다르다. 이는 영어 연음처리와 관계가 있을 수 있는데 앞 단어의 끝 발음과 뒷 단어의 첫 발음이 비슷하면 두 발음이 한 발음처럼 연음처리되어 발음되는 방식이 영어에서는 가능하기 때문이다. 따라서 Post + Gre + S + Q + L이 된다해도 결국 '포스트그레(에)스큐엘'처럼 발음이 가능해지며 앞 단어가 MySQL의 경우는 Mys + Q + L이라고 보지 않는한 My + SQL인 '마이에스큐엘'로 발음되게 된다. 또한 한국에서는 Postgres + QL로 발음하지 않고 Postgre + SQL로 보고 포스트그레 SQL로 표기하는 경우도 꽤 있다.[3] MySQL에는 CTE나 Check constraint 등이 없었으나 CTE는 각각 MariaDB 10.2, MySQL 8에서 구현되었으며 Check constranints는 MariaDB 10.2에서 구현되었다. MySQL은 현재까지도 Check constraints가 없다.[4] Genetic query optimizer라고 불리는, 유전 알고리즘을 통한 쿼리 최적화 기술이 구현되어 있다. MySQL과의 성능 비교[5] 하지만 MySQL의 스토리지 엔진만 사용하고 있기 때문에 사실상 MySQL을 NoSQL처럼 이용 중.[6] Hasura는 Haskell로 만들었다.