개발자

kafka restAPI 통신

2024년 02월 21일조회 370

현재 카프카로 서버간의 restAPI 통신을 구현하려고 하는데요 게시판 생성 요청 서비스를 만들때요. 게시판에는 멤버정보가 들어가는데요 게시판 생성요청 정보에는 게시판 제목 게시판 내용 멤버 id 가 있구요 게시판 생성요청시에 작성자id 를 가지고 멤버 서버로 멤버 정보를 요청하는 방식을 해보려고 합니다.
 카프카를 사용할때 1 . 게시판서버 게시판 생성메서드에서 프로듀서로 작성자id 를 특정 토픽에 보내고 
2 . 멤버서버에서 컨슈머 리스너를 통해 해당 토픽에 요청정보가 들어오면 3 . 요청을 처리하고 다시 객체를 반환 해줘야 하는데 이것을 다시 프로듀서로 작성하고 4 . 게시판서버에서 리스너로 응답받은 객체를 생성메서드에 주입시켜 게시판을 완성시키려고 했습니다. 찾아보니 컨슈머리스너는 void 이어야 한다고 하더라구요. 그렇게 되면 요청과 응답을 받는것을 어떻게 한 메서드 안에서 처리 해야 할까요 ? 찾아본 방법으로는 kafka rest proxy 라는것도 찾아봤는데 현업에서 사용하는 방법이 따로 있는지 궁금합니다

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

이양일님의 프로필 사진

안녕하세요! Client -> 게시판 서버(Web) -> Kafka -> 게시판 서버(Consumer) 의 형태의 Flow 를 동기식으로 처리하시고자 하는거로 이해하였습니다. 다만 Kafka 의 구조상 위에 정리한 Flow 를 동기적으로 수행하는것은 불가능하진 않지만 Kafka 의 장점이 사라지고 트래픽이 많을 경우 게시판 서버의 부하가 클수밖에 없는 형태라 개인적으로는 추천하지 않는 형태입니다. 그것보다는 Client 에서 게시판 생성 요청을 하면 Producer 로 생성 메세지를 Publish 한 뒤에 응답을 줍니다. 응답을 받은 Client 는 consumer 에서 게시판 생성이 완료될때까지 주기적으로 Polling 을 하며 대기하는 Flow 가 좀더 자연스러운 방향으로 생각됩니다. Kafka Rest Proxy 는 Kafka 에서 제공하는 기능을 HTTP Rest API 형태로 쓸수 있게 해주는 컴포넌트로 현재 구현에 사용하시는 Producer 나 Consumer(리스너 라고 말씀하시는 부분)를 HTTP API 로 대체할 수 있는 형태라고 이해하시면 됩니다. 저의 짧은 지식이 조금이나마 도움이 되시길 바라겠습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 02월 21일

카프카의 경우 일반적으로 비동기 처리에 최적화되어서 이런 식의 요청/응답 구조를 직접 구현하기는 쉽지 않습니다. 그러나 여기서 제안드릴 수 있는 몇 가지 트릭이 있습니다. 1. Request-Reply 패턴: 이 방식은 프로듀서가 메시지를 보낼 때 reply-to 헤더에 응답을 받을 주소(다른 토픽)를 포함시키고, 컨슈머가 메시지를 처리한 후 이 토픽으로 응답을 보내는 방식입니다. 2. Correlation ID: 각 요청에 고유한 ID를 부여하고, 컨슈머가 응답할 때 이 ID를 포함시켜 요청과 응답을 매핑합니다. 그러나, 이런 방식들도 완전한 동기 방식의 API 호출과 같은 논블로킹 환경에서 작동하는 것은 아니며, 종종 복잡성을 추가하게 됩니다. 대부분의 현업 환경에서는 카프카 스트림즈 API와 같은 도구들을 사용하여 스트림 기반 처리를 수행하거나 서비스 간 직접 HTTP 호출 등 다른 IPC 메커니즘이 함께 사용됩니다. 따라서, 그런 복잡성을 감수하고 이를 구현하는 것이 가치가 있다고 판단한다면 위의 방법들을 시도해볼 수 있습니다. 하지만 그렇지 않다면 다른 방법을 찾아보는 것이 좋을 수 있습니다. 결국, 선택은 특정 문제에 대한 가장 적합한 솔루션을 찾는 것에 달려있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!