인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

조성원님의 프로필 이미지

작성한 질문수

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

MSA 패턴 및 관련 질문입니다.

작성

·

380

0

안녕하세요 강사님.
 
먼저 강의를 수강하여 개발 방법론에 많은 지식과 방법을 경험하여 견문을 넓히게 되어 감사드립니다.
고민보다 전문분께 질문이 빠른 방법일 듯 하여 글을 올립니다.

 

질문 사항으로, 마이크로 아키텍처기반으로 기존 여러 모놀리식 시스템을 대체 설계하려합니다.
 
기능과 서비스들은 대략 구상되었고, 중요 부분이 분산 시스템에서의 트랜잭션 및 데이터 일관성 처리에 대한 문제 일 것 같습니다.
 
이에 데이터 동기화 및 처리 관련한 질문입니다.
 
- 1. 카프카 커넥터를 사용하는 것이 시스템의 데이터 허브의 기능을 위해 거의 표준적인지요?
 
- 2. 데이터 처리에 있어 해결을 위해 CQRS / SAGA 아키텍쳐 패턴들을 설명해주셨는데, SAGA 패턴을 위해 워크 플로나, OrchestratorService 등 별도 서비스를 추가 구현하여 카프카와 연계가 필요한 내용이 맞는지요?
 
- 3. 위에 SAGA 데이터 처리에 대한 Spring 기반 처리되는 참고할 샘플이 있을 지요?
 
- 4. 적은 서비스 사이에서는 규칙된 카프카 토픽가지고 강의해주신 내용만으로도 동기화 및 예외 처리가 단순하여 데이터 처리가 가능할 듯 생각 되는데요, 차후 많은 서비스 사이에서 SAGA 패턴이 구현되지 않으면, 트랜잭션 / 일관성과 실패처리에 대한 안정성을 확보하기 어려운지요.
 
궁금한게 많네요 강사님, 도움을 주시어 감사합니다.
 

답변 1

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

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

마이크로서비스 아키텍처를 이용한 애플리케이션에서의 핵심은 데이터베이스라고 생각합니다. 각각 분리된 서비스 들 간에 데이터의 공유를 어떻게 처리할 것인지에 따라 설계 및 개발 방법이 달라진다고 봅니다. 기존의 모놀리스 방식으로 마이크로서비스 방식으로 전환하는 데에 어려움이 있는 상당수의 이유가 여기에 있다고 생각됩니다. 

질문에 답변을 드리면, 

1. 카프카 커넥터의 주요 용도는 데이터의 이관이라기 보다는 데이터 소스를 토픽으로 이전하고, 토픽 데이터를 타켓 서비스 쪽으로 전달하는 데에 사용됩니다. 이러한 방식이 데이터 허브의 표준이라기 보다는 데이터 스트리밍을 하는 용도로 MQ가 많이 사용되며, 그중 카프카가 성능상으로도 좋다고 알려져 있습니다. 

https://stackoverflow.com/questions/42151544/when-to-use-rabbitmq-over-kafka

https://www.upsolver.com/blog/kafka-versus-rabbitmq-architecture-performance-use-case

2. CQRS나 SAGA 패턴을 구현하는데 있어서 카프카는 필수는 아닙니다. 이벤트 소싱 처리를 위해 Axon Framework를 사용하실 수 있습니다. 다음 강의에서 다룰 예정입니다.

https://github.com/AxonFramework/AxonFramework

3. 저도 아래 사이트에서 많이 참조하고 공부하고 있습니다. 확인해 보시면 좋을 것 같습니다 .

https://www.baeldung.com/cs/saga-pattern-microservices

4. 데이터 동기화를 위해 고려해야 할 사항은 한두가지가 아닙니다. 기존 RDB에서 처리해 주었던 트랜잭션 문제나 보상에 대한 문제를 직접 구현하시거나, 시스템을 이용해야 합니다. 카프라를 이용한 본 예제는 간단한 부분만 다룬거라서, 데이터의 사용량이 많거나 트랜잭션이 빈번하게 발생하는 경우라면, 거기에 맞는 서비스 설계를 다시 하는게 필요할 거 같습니다. SAGA 패턴이나 이벤트 소싱 패턴도 한 예일 것 같습니다. 

감사합니다.