“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”- Jef Raskin
맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도
PostgreSQL 도입을 위한 기술적 기준과 실무 적용 사례 총정리
PostgreSQL에 대해서 자세히 알아봅시다.
개발을 하다보면 꼭 마주하게 되는 기술이 있는데 그것이 바로 데이터베이스(DB)입니다, 그리고 그중에서도 많이 듣게 되는 이름 중 하나가 이번에 소개하는 PostgreSQL입니다. 오픈소스임에도 불구하고 상용 데이터베이스와 비교해도 뒤쳐지지 않는 성능과 기능을 가지고 있습니다. PostgreSQL에 대해서 자세히 알아보시죠!
목차
PostgreSQL
소개
PostgreSQL은 1986년 미국 UC버클리에서 시작된 POSTGRES 프로젝트를 기반으로 만들어진 오픈소스 데이터베이스이며, 1996년부터 현재의 이름으로 불리기 시작했고 지금은 전세계적으로 널리 사용되는 대표적인 관계형 데이터베이스이며 일반적인 SQL 기능 뿐 아니라, 객체지향적인 요소까지 포함되어 있어 객체-관계형 데이터베이스 시스템이라고 불리기도 한다. MySQL과 비교하면 강력하고 확장 가능한 기능을 제공합니다.
선택이유
첫번째, 완전한 오픈소스 : 라이선스 비용이 없고 상업적 사용에 제약이 없다.
두번째, 높은 안전성과 신뢰성 : 수십 년간 겁증되어 온 코드 베이스와 기능들, 금융, 공공기관 대형 서비스에서도 사용하고 있다.
세번째, SQL 표준 지원 : 최신 SQL 표준을 폭넓게 지원한다. 이는 이식성과 학습 난이도 측면에서 큰 장점이다.
네번째, 확정성 : 사용자 정의 함수, 자료형, 인덱스 등을 자유롭게 추가할 수 있다.
다섯번째, 문서형 데이터 처리 : JSON과 JSONB를 지원해 관계형 모델과 NoSQL 모델을 동시에 활용 할 수 있다.
여섯번째, 복제와 고가용성 : 스트리밍 복제, 논리 복제, 다중 노드 구성까지 가능하다.
일곱번째, 다양한 인덱스 구조 : B-tree는 물론, GIN, GiST,BRIN 등의 인덱스를 지원해 다양한 쿼리에 대응할 수 있다.
설치방법
공식 페이지[#] 접속 후 본인이 사용하고 있는 운영체제를 선택하고 설치를 할 수 있습니다. PostgreSQL, pgAdmin StackBuilder 이 세개를 추천을 해드리고 당연히 첫번째는 설치를 해야할거고 두번째의 경우 GUI 도구 3번째는 추가 모듈 설치용 도구입니다. 기본 포트의 경우 5432를 사용하고 있는데 보안을 위해 본인이 기억하기 쉬운 것으로 설정을 하고 인코딩은 UTF-8을 설정하고 슈퍼유저 비밀번호를 설정을 합니다.
사용방법
데이터베이스 사용자 생성방법
CREATE DATABASE odinboxdb;
CREATE USER odinbox WITH PASSWORD 'odinbox';
GRANT ALL PRIVILEGES ON DATABASE odinboxdb TO odinbox;
테이블 생성과 데이터 삽입
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
department TEXT,
salary NUMERIC,
joined_at TIMESTAMP DEFAULT NOW()
);
INSERT INTO employees (name, department, salary)
VALUES ('최영환', '솔루션개발팀', 6500000);
SELECT * FROM employees;
JSON과 JSONB
PostgreSQL은 일반적인 관계형 데이터 뿐만 아니라 JSON 데이터를 저장하고 조회할 수 있고 JSONB의 경우 바이너리 형태로 저장되어 인덱스를 사용할 수 있고 검색 속도도 빠릅니다.
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
data JSONB
);
INSERT INTO logs (data)
VALUES ('{"event":"login", "user_id": 123, "ip":"192.168.0.1"}');
SELECT * FROM logs WHERE data ->> 'event' = 'login';
CREATE INDEX idx_logs_data ON logs USING GIN (data);
실제로 수십만건 이상의 데이터가 있을 때 GIN 인덱스를 적용하여 조회 속도가 수 초에서 수 밀리초 수준으로 줄어들고 MongoDB처럼 문서형 데이터를 다루면서도 관계형 데이터의 구조화된 모델을 함께 활용할 수 있다는게 장점입니다.
오라클(Oracle)과 비교
많은 기업들이 PostgreSQL을 도입을 할 때 가장 많이 비교를 하는 대상이 바로 오라클입니다. 두 데이터베이스의 경우아래와 같이 차이가 있습니다.
항목 | PostgreSQL | Oracle |
라이선스 | 무료, 오픈소스 | 유료, 상용 |
SQL 표준 지원 | 매우 높음 | 표준 + 독자 문법 존재 |
JSON 처리 | JSONB, 인덱스 기능 | 기능은 있으나 느림 |
복제/HA | 스트리밍, 논리 복제 | RAC, DataGuard 등 고급 기능 |
확장성 | 사용자 정의 자유로움 | 제약 있음 |
클라우드 호환 | AWS, GCP, Azure에서 1급 지원 | 전용 솔루션 중심 |
유지비용 | 거의 없음 | 매우 높음 |
PostgreSQL은 사용 제품에서 기대하는 대부분의 기능을 갖추고 있으면서도 비용이 없고 기술적으로도 매우 유연합니다.
실무 활용 사례
초기 백엔드 인프라에서 PostgreSQL을 중심으로 유저 정보, 로그 데이터를 관리했다.
JSONB + GIN 인덱스로 대규모 로그 필터링을 효율적으로 처리했다.
Red Hat
자사 솔루션에서 PostgreSQL을 기본 내장 DB로 채택.
높은 안정성과 커스터마이징 가능성 덕분에 선택되었다.
배달의민족
PostgreSQL을 백엔드 핵심 DB로 사용하며, 대규모 주문 데이터와 로그를 JSONB 기반으로 저장하고 있다.
병렬 쿼리 기능과 통계 처리에 적극 활용하고 있다.
국내 공공기관
교육청, 지방자치단체, 국방 시스템 등에서 Oracle을 대체하기 위해 PostgreSQL을 도입하고 있다.
특히 비용 문제와 보안 요구 사항을 동시에 만족할 수 있다는 점이 주효했다.
PostgreSQL 공식문서
공식문서 [#]
명령어 레퍼런스 [#]
pgAdmin 공식문서 [#]
개발자 문서 [#]
확장기능 [#]
버전별 문서 목록 [#]
마무리
PostgreSQL은 단순히 오픈소스로 선택되는 데이터베이스는 아닙니다. 수십 년의 발전과 커뮤니티의 기여 속에서 안전성, 기능, 성능 모두를 갖춘 실무용 데이터베이스로 자리를 잡고 있는 것으로 봉비니다. 정형 데이터는 물론 문서형 데이터까지 유연하게 처리할 수 있고 다양한 인덱스와 복제 기능, 트랜잭션 안전성까지 갖추고 있으며 개인 프로젝트든 스타트업의 핵심 시스템이든, 대기업의 데이터 분석 시스템이든 모두를 만족을 시킬 수 있는 도구 중 하나가 될 것으로 보입니다.