• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

안녕하세요 질문이 있습니다.

24.04.29 17:39 작성 조회수 63

0

여러 서비스가 Kafka에 메시지를 전달해서 이를 단일 서버에서 저장하는 것은 이해가 갑니다!

 

그렇다면 조회할 때는 어떤 식으로 흐름이 발생하는건가요?

 

기존에 어플리케이션이 직접 DB와 커넥션이 되어있는 상태라면 조회문 날리면 그만인데

 

조회의 경우엔 조회 이벤트가 발생할 때마다 조회 이벤트를 보내면 DB가 카프카에 쿼리를 실행한 결과값을 저장하고, 어플리케이션에서는 또 컨슈머를 만들어서 그값을 가져오는 형태인가요?

 

답변 1

답변을 작성해보세요.

0

안녕하세요, 이도원입니다.

MSA에서 분산 처리되어 저장 된 데이터에 대해서 동기화 하는 다양한 방법 중에 한가지인 MQ를 이용한 방법에 대해서 강의에서 소개하였습니다. MQ에 메시지를 전송하는 쪽은 메시지를 사용하는 쪽에 관심을 두지 않고 오로지 전송하는 쪽에만 관심을 두고 역할을 하게 될 것이며, 메시지를 소비하는 쪽은 보낸 쪽과는 상관없이 MQ에 저장된 메시지를 인식하고 메시지의 규격이 자신이 이해하는 형태와 동일하면 해당 메시지를 사용하게 될 것입니다. 이렇게 책임의 분할을 통해 의존성을 낮출 수 있고 성능도 좋아지게 될 것입니다.

문의하신 내용 중에 DB에서의 조회를 어떻게 하느냐에 대한 부분은, 일단 MQ에 저장 된 메시지를 사용하려는 소비자(Consumer) 측에서는 이벤트에 의해 메시지가 생성 되었음을 인식하고(구독 방식이 많이 사용 됩니다) 해당 메시지를 DB에 업데이트 하게 됩니다. 조회 요청이 들어 왔을 때 메시지를 가져가는 것이 아니라, 사전에 일정한 주기나 메시지 저장 이벤트 등에 의해 MQ로부터 메시지를 가져와서 DB에 반영하게 됩니다. 이러한 작업을 위해서는 말씀하신대로 애플리케이션에서 메시지 수신을 위한 이벤트 처리가 반영되어 있어야 할 것이고, Spring Boot에서는 Spring Kafka에서 제공하는 @Listenere 과 같은 어노테이션을 통해 처리할 수 있습니다.

MQ와 DB와 같은 스토리지 간에 데이터 동기화는 이렇게 프로그래밍적인 방식고 가능하고, 강의에서도 소개한 Kafka Connect와 같은 서비스나 다른 동기화 매커니즘 등을 통해서도 가능합니다.

추가 질문사항 있으시면 다시 글 남겨 주세요.

감사합니다.