전체 글

전체 글

    EDA 기반의 MSA 환경에서 서비스간 데이터 정합성 맞추기 (SAGA Pattern, Outbox Pattern)

    EDA(Event Driven Architecture) 기반의 MSA(Microservice Architecture) 환경에서 서비스간 데이터 정합성은 어떻게 맞추는지 고민한 내용을 정리해본다. 문제상황 (예시)전제- 모놀리틱 구조에서 MSA 환경으로의 변경으로 주문 서비스, 배송 서비스를 분리- MSA 환경에서 서비스간 결합도가 낮은 방식으로 통신하기 위해 비동기 방식인 Kafka 사용메인 로직주문완료(주문서비스) -> 주문완료 이벤트 발행(Kafka) -> 배송정보 생성(배송서비스)위와 같은 상황에서 이런 의문이 든다. 주문서비스와 배송서비스가 분리된 환경에서 주문완료는 성공했는데 배송정보 생성이 실패하면 이전에 성공한 로직은 어떻게 처리해줄까? (분리된 서비스의 트랜잭션은 어떻게 처리해주는게 좋을까..

    Kafka Consumer의 commit을 제어하는 enable.auto.commit과 AckMode

    우리가 Kafka Consumer의 commit을 제어한다고 했을 때 보통 2가지 설정값을 떠올린다. enable.auto.commit과 AckMode다. 그렇다면 enable.auto.commit도 Consumer의 commit을 제어하는 설정값이고, AckMode도 Consumer의 commit을 제어하는데 이 둘이 따로 관리되는 걸까?  일단 consumer가 offset을 commit 하는 것은 Kafka의 내부 Topic인 __consumer_offsets에 저장하는 행위이며, consumer는 이 offset 값을 참조해서 다음에 처리한 메시지를 읽어온다는 것이 기본 개념이다. Commit에는 자동커밋과 수동커밋이 있는데 enable.auto.commit으로 Kafka 클라이언트의 커밋방식 제..

    Servlet부터 Filter와 Interceptor까지

    ServletHTTP 요청이 WAS, Servlet에 의해 처리되고 응답이 되는 과정을 보면 Servlet이 어떤 것인지 알 수 있다.HTTP 요청 -> WAS는 Request, Response 객체를 만들어서 Servlet 객체 호출 -> Servlet 객체에서 Request  객체에서 HTTP 요청 정보를 꺼내서 비즈니스 로직 수행 -> 다시 Response 객체에 HTTP 응답 정보를 담아서 WAS가 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성해서 클라이언트로 보냄 즉, Servlet은 Web Application에서 HTTP 프로토콜을 이용해 요청을 처리하고 응답을 하는 자바 클래스이다.이러한 servlet을 관리해주는 것이 Servlet Container이다. Servle..

    [Kafka] 심화 개념 및 이해

    Producer Acks, Batch, Page Cache, FlushProducer Acks ParameterProducer는 Kafka가 메시지를 잘 받았는지 어떻게 알까?이를 확인하기 위해 Producer Acks라는 Producer Parameter를 쓴다. (Network의 그 ack 개념과 유사)Kafka는 메시지를 받으면 잘 받았다는 의미의 acks를 보내고 Producer는 acks가 와야 다음 메시지를 보낸다. acks = 0 : ack가 필요하지 않음. 이 수준은 자주 사용되지 않음. 메시지 손실이 다소 있더라도 빠르게 메시지를 보내야 하는 경우에 사용acks = 1 : (default 값) Leader가 메시지를 수신하면 ack를 보냄. Leader가 Producer에게 ACK를 보낸..

    [Kafka] 기본 개념 및 이해

    Apache Kafka란?이벤트 스트리밍 플랫폼실시간으로 흐르는 이벤트 스트림을 받아주고 이벤트를 필요로 하는 곳으로 이벤트를 전달한다.이벤트? 비즈니스에서 일어나는 모든 일(데이터)을 의미ex) 웹사이트에서 뭔가 클릭하는것. 돈을 송금하는 것 등 이벤트는 bigdata의 특징을 가짐 -> 비즈니스의 모든 영역에서 광범위하게 발생하기 때문이벤트 스트림은 연속적인 많은 이벤트들의 흐름을 의미 이렇게 많은 이벤트들을 처리하기 위해 LinkedIn에서 개발된 것이 Apache Kafka 3가지 특징1. 이벤트 스트림을 안전하게 전송 (publish & Subscribe 기능)2. 이벤트 스트림을 디스크에 저장함 (아파치 카프카 이전의 솔루션들과의 차이점. Write to Disk)3. 이벤트 스트림을 분석 및..

    [쿠버네티스/도커] 3 - 쿠버네티스에서의 도커, 젠킨스, 프로메테우스, 그라파나

    도커 쿠버네티스를 이루는 기본 오브젝트가 파드고, 파드는 컨테이너로 이루어져 있다. 그리고 컨테이너를 만들고 관리하는 도구가 도커이다. 도커를 사용하면 사용자가 따로 신경 쓰지 않아도 컨테이너를 생성할 때 개별적인 실행 환경을 분리하고 자원을 할당한다. 간단하게 도커 이미지를 내려받아 컨테이너로 실행하고 도커 이미지와 컨테이너를 삭제하는 방법을 알아보자. 컨테이너 이미지는 우리가 앞서 얘기했던 베이그런트 이미지와 유사하다. 이미지 그대로는 사용할 수 없고 도커와 같은 CRI로 불러들여야 컨테이너가 실제로 작동한다. 컨테이너 이미지는 도커 허브(https://hub.docker.com)와 같은 레지스트리(registry)에 모여있다. 레지스트리는 저장소를 의미하는데 docker search 명령어를 입력하..

    [쿠버네티스/도커] 2 - 쿠버네티스란, 쿠버네티스 기본 사용법

    3장 환경 세팅 이제 쿠버네티스로 컨테이너 인프라 환경을 자동으로 구축해보자. 위에서 언급했듯이 컨테이너 인프라 환경이란 운영 체제의 커널 하나에서 여러 개의 컨테이너가 격리된 상태로 실행되는 인프라 환경이다. 컨테이너는 가상머신과 많이 비교된다. 가상머신 VS 컨테이너? AWS에서는 가상머신과 컨테이너를 애플리케이션을 IT 인프라 리소스로부터 독립적으로 만드는 배포 기술이라고 정의한다. 두 기술은 공통적으로 소프트웨어 인프라를 이미지 파일이라는 단일 파일로 패키징할 수 있도록 해서 편리하게 애플리케이션을 어디서나 실행할 수 있도록 해준다. 두 기술은 각각 아래와 같이 설명할 수 있다. 가상머신은 물리적 머신의 디지털 사본이다. 기존의 컴퓨터, 즉 호스트OS 위에 원하는 운영체제를 가상화한 게스트OS를 ..

    [쿠버네티스/도커] 1 - 컨테이너 인프라 환경이란, 테스트 환경 구성

    회사에서 쿠버네티스를 사용한다는 것은 알고 있었지만 직접적으로 개발하진 않기 때문에 단순 반복해서 사용만 해왔다. 하지만 전체적인 구조와 사용하는 툴에 대한 기본적인 정보를 파악하고 싶어 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 도서를 읽고 서칭한 내용을 간단하게 정리해본다. 1장 - 컨테이너 인프라 환경이란 이 책의 큰 주제 중 하나인 컨테이너 인프라 환경의 정의는 다음과 같다. 컨테이너 인프라 환경: 컨테이너를 중심으로 구성된 인프라 환경 컨테이너: 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태 과거에 모놀리식 아키텍쳐를 사용하다가 서비스가 커지고 다양해짐에 따라 마이크로소프트 서비스 아키텍쳐(MSA)가 많이 채용이 되고 있고, MSA를 구현하..