오늘은 PostgreSQL이 무엇인지 알아봅시다.
PostgreSQL이란?
PostgreSQL은 강력한 오픈 소스 객체 관계형 데이터베이스 시스템으로, SQL 언어를 사용하고 확장하며, 가장 복잡한 데이터 워크로드를 안전하게 저장하고 확장하는 다양한 기능을 제공합니다. PostgreSQL은 1986년 캘리포니아 대학교 버클리 캠퍼스의 POSTGRES 프로젝트의 일환으로 시작되었으며, 핵심 플랫폼은 거의 40년 동안 활발하게 개발되어 왔습니다.
특징 및 기능
- 100% 오픈 소스 데이터베이스입니다.
- 비관계형 데이터 유형과 관계형 데이터 유형을 모두 지원합니다.
- MVCC(Multiversion Concurrency Control)를 사용하여 동시성을 효율적으로 관리합니다.
- 여러 프로그래밍 언어를 지원합니다.
- 여러 서버에 걸친 비동기식 또는 동기식 복제 방법을 통해 서비스의 고가용성을 보장하도록 PostgreSQL을 구성할 수 있습니다.
- 특정 시점 복구(PITR)를 통해 데이터베이스를 특정 시점으로 복원할 수 있습니다.
- 개발자는 저장 프로시저라고 하는 맞춤형 서브루틴을 만들 수 있습니다.
아래는 PostgreSQL에서 찾을 수 있는 다양한 기능의 전체 목록이며, 주요 릴리스 마다 더 많은 기능이 추가됩니다. (PostgreSQL 18 기준)
- Data Types
- Primitives: Integer, Numeric, String, Boolean
- Structured: Date/Time, Array, Range / Multirange, UUID
- Document: JSON/JSONB, XML, Key-value (Hstore)
- Geometry: Point, Line, Circle, Polygon
- Customizations: Composite, Custom Types
- Data Integrity
- UNIQUE, NOT NULL
- Primary Keys
- Foreign Keys
- Exclusion Constraints
- Explicit Locks, Advisory Locks
- Concurrency, Performance
- Indexing: B-tree, Multicolumn, Expressions, Partial
- Advanced Indexing: GiST, SP-Gist, KNN Gist, GIN, BRIN, Covering indexes, Bloom filters
- Sophisticated query planner / optimizer, index-only scans, multicolumn statistics
- Transactions, Nested Transactions (via savepoints)
- Multi-Version concurrency Control (MVCC)
- Parallelization of read queries and building B-tree indexes
- Table partitioning
- All transaction isolation levels defined in the SQL standard, including Serializable
- Just-in-time (JIT) compilation of expressions
- Asynchronous I/O (AIO)
- Reliability, Disaster Recovery
- Write-ahead Logging (WAL)
- Replication: Asynchronous, Synchronous, Logical
- Point-in-time-recovery (PITR), active standbys
- Tablespaces
- Security
- Authentication: GSSAPI, SSPI, LDAP, SCRAM-SHA-256, Certificate, OAuth 2.0, and more
- Robust access-control system
- Column and row-level security
- Multi-factor authentication with certificates and an additional method
- Extensibility
- Stored functions and procedures
- Procedural Languages: PL/pgSQL, Perl, Python, and Tcl. There are other languages available through extensions, e.g. Java, JavaScript (V8), R, Lua, and Rust
- SQL/JSON constructors, query functions, path expressions, and JSON_TABLE
- Foreign data wrappers: connect to other databases or streams with a standard SQL interface
- Customizable storage interface for tables
- Many extensions that provide additional functionality, including PostGIS
- Internationalisation, Text Search
- Support for international character sets, e.g. through ICU collations
- Case-insensitive and accent-insensitive collations
- Full-text search
vs NoSQL
NoSQL의 대표 데이터베이스인 MongoDB와 비교해보겠습니다.
데이터 모델의 차이점
MongoDB는 문서 지향 모델을 사용하며, 데이터는 유연하고 스키마가 없는 BSON(Binary JSON) 문서에 저장됩니다. 각 문서는 고유한 구조를 가질 수 있어 동적 스키마 설계가 가능합니다. 각 문서를 컬렉션으로 구성하며, 각 컬렉션에는 문서를 식별하는데 사용되는 고유한 ObjectID가 있습니다.
PostgreSQL은 스키마 제약 조건을 적용하는 구조화된 테이블이 있는 테이블 형식 관계형 모델을 따릅니다. 스키마를 사용하면 각 열에 특정 데이터 유형이 포함되므로 강력한 데이터 일관성과 무결성이 보장됩니다. 하지만 유연성이 떨어집니다. 데이터 엔터티 간의 관계는 기본키와 외래키를 사용하여 관리됩니다.
아키텍처의 차이점
MongoDB는 수평적 확장성과 고가용성을 우선시합니다. 샤딩을 사용하여 데이터를 여러 노드에 분할하는 분산 아키텍처를 사용합니다. 유연한 스키마는 빠르게 진화하는 대규모 데이터 세트를 관리하는데 이상적입니다.
PostgreSQL은 강력한 ACID(원자성, 일관성, 독립성, 지속성)을 보장하며 높은 수준의 데이터 일관성을 촉진합니다. 큰 테이블을 더 작고 관리하기 쉬운 부분으로 분할하는 파티셔닝 기능을 제공하며, MVCC(다중 버전 동시성 제어)를 사용하여 데이터 및 동시 트랜잭션을 관리합니다.
기타 차이점
MongoDB는 문서 지향 구조와 상호 작용할 수 있는 MongoDB 쿼리 언어(MQL)가 사용됩니다. MQL은 기능이 풍부하며 예측, 집계 프레임워크, 문서 쿼리, 집계 파이프라인, 지리 공간 쿼리 및 텍스트 검색을 지원합니다. 대량의 비정형 데이터에 대한 높은 Read/Write 성능을 위해 최적화 되었습니다.
PostgreSQL은 Postgres SQL이라는 SQL 변형을 쿼리 언어로 사용합니다. SQL과 비슷하지만 확장 가능한 유형 시스템, 함수 및 상속과 같은 추가 기능이 있습니다. 여전히 표준 SQL과 호환되므로 SQL 쿼리도 사용할 수 있습니다. 복잡한 쿼리를 관리하고 높은 동시성 환경에서 데이터 일관성을 보장하는데 탁월합니다.
vs 타 RDBMS
대표적인 RDBMS 중 하나인 MySQL과 비교해보겠습니다.
아키텍처의 차이점
MySQL은 단순한 관계형 데이터베이스 관리 시스템(RDBMS)이지만, PostgreSQL은 객체 관계형 데이터베이스 관리 시스템(ORDBMS)로 관계형 기능과 객체 지향 기능을 결합한 하이브리드 데이터베이스 시스템입니다.
MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수를 제공합니다 (MyISAM은 제공하지 않습니다). PostgreSQL은 모든 구성에서 ACID와 완벽하게 호환됩니다.
PostgreSQL은 데이터베이스에 연결된 모든 사용자에 대해 상당한 메모리 할당량(약 10MB)을 포함하는 새로운 시스템 프로세스를 생성합니다. 여러 사용자를 위해 확장하려면 메모리 집약적 리소스가 필요합니다. MySQL은 여러 사용자를 위해 쓰레드 기반 모델(단일 프로세스)을 사용합니다. 따라서 MySQL 데이터베이스는 주로 데이터를 읽고 사용자에게 표시하는 애플리케이션에서 PostgreSQL보다 성능이 뛰어납니다.
쿼리의 차이점
MySQL 데이터베이스에서는 INSERT, UPDATE 및 DELETE문에 AFTER 및 BEFORE 트리거만 사용할 수 있습니다. 즉, 사용자가 데이터를 수정하기 전이나 후에 프로시저가 자동으로 실행됩니다. 반대로 PostgreSQL은 INSTEAD OF 트리거를 지원하므로 함수를 사용하여 복잡한 SQL문을 실행할 수 있습니다.
MySQL과 PostgreSQL 모두 저장 프로시저를 지원하지만 PostgreSQL을 사용하면 SQL 이외의 언어(Python, Perl)로 작성된 저장 프로시저를 호출할 수 있습니다.
MySQL과 PostgreSQL 모두 View를 지원하지만 PostgreSQL은 고급 View 옵션을 제공합니다. 예를 들어, 구체화된 뷰(MATERIALIZED VIEW)를 사용하면 복잡한 쿼리의 결과를 물리적으로 저장하여 쿼리 성능을 크게 향상시킬 수 있습니다.
오늘의 글은 여기까지입니다. 감사합니다!
출처
https://www.postgresql.org/about/
https://www.ibm.com/kr-ko/think/topics/postgresql
https://aws.amazon.com/ko/compare/the-difference-between-mongodb-and-postgresql/
https://www.geeksforgeeks.org/postgresql/difference-between-postgresql-and-mongodb/
https://aws.amazon.com/ko/compare/the-difference-between-mysql-vs-postgresql/
https://www.integrate.io/blog/postgresql-vs-mysql-which-one-is-better-for-your-use-case/
'Database' 카테고리의 다른 글
| [Database] 트랜잭션과 ACID (1) | 2025.11.02 |
|---|---|
| [Database] PostgreSQL 입문 (with 생활코딩) - (3) CRUD (1) | 2023.10.08 |
| [Database] PostgreSQL 입문 (with 생활코딩) - (2) Database, Schema, Table 생성 (4) | 2023.10.07 |
| [Database] PostgreSQL 입문 (with 생활코딩) - (1) 개념, 설치, 접속 (0) | 2023.10.03 |