작성
·
103
0
강의 내용에 따르면 order-service1, order-service2 두 개의 인스턴스가 kafka-connect를 사용하기 위해 mariadb에 직접 연결을 맺는것으로 이해했습니다.
제가 궁금한 것은 단일 DB를 사용하는 경우에 kafka를 쓰는 이유입니다.
현 강의와 같이 단일 DB를 사용하는 경우라면 kafka를 사용하지 않고, RestTemplate이나 FeignClient와 같은 라이브러리를 사용해서 catalog-service와 통신하고, jpa를 통해 직접 DB에 데이터를 직접 삽입할 수 있을텐데 이 경우 트랜잭션을 잘 처리해준다면 데이터도 동기화 할 수 있다고 생각합니다.
다만, 여러 진입점 관리, 트랜잭션 처리 등 따로 처리해야할 부분이 많고 요청이 증가할 수록 kafka의 성능이 우수하기 때문에 kafka를 쓰는 것으로 이해했습니다. 제 생각에 틀린 부분이 있다면 말씀해주시면 감사하겠습니다!
답변 2
1
안녕하세요, 이도원입니다.
말씀하신 내용처럼 서비스간의 통신 발생 시 트랜잭션 처리가 잘 된다면 문제는 없습니다. 다만, RestTemplate(FeignClient도 동일) Blocking 서비스이기 때문에, 호출 후 응답이 올때 까지 기다려야 하는 부분이 있습니다.. 빠른 속도로 처리 되거나, 특정 서비스에 따라 반드시 동기화 응답을 기다리고 처리해야 하는 경우라면 경우가 달라지겠지만, Kafka는 비동기 처리를 위해서 사용되는 부분이고, 처리되어야 할 부분을 Kafka에게 전달 후, 요청한 쪽에서는 다른 업무를 진행할 수 있습니다. 알고 계시는 것처럼, 이러한 부분에서는 단일 DB의 사용여부가 문제라기 보다는 서비스 산 사용하는 스토리지가 다를 경우 해당 정보들에 대한 트랜잭션과 실패 시 보상트랜잭션을 통한 롤백 등에 대한 처리를 해 주어야 할테니, 2가지의 장담점으로 고려하시어 작업하시면 좋을 것 같습니다. 실제 서비스 설계 시, 동기화 처리인지 비동기화 처리인지를 결정하시고 데이터 구조와 처리 방식으로 설계하시는게 필요합니다.
추가 질문 사항있으시면 글 남겨 주세요.
감사합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 도토리묵님.
단일 데이터베이스를 사용하는 상황에서 Kafka를 사용하는 이유에 대해 질문을 주셨네요. 아래 설명이 여러분의 궁금증 해결에 도움이 되기를 바랍니다.
확장성(Scalability): 단일 DB에 대한 직접적이고 동기화된 접근은 소규모 시스템에서는 효과적일 수 있으나, 시스템이 확장되고, 다양한 구성 요소가 동시에 데이터를 공유하거나 사용할 때는 병목이 될 수 있습니다. Kafka는 대용량 실시간 데이터 스트리밍을 지원하여 데이터 처리의 병목 문제를 완화할 수 있습니다.
비동기 처리(Asynchronous Processing): Kafka를 사용하면 비동기적으로 데이터를 처리할 수 있습니다. 이는 시스템 부하를 줄이고, 연속적인 요청 처리에 성능을 개선할 수 있게 해줍니다.
내결함성(Fault Tolerance): Kafka는 데이터 손실 없이 장애를 극복할 수 있도록 설계되었습니다. 이는 데이터 시스템의 복구 가능성을 높이고, 다운타임을 최소화할 수 있게 합니다.
메시지 기록 보유(Commit Log): Kafka는 모든 메시지를 로그로 보관하여, 데이터가 손실될 가능성을 줄입니다. 이는 서비스 상태를 유지하고, 복구작업에 활용될 수 있습니다.
RestTemplate 및 FeignClient는 동기적 HTTP 요청을 기반으로 서비스 간 커플링이 강해질 수 있습니다. 트랜잭션 경계가 서비스 내에 제한되기 때문에 복잡한 협력 트랜잭션이 아닐 경우에는 유리할 수 있습니다.
Kafka 사용은 메시지 기반 비동기 통신을 가능하게 하며, 서비스 간의 느슨한 결합(loose coupling)을 유지할 수 있습니다. 이는 각 서비스의 독립성을 높이고, 마이크로서비스 아키텍처의 장점을 더욱 살릴 수 있습니다.
이와 관련하여 소통되는 기존의 논의들을 참고하시면 도움이 될 것 같습니다. 그렇다면, 몇 가지 관련 논의를 소개합니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.