Skip to content

MSA 환경에서의 Kafka를 이용한 DB 데이터 동기화

Notifications You must be signed in to change notification settings

kafka-practice/.github

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 

Repository files navigation

MSA 환경 도전 + 적응기 - MSA with Kafka


기존의 프로젝트에서 저는 DB를 하나로 사용한 MSA 환경을 구성했었습니다.
하지만 ✨하나의 DB로 모든 서비스를 연동✨ 시, 관리가 편하다는 장점이 있지만
✨동시성 문제✨ 등의 문제가 발생 가능하다는 것을 알게되었습니다.
그렇다면, 어떻게 실무에서는 다중 DB를 구현할까라는 의문점이 생겼습니다.
이후 Kafka에 대해 알게되었고, ✨Kafka를 통해 MSA DB 동기화를 수행한다는 것✨을 알게되었습니다.
Kubernetes 환경에서 ✨Kafka with SASL_TLS✨는 구현해본 상태이며
실제 프로젝트에 적용해보기 전, ✨간이 MSA 환경 with 독립적 DB✨를 구성해보려 합니다.

✨ 목표

  • Github Actions + ArgoCD를 활용하여 CI/CD를 구성
  • GCP Kubenetes 환경을 Terraform을 이용하여 수행
  • 각 MSA 프로젝트를 쿠버네티스 상에 배포
  • Spring Cloud를 적용하여 API Gateway 역할 수행 서버 생성
  • Kafka를 SASL_TLS 적용하여 쿠버네티스 상에서 관리
  • kafka-user -> kafk-post 서버로 DB 데이터 동기화 - Transactional Outbox Pattern
  • gRPC를 사용하여 MSA 간 API 요청
  • istio를 적용하여 애플리케이션 간 mTLS 활성화
  • OpenTelemetry + Jaeger를 이용하여 Trace 정보 수집 및 시각화

🌲 프로젝트 아키텍쳐 구조 - 프로젝트 구현 완료 후
제목 없는 다이어그램 drawio 각 리소스 흐름 복습을 위해 네임스페이스를 중심으로 아키텍쳐를 그렸습니다.

💾 소스 코드 구조

  • kafka-user - 메시지 프로듀싱, gRPC 서버
  • kafka-post - 메시지 컨슈밍, gRPC 클라이언트
  • kafka-manifest - private, gitops

🖥️ Reference

  1. Transactional Outbox Pattern with Microservices and Kafka - CuriousJinan 블로그
  2. AmazingEffect - Github
  3. 과정을 적은 Notion



후기

이 프로젝트를 수행하기 전, 저는 단순히 Kafka로 MSA를 구현한다고만 알고 있었습니다.
이후 어떻게 구현하지? 라는 생각에 무작정 블로그를 찾아보았고, Transactional Outbox Pattern에 대해 알게되었습니다.
해당 블로그 내용을 근거로, 시도를 하려했지만 너무 어렵다 싶었고 해당 블로그는 코드로된 정보가 거의 없었습니다.
그래서 저는 무작정 깃허브에 Transactional Outbox Pattern을 검색했고, 위의 AmazingEffect 레포지토리를 발견했습니다.
그덕에 프로젝트를 시작할 수 있었습니다.
생각보다 매우 어려웠습니다. 처음 보는 코드들, 너무나 많은 클래스들이 있었지만 ✨하나하나 분석✨하면서 ✨흐름을 파악✨하였고,
코드를 작성할 수 있었습니다.

코드 작성을 하며 AOP in Logging, 새로운 패키지 아키텍쳐, Kafka in Spring, Trace 등에 대해 알게되었습니다.
특히나, AOP는 ✨Trace 및 Span을 위해 필수적✨이며 ✨어노테이션 기반 로깅을 구현하는 것✨은 매우 재미있었습니다.

다음으로는 ✨DevOps Engineer로써 역량을 높일 수 있었습니다✨.
며칠 전까지만 해도, 저는 Jaeger 및 OpenTelemetry가 무엇인지 알지 못했습니다.
그러나, 내 코드와 AmazingEffect 코드를 비교하면서 다른 점들을 분석하며 해당 오픈소스들의 존재를 알게되었습니다.
그리고 인터넷을 찾아보며 공부하고 구축하여 어떤 흐름인지 파악하며 DevOps 지식을 얻을 수 있었습니다..
특히, ✨Spring -> OpenTelemetry -> Jaeger 로깅 시스템 구축✨은 매우 어려웠지만, 성공 후에는 매우 뿌듯하고 신기했습니다.

프로젝트를 진행하면서 프로젝트 진행 상황 및 구축 과정들은 빠지지 않고 해놓았습니다.
저는 이러한 프로젝트 경험을 바탕으로, 이후 개발 팀프로젝트에서 ✨더 자신감있게 DevOps를 담당✨하려고 합니다.
이렇게 성장할 수 있는 기회를 준 GCP와 AmazingEffect 레포지토리 주인분에게 정말 정말 감사드립니다.


사진

이름 사진
ArgoCD image (3)
Jaeger image (5)
Outbox DB image (6)

About

MSA 환경에서의 Kafka를 이용한 DB 데이터 동기화

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published