DB

PostgreSQL란? 프로세스 구조/ MySQL과 차이점

吳버플로우 2025. 2. 22. 21:30

PostgreSQL란?

객체 관계형 데이터베이스 관리 시스템(ORDBMS)을 말합니다.

다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공합니다.

PostgreSQL 구조

PostgreSQL은 클라이언트-서버 모델을 사용하며, 클라이언트와 서버가 분리되어 있습니다.

  • 클라이언트(Client) → SQL 쿼리를 보내고 결과를 받음 (psql, 애플리케이션, GUI 도구 등)
  • 서버(Server) → 요청을 처리하고 데이터베이스를 관리

💡 서버는 하나의 메인 프로세스(Postmaster) 가 여러 개의 백엔드 프로세스(Backend Process) 를 생성해서 클라이언트 요청을 처리합니다.

프로세스 구조

PostgreSQL은 멀티프로세스 방식으로 동작하며, 주요 프로세스는 다음과 같습니다. 

Postmaster PostgreSQL 서버의 메인 프로세스. 클라이언트 연결을 관리하고 백엔드 프로세스를 생성함.
Backend Process 각 클라이언트 연결마다 생성되는 프로세스. SQL 실행, 데이터 읽기/쓰기 처리.
WAL Writer Write-Ahead Logging(로그 선행 기입, WAL을 사용하는 시스템에서 모든 수정은 적용 이전에 로그에 기록) 을 수행하여 데이터 무결성을 유지하는 프로세스.
Background Writer 공유 메모리(Shared Buffer)에서 디스크로 데이터를 쓰는 역할.
Autovacuum Process 자동으로 데이터베이스 정리를 수행하여 성능을 최적화.
Checkpointer 주기적으로 데이터베이스 변경 사항을 디스크에 기록하여 장애 발생 시 복구를 돕는 프로세스.

PostgreSQL 데이터 처리 과정

1️⃣ 클라이언트가 SQL 요청을 보냄
2️⃣ Postmaster가 연결을 받아서 Backend Process를 생성
3️⃣ SQL 파싱 및 최적화 → 실행 계획 생성
4️⃣ 데이터가 Shared Buffer에서 검색 (없으면 디스크에서 읽음)
5️⃣ 트랜잭션 로그(WAL) 기록 → 변경 사항 적용
6️⃣ 결과를 클라이언트에게 반환

PostgreSQL과 MySQL 비교

ACID 규정 준수

원자성, 일관성, 격리성, 지속성(ACID)은 예상치 못한 오류가 발생한 후에도 데이터베이스를 유효한 상태로 유지하는 트랜잭션 정의 속성입니다. 

MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수를 제공합니다. ( MyISAM은 지원 안 함 ) PostgreSQL은 모든 구성에서 ACID와 완벽하게 호환됩니다.

동시성 제어

다중 버전 동시성 제어(MVCC)는 레코드의 중복 사본을 생성하여 동일한 데이터를 병렬로 안전하게 읽고 업데이트하는 고급 데이터베이스 기능입니다. MVCC를 사용하면 여러 사용자가 데이터 무결성을 손상시키지 않고 동일한 데이터를 동시에 읽고 수정할 수 있습니다.

MySQL 데이터베이스는 MVCC를 제공하지 않지만 PostgreSQL은 이 기능을 지원합니다.

인덱스

데이터베이스는 인덱스를 사용하여 데이터를 더 빠르게 검색합니다. 자주 액세스하는 데이터를 다른 데이터와 다르게 정렬 및 저장하도록 데이터베이스 관리 시스템을 구성하여 자주 액세스하는 데이터를 인덱싱할 수 있습니다.

MySQL은 계층적으로 인덱싱된 데이터를 저장하는 B-트리 및 R-트리 인덱싱을 지원합니다. PostgreSQL 인덱스 유형에는 트리, 표현식 인덱스, 부분 인덱스 및 해시 인덱스가 포함됩니다. 크기를 확장할 때 데이터베이스 성능 요구 사항을 세밀하게 조정할 수 있는 더 많은 옵션이 있습니다.

데이터 유형

MySQL은 순수 관계형 데이터베이스입니다. 반면 PostgreSQL은 객체 관계형 데이터베이스입니다. 즉, PostgreSQL에서는 데이터를 속성을 가진 객체로 저장할 수 있습니다. 객체는 Java 및 .NET과 같은 여러 프로그래밍 언어의 일반적인 데이터 유형입니다. 객체는 상위-하위 관계 및 상속과 같은 패러다임을 지원합니다.

PostgreSQL을 사용하는 것은 데이터베이스 개발자에게 더 직관적입니다. PostgreSQL은 배열 및 XML 과 같은 다른 추가 데이터 유형도 지원합니다.

보기

보기는 데이터베이스 시스템이 여러 테이블에서 관련 데이터를 가져와서 만드는 데이터 하위 집합입니다.

MySQL은 보기를 지원하는 반면, PostgreSQL은 고급 보기 옵션을 제공합니다. 예를 들어 특정 기간 동안의 모든 주문 합계 금액과 같은 일부 값을 미리 계산하여 구체화된 뷰를 생성할 수 있습니다. 구체화된 뷰는 복잡한 쿼리의 데이터베이스 성능을 향상시킵니다.

 

트리거

트리거는 데이터베이스 관리 시스템에서 관련 이벤트가 발생할 때 자동으로 실행되는 저장 프로시저입니다.

MySQL 데이터베이스에서는 SQL INSERT, UPDATE  DELETE 문에 AFTER  BEFORE 트리거만 사용할 수 있습니다. 즉, 사용자가 데이터를 수정하기 전이나 후에 프로시저가 자동으로 실행됩니다. 반대로 PostgreSQL은 INSTEAD OF 트리거를 지원하므로 함수를 사용하여 복잡한 SQL 문을 실행할 수 있습니다.


요약

카테고리 MySQL PostgreSQL
데이터베이스 기술 MySQL은 순수 관계형 데이터베이스 관리 시스템입니다. PostgreSQL은 객체 관계형 데이터베이스 관리 시스템입니다.
기능 MySQL은 보기, 트리거 및 프로시저와 같은 데이터베이스 기능을 제한적으로 지원합니다. PostgreSQL은 구체화된 뷰, INSTEAD OF 트리거, 여러 언어의 저장 프로시저와 같은 최고급 데이터베이스 기능을 지원합니다.
데이터 유형 MySQL은 숫자, 문자, 날짜 및 시간, 공간, JSON 데이터 유형을 지원합니다. PostgreSQL은 기하학, 열거형, 네트워크 주소, 배열, 범위, XML, hstore, 복합을 포함하여 모든 MySQL 데이터 유형을 지원합니다.
ACID 규정 준수 MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진에서만 ACID를 준수합니다. PostgreSQL은 항상 ACID와 호환됩니다. 
인덱스 MySQL은 B-트리 및 R-트리 인덱스를 지원합니다. PostgreSQL은 트리와 함께 표현식 인덱스, 부분 인덱스, 해시 인덱스와 같은 여러 인덱스 유형을 지원합니다.
성능 MySQL은 높은 빈도의 읽기 작업 성능을 개선했습니다. PostgreSQL은 높은 빈도의 쓰기 작업 성능을 개선했습니다.