yozm.tech
피드로 돌아가기
news.hada.ioHOTAI 재작성

Postgres LISTEN/NOTIFY, 초당 6만 건 처리 비결은?

PostgreSQL의 LISTEN/NOTIFY 기능은 실시간 알림에 유용하지만, 전역 잠금으로 인해 초당 2,900건 수준에서 병목이 발생했습니다. 하지만 알림을 버퍼링해 일괄 전송하는 최적화 기법을 적용하면 단일 서버에서 초당 최대 6만 건의 스트림 쓰기를 처리하며, 지연 시간도 15~100ms로 유지할 수 있음이 확인되었습니다. 이는 기존 대비 20배 향상된 성능으로, 실시간 데이터 스트리밍 활용 가능성을 넓힙니다.

5시간 전·2026.07.25·읽기 3·neo https://news.hada.io/user/neo

PostgreSQL(포스트그레스큐엘)의 LISTEN/NOTIFY(리스닝/노티파이) 기능은 데이터베이스 변경 사항을 실시간으로 애플리케이션에 알리는 데 사용됩니다. 이는 온라인 채팅이나 실시간 대시보드처럼 낮은 지연 시간이 요구되는 애플리케이션에 유용하지만, 기존에는 초당 약 2,900건의 스트림 쓰기에서 성능 병목이 발생해 대규모 시스템에는 적합하지 않다는 인식이 있었습니다. 그러나 최근 연구에 따르면, 알림 처리 방식을 최적화함으로써 단일 서버에서 초당 최대 6만 건의 쓰기를 처리할 수 있음이 밝혀져 이 기능의 확장성에 대한 인식을 바꾸고 있습니다.

이러한 성능 향상은 NOTIFY 호출 방식의 변화에서 비롯됩니다. 기존 방식은 데이터베이스에 새 데이터가 기록될 때마다 트리거를 통해 NOTIFY를 한 번씩 전송했습니다. 이 과정에서 알림의 커밋 순서를 보장하기 위해 트랜잭션 커밋 시 전역 배타적 잠금(global exclusive lock)이 발생했고, 이는 커밋을 직렬화하여 처리량을 제한하는 주원인이었습니다. 즉, 여러 트랜잭션이 동시에 커밋될 수 없고 차례를 기다려야 했으며, Postgres의 그룹 커밋(group commit) 최적화도 활용할 수 없었습니다. 하지만 최적화된 방식은 알림 자체를 진실의 원천(source of truth)으로 삼는 대신, 실제 데이터가 저장된 테이블을 확인하라는 '신호'로 간주합니다. 따라서 알림을 메모리에 버퍼링한 뒤 주기적으로 하나의 배치 트랜잭션(batch transaction)으로 전송함으로써 전역 잠금 획득 횟수를 획기적으로 줄였습니다. 이로 인해 개별 쓰기 트랜잭션은 빠르게 진행되고, 그룹 커밋 같은 Postgres 최적화를 활용하여 처리량을 크게 높일 수 있었습니다.

물론 알림을 버퍼링하는 과정에서 프로세스 장애 시 알림이 유실될 가능성이 있습니다. 이를 보완하기 위해 읽기 프로세스가 알림을 기다리는 동시에 데이터베이스를 주기적으로 조회하여 유실된 알림 없이 기록된 스트림 데이터가 있는지 확인하는 저빈도 폴링(low-frequency polling)을 함께 사용합니다. 이 보조적인 폴링은 낮은 빈도로 실행되므로 전체 성능에 미치는 영향은 미미합니다. 이러한 최적화된 구현은 동시 읽기 프로세스가 있는 환경에서 초기 구현 대비 20배 높은 초당 6만 건의 스트림 쓰기를 처리하면서도, 지연 시간은 15~100ms 범위 내로 유지하는 놀라운 결과를 보여주었습니다. 이는 Postgres CPU가 완전히 사용되어 데이터베이스 자체의 실제 포화 상태에 도달했음을 의미하며, 잠금 경합이 아닌 하드웨어 한계에 도달했음을 시사합니다.

이번 연구 결과는 Postgres LISTEN/NOTIFY가 특정 사용 사례에서 충분히 확장 가능하며, 별도의 메시지 큐 시스템 없이도 상당한 처리량을 달성할 수 있음을 입증했습니다. 이는 특히 스타트업이나 소규모 팀이 인프라 복잡성을 줄이면서도 실시간 기능을 구현하고자 할 때 매력적인 대안이 될 수 있습니다. 다만, 벤치마크에 96코어, 384GB RAM의 고사양 서버가 사용되었음을 고려할 때, 실제 프로덕션 환경에서는 예상 트래픽과 비용 효율성을 면밀히 분석하여 적절한 아키텍처를 선택하는 것이 중요합니다. 무조건적인 고확장성보다 실제 예상 규모에 적당한 여유를 더해 설계하고, 추가 확장성이 사실상 '공짜'일 때만 그 이상을 선택하는 현명한 접근이 필요합니다.

1인 창업자를 위한 기회 분석
AI 분석 · 참고용이며 검증이 필요합니다
4/10
보통
4점인가

기존 문제점을 해결하는 기술적 개선이지만, 1인 창업자가 직접 솔루션을 개발하여 판매하기에는 기술적 난이도와 시장 진입 장벽이 높습니다. 또한, 이미 대안 솔루션이 많습니다.

문제 / 미충족 수요

Postgres LISTEN/NOTIFY의 기본 구현은 전역 잠금으로 인해 대규모 실시간 알림 처리 성능에 한계가 있어, 별도 메시지 큐 시스템 도입의 필요성이 제기됩니다.

한국 시장
국내 있음한국에서도 Postgres를 사용하는 스타트업이 많지만, LISTEN/NOTIFY의 확장성 한계로 인해 Redis Pub/Sub, Kafka 등 별도 메시지 큐를 사용하는 경우가 일반적입니다.
수익 모델

B2B SaaS 구독, 컨설팅 · 돈 내는 주체: 실시간 데이터 스트리밍이 필요한 중소기업 및 스타트업 개발팀, 데이터베이스 관리자

1인 실현 가능성
3/5

Postgres 내부 동작에 대한 깊은 이해와 벤치마킹 역량이 필요하며, 고사양 서버 환경이 전제될 수 있어 1인 창업자가 초기부터 대규모 시스템을 구축하기는 어렵습니다.

진입 지점 (Wedge)

Postgres 기반 실시간 알림/데이터 스트리밍이 필요한 특정 산업군(예: 게임, 핀테크)을 위한 최적화된 LISTEN/NOTIFY 솔루션 제공.

이번 주 첫 실험

Postgres LISTEN/NOTIFY의 최적화 기법을 적용한 간단한 실시간 알림 데모 애플리케이션을 개발하고, 특정 산업군 잠재 고객에게 피드백 요청.

Original source
이 글은 news.hada.io의 기사를 yozm.tech가 한국어로 재작성한 버전입니다.
원문 보기