해결된 질문
작성
·
251
1
안녕하세요 강사님 아키텍처에 궁금한 점이 생겨 질문드립니다.
카프카를 사용한 이유가 채팅 서버의 상태를 비동기로 전송하기 위함이라 이해했습니다.
채팅 서버가 실행/종료될 때
카프카에 이벤트 발행
컨트롤 서버가 이벤트 컨슈밍하며 채팅서버 상태 확인
제가 제대로 이해한게 맞다면 대략 위와 같은 흐름이라 이해했습니다.
즉 채팅 서버의 상태를 컨트롤 서버에 알리기 위해 카프카라는 메시지 브로커를 둔것 같은데, 카프카를 사용하지 않고 채팅서버에서 컨트롤 서버로 직접 상태를 전송하는 방식은 불가능할까요.? 이 상황에서 카프카가 굳이 필요한건지 라는 의문이 들어 질문하게 됐습니다ㅇㅅㅇ.
답변 1
1
안녕하세요 좋은 질문이신거 같아요. 항상 좀 더 좋은 방법에 대해서 고민을 하고 의심을 하는것은 매우 좋습니다.
일단 결론을 먼저 말씀드리자면, 채팅서버에서 컨트랙트로 상태를 전송하셔도 되요.
그런데 문제는 다음과 같아요.
서버가 갑자기 죽는경우에 대해서 어떻게 요청을 보낼 것인가.
HTTP 요청을 전송을 한다고 하면, 그 부분에 대한 리소스는 어떻게 처리가 될 까??
이런 부분만 확인해 보면 일단 HTTP 요청은 절대적으로 정답이 아니라는 것을 알 수가 있어요.
그리고 일반적으로 실제 실무에서는 서버간 통신에 대해서 물론 모든 부분이 적용이 되는것은 아니지만,
이러한 상태 관리에 대한 이벤트같은 부분은 보통 Kafka같은 이벤트 툴을 사용을 합니다.
다른 서버에서는 그냥 이벤트를 툭 던짐으로써 바로 역할을 종료하면 되기 떄문에, 굳이 컨트롤 타워의 처리 형태를 기다릴 필요가 없는거죠.
그럼으로써 좀 더 리소스를 절약할 수 있다는 장점도 있고요
파이후님이 좀 더 다른 방법이 좋다고 생각을 하신다면, 그 방식으로 적용을 해보셔도 되요. 저는 개발에 정답은 없다고 생각을 하기 떄문에
Kafka를 굳이 사용해야 할까?? 에 대한 정답은 상세설명에서도 나와 있듯이 단순히 많은 회사에서 사용을 하기 때문에 채용을 했다고 생각을 하시면 됩니다.
이외에도 RabbitMQ, Redis등이 있으니 관심있으시면 한번 살펴보시는 것도 좋을꺼 같아요.
질문 감사합니다!
강사님이 정의해주신 문제를 보니 카프카를 왜 사용해야 하는지 이해가 되네요
서버가 갑자기 죽는경우에 대해서 어떻게 요청을 보낼 것인가.
(강의에서 말해주셨듯이) 카프카가 일종의 로드밸런싱 역할을 하니까, 컨트롤 서버 중 하나가 죽더라도 정상적으로 통신이 가능하겠네요
HTTP 요청을 전송을 한다고 하면, 그 부분에 대한 리소스는 어떻게 처리가 될 까?
이 부분은 생각지 못했는데, 카프카는 카프카 프로토콜이라는 TCP 방식으로 통신하는 걸 알게 됐어요. 기존 http 보다 훨씬 빠르게 전송이 가능해지겠군요!
답변 감사합니다~!