시스템 아키텍트백엔드 아키텍트

외부 서비스를 메시지 버스를 통해 아키텍처에 통합하는 방법과 어떤 어려움에 직면할 수 있나요?

Hintsage AI 어시스턴트로 면접 통과

답변.

IT 아키텍처에서 외부 서비스를 통합하기 위해 메시지 버스(예: RabbitMQ, Apache Kafka 또는 NATS)를 점점 더 많이 사용합니다. 이러한 접근 방식은 비동기 상호 작용을 구현하고 시스템 간의 결합을 낮추며 내결함성을 높일 수 있습니다.

구현은 다음 단계로 구성됩니다:

  1. 서비스는 메시지를 버스의 토픽/큐에 게시합니다.
  2. 외부 서비스는 관심 있는 이벤트/큐에 구독합니다.
  3. 이벤트가 수신되면 수신 측에서 비동기 처리가 발생합니다.

Kafka에서 Java로 이벤트를 보내는 예:

ProducerRecord<String, String> record = new ProducerRecord<>("events.orders", "orderCreated", jsonOrderData); producer.send(record);

주요 특징:

  • 내부 서비스와 외부 서비스 간의 직접적인 결합 감소.
  • 오류 처리를 위한 재전송 메커니즘(retries), Dead Letter Queues.
  • 데이터의 확장 가능하고 신뢰할 수 있는 전송 가능성.

함정 질문.

메시지 버스를 사용한다고 해서 데이터 손실이 없을까요?

답변: 아니요. 배달 정책(acknowledgment, 메시지 영속성)을 별도로 설정해야 하며, 때로는 브로커의 제한(예: 네트워크 장애 또는 큐 오버플로)을 우회해야 할 수도 있습니다.


전송된 모든 메시지가 도착한 순서대로 처리되어야 하나요?

답변: 반드시 그렇지는 않습니다. 순서를 보장할 수 있지만, 이는 성능을 저하시킬 수 있습니다. 경우에 따라 처리 순서가 중요하지 않으며 비동기 병렬 소비를 사용하는 것이 좋습니다.


메시지 큐 지원을 서비스에 추가하는 것으로 통합을 확장하기에 충분한가요?

답변: 아니요. 확장을 위해서는 파티셔닝(shard 분할), 그룹 구독 및 소비자 균형을 고려해야 합니다.