DB 공부/DB 기술 및 개념

[DB] PostgreSQL 은 왜 프로세스가 이렇게 많을까?

강_토발즈 2025. 10. 1. 21:34

 

리눅스 서버에서 PostgreSQL 을 사용하다 보면, 흔히 이런 명령어로 DB 상태를 확인한다.

ps -ef | grep postgres

 

그런데 결과를 보면 PID 가 서로 다른 여러 개의 postgres 프로세스가 뜨고, 심지어 같은 IP 로 연결된 세션이 여러 개 보이는 경우가 있다. “PostgreSQL 이 왜 이렇게 프로세스를 많이 띄우는 걸까?”라는 의문이 들었다.

1. PostgreSQL 은 멀티스레드가 아닌 멀티프로세스 구조이다

일반적인 애플리케이션 서버는 하나의 프로세스 안에서 여러 스레드가 동작하는 구조가 많다.
반면 PostgreSQL 은 멀티프로세스 구조를 사용한다.

즉, PostgreSQL 서버는 “하나의 거대한 프로세스”가 아니라, 여러 개의 독립 프로세스가 역할을 나누어 담당하는 구조이다.

2. PostgreSQL 의 프로세스 종류

2-1. 메인(Postmaster) 프로세스

  • DB 서버를 켜면 가장 먼저 실행되는 프로세스이다.
  • 클라이언트의 접속을 감시(listen)하고, 새로운 연결이 들어오면 backend 프로세스를 생성한다.

2-2. Backend 프로세스 (사용자 세션)

  • 클라이언트가 DB 에 접속할 때마다 세션 전용 프로세스가 하나씩 생성된다.
  • 이 프로세스는 해당 세션의 모든 SQL (INSERT, SELECT, UPDATE…) 을 담당한다.
  • 연결이 끊기면 해당 프로세스도 종료된다.
    따라서 “세션 수 = backend 프로세스 수” 이다.

2-3. 백그라운드 프로세스

PostgreSQL 은 안정성과 성능을 위해 여러 보조 프로세스를 항상 띄운다. 대표적으로:

  • Checkpointer : 버퍼 내용을 주기적으로 디스크에 기록한다.
  • Background Writer : 더티 페이지를 디스크로 flush 한다.
  • WAL Writer : 트랜잭션 로그(WAL) 을 기록한다.
  • Autovacuum Launcher & Worker : 자동 vacuum 작업을 수행한다.
  • Logical Replication Worker : 논리적 복제를 담당한다.
  • Archiver : WAL 로그를 아카이브한다 (옵션).

이런 백그라운드 프로세스는 DB 서버가 정상 동작하기 위해 꼭 필요하다.

 

3.모듈 수만큼 세션이 잡히는 이유

예를 들어, 애플리케이션 모듈이 10개 있고, 각각 PostgreSQL 에 연결을 맺어 INSERT 작업을 한다면,

  • PostgreSQL 서버는 10개의 backend 프로세스를 띄워 각 세션을 담당한다.
  • 그래서 같은 로컬 IP 로 10개의 연결이 보이는 것이다.

 결론적으로, “모듈 수 = 커넥션 수 = backend 프로세스 수” 이다.

 

4. 정리

  • PostgreSQL 은 멀티프로세스 구조라서 여러 프로세스를 띄우는 것이 정상이다.
  • 접속한 클라이언트(세션) 수 만큼 backend 프로세스가 생긴다.
  • 서버 운영에 필요한 checkpointer, WAL writer 같은 백그라운드 프로세스도 항상 떠 있다.
  • INSERT 같은 SQL 작업은 새로운 프로세스를 띄우는 게 아니라, 이미 생성된 backend 프로세스에서 실행된다.

따라서 ps -ef | grep postgres 로 여러 프로세스가 보이는 건 PostgreSQL 이 “정상적으로 세션과 백그라운드 작업을 처리 중”이라는 뜻이다.