트랜잭셔널 메시징에도, 그냥 PostgreSQL 쓰세요

  • 관리자 신현승
  • 카테고리: 개발이슈
  • 조회수: 694
  • 작성일:

애플리케이션 개발 시 데이터 분석이나 알림 전송을 위해 비동기 처리 상황이 자주 발생한다. 일반적으로 아파치 카프카나 AWS SQS와 같은 메시지 큐를 사용하지만, 애플리케이션 데이터베이스와 메시지 큐를 단일 트랜잭션으로 묶기 어려워 데이터 일관성이 깨질 수 있다.

 

예를 들어, 데이터베이스 수정 후 메시지 큐에 메시지를 보내는데, 후속 로직에서 오류가 발생하면 데이터베이스는 롤백되지만 메시지 큐에 보낸 메시지는 회수할 수 없다.

 

<출처: 작가>

 

이런 문제를 해결하기 위해 트랜잭셔널 메시징이 등장했다. 트랜잭셔널 메시징은 메시지를 데이터베이스 트랜잭션의 일부로 발행함으로써 데이터 일관성을 보장한다.

이 글에서는 트랜잭셔널 메시징을 구현하는 두 가지 패턴, 트랜잭셔널 아웃박스와 트랜잭션 로그 테일링을 소개하며, PostgreSQL을 활용하여 이를 단순하게 만드는 방법을 다룬다.

 

트랜잭셔널 메시징을 구현하는 두 가지 패턴

트랜잭셔널 메시징을 구현하는 패턴은 아웃박스 테이블을 메시지 큐로 활용한다. 첫 번째 패턴, 트랜잭셔널 아웃박스는 메시지를 아웃박스 테이블에 넣고, 데이터베이스 트랜잭션 커밋 후 주기적으로 메시지 큐에 전달한다.

 

<출처: microservices.io>

 

두 번째 패턴, 트랜잭션 로그 테일링은 아웃박스 테이블의 내용을 데이터베이스의 트랜잭션 로그에서 읽어 메시지 큐에 전송한다.

 

<출처: microservices.io>

 

증가하는 우발적 복잡성

프레드 브룩스는 소프트웨어 엔지니어링에서 복잡성을 본질적 복잡성과 우발적 복잡성으로 구분한다. 우발적 복잡성은 기술 도입에서 발생하는 복잡성으로, 비동기 처리와 데이터 일관성 유지 과정에서 늘어난다.

이렇듯 불필요한 복잡성을 제거해야 한다는 생각을 가지고 있다.

 

그냥 PostgreSQL 쓰세요

최근 '그냥 Postgres 쓰세요'라는 글이 주목을 받았다. PostgreSQL은 다양한 기능을 제공하며, 우발적 복잡성을 감소시켜준다.

 

<출처: 작가>

 

포스트그레스큐엘로 트랜잭셔널 메시징을 더 단순하게

PGMQ는 PostgreSQL을 메시징 큐로 확장하여 메시지 발행과 데이터베이스 수정 작업을 단일 트랜잭션으로 묶을 수 있다.

 

<출처: 작가>

 

PGMQ는 SQL을 사용하여 쉽게 운영할 수 있으며, 메시지 삭제 및 경쟁 소비자 구현을 지원한다.

 

<출처: PGMQ 깃허브>

 

마치며

트랜잭셔널 메시징은 복잡한 문제지만 PostgreSQL로 더 단순하게 해결할 수 있다. 기술 선택은 각자 환경에 따라 달라지므로 다양한 선택지를 아는 것이 중요하다.

 


해당 기사는 GPT를 이용하여 요약한 내용입니다.

원문보기


코멘트 (0)