inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Kafka를 활용한 데이터 동기화 테스트 ②

단일 데이터베이스 연결

163

도토리묵

작성한 질문수 5

0

강의 내용에 따르면 order-service1, order-service2 두 개의 인스턴스가 kafka-connect를 사용하기 위해 mariadb에 직접 연결을 맺는것으로 이해했습니다.

 

제가 궁금한 것은 단일 DB를 사용하는 경우에 kafka를 쓰는 이유입니다.

현 강의와 같이 단일 DB를 사용하는 경우라면 kafka를 사용하지 않고, RestTemplate이나 FeignClient와 같은 라이브러리를 사용해서 catalog-service와 통신하고, jpa를 통해 직접 DB에 데이터를 직접 삽입할 수 있을텐데 이 경우 트랜잭션을 잘 처리해준다면 데이터도 동기화 할 수 있다고 생각합니다.

다만, 여러 진입점 관리, 트랜잭션 처리 등 따로 처리해야할 부분이 많고 요청이 증가할 수록 kafka의 성능이 우수하기 때문에 kafka를 쓰는 것으로 이해했습니다. 제 생각에 틀린 부분이 있다면 말씀해주시면 감사하겠습니다!

spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq

답변 2

1

Dowon Lee

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

말씀하신 내용처럼 서비스간의 통신 발생 시 트랜잭션 처리가 잘 된다면 문제는 없습니다. 다만, RestTemplate(FeignClient도 동일) Blocking 서비스이기 때문에, 호출 후 응답이 올때 까지 기다려야 하는 부분이 있습니다.. 빠른 속도로 처리 되거나, 특정 서비스에 따라 반드시 동기화 응답을 기다리고 처리해야 하는 경우라면 경우가 달라지겠지만, Kafka는 비동기 처리를 위해서 사용되는 부분이고, 처리되어야 할 부분을 Kafka에게 전달 후, 요청한 쪽에서는 다른 업무를 진행할 수 있습니다. 알고 계시는 것처럼, 이러한 부분에서는 단일 DB의 사용여부가 문제라기 보다는 서비스 산 사용하는 스토리지가 다를 경우 해당 정보들에 대한 트랜잭션과 실패 시 보상트랜잭션을 통한 롤백 등에 대한 처리를 해 주어야 할테니, 2가지의 장담점으로 고려하시어 작업하시면 좋을 것 같습니다. 실제 서비스 설계 시, 동기화 처리인지 비동기화 처리인지를 결정하시고 데이터 구조와 처리 방식으로 설계하시는게 필요합니다.

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

감사합니다.

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 도토리묵님.

단일 데이터베이스를 사용하는 상황에서 Kafka를 사용하는 이유에 대해 질문을 주셨네요. 아래 설명이 여러분의 궁금증 해결에 도움이 되기를 바랍니다.

왜 Kafka인가?

  1. 확장성(Scalability): 단일 DB에 대한 직접적이고 동기화된 접근은 소규모 시스템에서는 효과적일 수 있으나, 시스템이 확장되고, 다양한 구성 요소가 동시에 데이터를 공유하거나 사용할 때는 병목이 될 수 있습니다. Kafka는 대용량 실시간 데이터 스트리밍을 지원하여 데이터 처리의 병목 문제를 완화할 수 있습니다.

  2. 비동기 처리(Asynchronous Processing): Kafka를 사용하면 비동기적으로 데이터를 처리할 수 있습니다. 이는 시스템 부하를 줄이고, 연속적인 요청 처리에 성능을 개선할 수 있게 해줍니다.

  3. 내결함성(Fault Tolerance): Kafka는 데이터 손실 없이 장애를 극복할 수 있도록 설계되었습니다. 이는 데이터 시스템의 복구 가능성을 높이고, 다운타임을 최소화할 수 있게 합니다.

  4. 메시지 기록 보유(Commit Log): Kafka는 모든 메시지를 로그로 보관하여, 데이터가 손실될 가능성을 줄입니다. 이는 서비스 상태를 유지하고, 복구작업에 활용될 수 있습니다.

다양한 통신 방식의 선택

  • RestTemplate 및 FeignClient는 동기적 HTTP 요청을 기반으로 서비스 간 커플링이 강해질 수 있습니다. 트랜잭션 경계가 서비스 내에 제한되기 때문에 복잡한 협력 트랜잭션이 아닐 경우에는 유리할 수 있습니다.

  • Kafka 사용은 메시지 기반 비동기 통신을 가능하게 하며, 서비스 간의 느슨한 결합(loose coupling)을 유지할 수 있습니다. 이는 각 서비스의 독립성을 높이고, 마이크로서비스 아키텍처의 장점을 더욱 살릴 수 있습니다.

이와 관련하여 소통되는 기존의 논의들을 참고하시면 도움이 될 것 같습니다. 그렇다면, 몇 가지 관련 논의를 소개합니다:

  1. Kafka sink connector를 통해서 단일 데이터베이스 저장을 했을 때 장점?
  2. 단일 DB 연결을 위한 Kafka 사용 이유 질문

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kafka 업데이트 강의 듣고 시포요

0

85

1

강의 교안

0

75

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

66

1

섹션 19 질문드립니다

0

54

1

강의 자료 업데이트

0

84

1

부하분산 강의 섹션

0

57

1

강의자료는 어디에서?

0

72

1

강의 자료는 어디서 다운 받을 수 있나요?

0

110

1

전체 사용자 조회시 오류

0

59

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

113

2

학습 방향

0

96

2

카프카 커넥터 사용 목적 문의

0

86

2

kafka 강의

0

109

2

서비스 디스커버리 종류

0

87

2

강의 자료에 대해서 궁금해요

0

117

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

90

2

Kafka Source Connect 버전 에러

0

85

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

96

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

57

1

강의 업데이트 계획이 궁금합니다.

0

113

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

163

2

어떤 것이 업데이트 된 건가요?

0

164

2