MSA 5

CQRS(Command Query Responsibillity Segregation)

CQRS (Command Query Responsibillity Segregation) 패턴 CRUD에서 R(query)와 CUD(command)를 구분하는 방식이다. 읽기전용 DB와 쓰기 전용 DB를 분리해 빠른 읽기를 구현할 수 있다. MSA에서 CQRS 패턴은 높은 성능과 각 마이크로 서비스간 책임의 분리를 위해 사용된다. CQRS는 실제 마이크로 서버들의 운영상태와 관계없이 항상 안정되게 운영되며 원본을 가져오는 것이 아닌 미리 뷰를 구성한다. 만약 각 마이크로서비스를 직접 호출해 결과를 돌려주는 방식으로 뷰를 구성한다면 어떻게 될까. 당연히 데이터를 제공할 수 없게된다. 마이크로서비스 끼리 장애 전파가 일어난다는 이야기이다. 장애 전파를 없애기 위해 MSA를 사용했지만 결국 사용자에게 일부 서비..

카테고리 없음 2024.04.01

카프카(Kafka)를 사용하는 이유

누구나 모놀로식 아키텍처로 개발을 해온 사람이라면 피해갈 수 없는 문제가 있다. 바로 커플링(Coupling)이다. 무수히 많은 로직들이 엉켜 결국 유지보수하는데 많은 시간을 소비해본 경험이 있을 것이다. 카프카를 이용해 DDD패턴으로 설계하면 이와 같은 문제를 해결할 수 있다. 카프카 카프카를 사용하는 주된 목적은 커플링을 줄이기위해 발신자와 수신자를 서로 의존하지 않는 상태로 서비스 아키텍처를 가져가기 위해 사용된다. 기존에는 하나의 소스 시스템에 여러 타겟 시스템이 붙어 수신해야했다. 이 때문에 타겟 시스템별 데이터 수신 차이가 발생했다. 이를 극복하기 위해 소스 시스템을 늘리면 구조가 복잡해지고 각 시스템들 사이의 데이터 포맷과 처리방식이 달라 확장 및 소비에 어려움이 있었다. 이런 문제를 깔끔하..

벡엔드/MSA 2024.03.26

Helm bitnami를 사용한 카프카(kafka) 설치 24.03

버전정보 helm version : v3.14.3 EKS t3.medium 이 글은 M1 pro 칩을 기준으로 작성되었습니다. Helm Helm 은 쿠버네티스 패키지 인스톨러로 EKS에 카프카를 구축하는 방법 중 거의 가장 간단했던 것 같다. 다만 버전에 따라 조금씩 달라지는 부분들이 많아 조금 애를 먹었다. 먼저 Helm을 설치해 주어야 한다. curl -fsSL -o get_helm.sh chmod 700 get_helm.sh ./get_helm.sh helm을 설치하고 권한을 주었다. 해당 코드를 통해 설치가 잘되었는지 확인할 수 있다 helm version bitnami 이제 helm 레포에 bitnami를 추가해주어야 한다. helm repo add bitnami https://charts.bi..

벡엔드/MSA 2024.03.25

EKS에 Helm bitnami 을 이용한 Kafka 구축 중 SASL 에러

기존 코드 # 헬름 설치 curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh # bitnami 추가 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update # 카프카 설치 helm install my-kafka --set volumePermissions.enabled=true 문제 상황 위와 같은 코드를 이용해 EKS에 Helm 을 이용해 카프카를 구축하던 도중 문제가 발생했다. 카프카 Pod들의 Status는 Running이지만 마이크로 서비스를 배..

벡엔드/MSA 2024.03.25

Retry & DLQ

Retry Consumer가 메시지를 처리하는 도중 오류가 발생하면 해당 메시지를 다시 Polling하여 처리하는 작업을 Retry라고 한다. spring: profiles: default jpa: properties: hibernate: show_sql: true format_sql: true cloud: stream: kafka: binder: brokers: localhost:9092 streams: binder: configuration: default: key: serde: org.apache.kafka.common.serialization.Serdes$StringSerde value: serde: org.apache.kafka.common.serialization.Serdes$StringSer..

벡엔드/MSA 2024.03.21