Inflearn brand logo image

인프런 커뮤니티 질문&답변

ssunn0812님의 프로필 이미지
ssunn0812

작성한 질문수

RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기

20.DB 연동 메시지큐의 트랜잭션 처리 실습

RabbitMQ에서의 트랙잭션 메시징 질문

해결된 질문

작성

·

28

0

안녕하세요. 트랜잭션 메시징에 대해 궁금한 것이 생겨 질문드립니다.

트랜잭션 메시징은 데이터베이스 작업과 메시지 발행 작업을 원자적으로 수행하여 데이터의 일관성을 보장하는 것으로 알고 있습니다.

강의 내용 중 '트랜잭션 메시징의 한계'에서 분산 트랜잭션을 완벽하게 보장하지는 않는다고 하셔서 이를 DB의 트랜잭션과 메시지 전송의 트랜잭션이 서로 독립적으로 작동한다고 이해했습니다.

그럼 RabbitMQ에서 트랜잭션 메시징을 지원한다고 할 수 있나요?

 

 

답변 2

0

코드빌런님의 프로필 이미지
코드빌런
지식공유자

안녕하세요. 수강자님

DB와 RabbitMQ같은 메시지 브로커의 트랜잭션은 서로 독립적입니다.

그래서 RabbitMQ에서 트랜잭션을 구현하려면 DB와는 별도로 자체에서 처리하는 방식으로 "처리는 가능" 합니다.

 

19강 자료에 나와있는데,

 

amqp-client에 의존성 (starter-amqp에 포함)

  1. channel.txSelect():

    • 트랜잭션 시작. 이후 모든 메시지 전송 작업은 이 트랜잭션 내에서 실행.

  2. channel.txCommit():

    • 트랜잭션 커밋. 모든 작업이 성공적으로 수행되었음을 RabbitMQ에 알림.

  3. channel.txRollback():

    • 트랜잭션 롤백. 트랜잭션 내 작업을 무효화하고 변경사항을 되돌림.

이 방식으로 처리는 가능합니다만, 아시다시피 메시지큐는 비동기 환경에서 분산 메시징을 처리하는데 탁월한 미들웨어이기 때문에 이 방식으로 굳이 트랜잭션을 구현하는게 의미있나? 라는 관점에서 보면 구현 비용대비 실효성이 떨어지는 편입니다

따라서 19강에서 설명하는 바와 같이 Outbox 패턴(db에 별도로 저장 한 뒤 다른 프로세스를 통해 메시지 처리)이나 TCC와 같은 형태의 재시도와 보정을 통한 멱등성을 보장하는게 훨씬 업무적으로는 좋은 선택이라고 판단합니다.

 

완강이 얼마 남지 않으셨네요. 마무리 잘 하시기 바랍니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ssunn0812님.

트랜잭션 메시징에 관해 질문해 주셨습니다. RabbitMQ에서 트랜잭션 메시징을 이해하려면, 메시지 브로커와 데이터베이스 간의 상호 작용을 살펴보는 것이 중요합니다.

  1. 트랜잭션 메시징 개념:

    • 트랜잭션 메시징은 데이터베이스와 메시지 브로커 간의 작업을 일관되게 유지하고, 중단 없이 완료되도록 보장하는 것을 목표로 합니다.
    • 이는 일반적으로 두 시스템 간의 분산 트랜잭션을 이용하지만, 분산 시스템에서 트랜잭션을 완벽하게 보장하려면 몇 가지 복잡한 문제가 있습니다.
  2. RabbitMQ의 트랜잭션 지원:

    • RabbitMQ 자체적으로는 메시지 전송에 대한 트랜잭션을 지원할 수 있긴 하지만, 이는 메시지 브로커 내에서의 트랜잭션입니다.
    • 데이터베이스와 RabbitMQ 간의 분산 트랜잭션을 완전히 보장하려면, 트랜잭션 관리자나 커밋/롤백의 조정을 통해야 가능한데, 이는 일반적으로 직접적인 지원보다는 애플리케이션 수준에서 구현해야 합니다.
  3. 실제 구현의 예:

    • 시스템 안정성을 위해 데이터베이스의 트랜잭션 커밋 후에 메시지를 전송하거나, 일종의 별도 롤백 메커니즘을 이용할 수 있습니다.
    • BizTalk Server나 Kafka 등의 플랫폼은 이러한 트랜잭션 메시징을 지원하며, RabbitMQ와 함께 사용해 트랜잭션 메시징의 일관성을 높일 수 있습니다.

이 주제와 관련하여 더 깊이 있는 설명을 원하시면 다음의 질문들을 참조하시기 바랍니다:
- “RabbitMQ 트랜잭션 및 메시지 일관성에 대한 고민”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ssunn0812님의 프로필 이미지
ssunn0812

작성한 질문수

질문하기