분류 전체보기 158

아파치 카프카(Apache Kafka) - 프로듀서, 컨슈머

Apache Kafka의 프로듀서(Producer)와 컨슈머(Consumer)는 Kafka의 핵심 구성 요소로 데이터를 송수신하는 데 사용된다. 이 두 역할은 Kafka 클러스터를 통해 데이터를 효율적으로 주고받을 수 있도록 설계되어있다. 1. 프로듀서(Producer)역할데이터 생성 및 전송프로듀서는 데이터를 Kafka 클러스터로 보내는 애플리케이션이다.데이터를 특정 토픽(Topic)에 게시(Produce)한다.주요 특징파티션 선택프로듀서는 토픽의 데이터를 파티션(Partition)으로 분배한다.기본적으로 파티셔너(Partitioner)를 통해 데이터를 특정 파티션에 저장한다.파티션 키(key)가 제공되면 해당 키의 해시 값을 기준으로 파티션이 결정된다.파티션 키가 없으면 라운드 로빈 방식으로 파티션이..

이벤트소싱 패턴

이벤트 소싱(Event Sourcing) 패턴은 마이크로서비스 아키텍처에서 데이터를 저장하고 처리하는 방법 중 하나로 시스템의 상태를 단순히 저장하는 것이 아니라 발생한 이벤트(event)를 순서대로 기록하고 이를 통해 상태를 재구성하는 방식이다. 핵심 개념이벤트 중심 저장데이터의 상태 변화는 이벤트로 기록된다.예를 들어, 은행 계좌의 잔액을 저장하는 대신 "입금", "출금"과 같은 이벤트를 기록한다.상태의 재구성현재 상태는 이벤트 로그를 순차적으로 재생(replay) 하여 재구성한다.이벤트 로그는 시스템의 단일 진실 소스(single source of truth)가 된다.불변성이벤트는 변경되거나 삭제되지 않고 불변(immutable) 성질을 가진다.모든 이벤트는 시간 순서대로 저장된다. 장점감사 및 추..

아파치 카프카(Apache Kafka) - RabbitMQ, Redis Queue 와 차이

Apache Kafka, RabbitMQ, Redis Queue는 메시징 시스템 및 데이터 스트리밍 용도로 많이 사용되지만 각각의 아키텍처, 사용 사례, 강점, 약점이 다르다.  1. 카프카(Apache Kafka)특징데이터 스트리밍 플랫폼 : 실시간 데이터 스트리밍 및 이벤트 기반 아키텍처에 최적화분산 시스템 : 높은 처리량과 내결함성을 제공로그 저장 : 데이터를 디스크에 저장하며 저장된 데이터를 여러 컨슈머가 독립적으로 처리 가능데이터 보존 : 메시지는 소비 후에도 저장되며 데이터 보존 기간을 설정할 수 있음장점고성능 : 대량의 데이터를 처리하며 높은 처리량을 제공내결함성 : 데이터를 복제하여 장애 발생 시에도 데이터 손실 최소화순서 보장 : 파티션 내에서는 메시지 순서가 보장됨실시간 데이터 스트리밍..

아파치 카프카(Apache Kafka) - 컨슈머 랙(Consumer Lag)

1. 컨슈머 랙(Consumer Lag)컨슈머 랙(Consumer Lag)은 카프카의 컨슈머 그룹이 데이터를 읽어오는 속도와 브로커에 데이터가 기록되는 속도 간의 차이를 나타낸다. 간단히 말해, 컨슈머가 아직 읽지 못한 메시지의 수를 의미합니다. 컨슈머 랙의 계산컨슈머 랙은 특정 파티션에서 다음 식으로 계산된다Consumer Lag = Latest Offset (Log End Offset) - Committed OffsetLatest Offset (Log End Offset) : 현재 브로커에서 해당 파티션에 기록된 최신 메시지의 오프셋Committed Offset : 컨슈머 그룹이 해당 파티션에서 마지막으로 읽고 커밋한 메시지의 오프셋 컨슈머 랙의 중요성실시간성 지표랙이 작을수록 컨슈머가 데이터를 실시..

아파치 카프카(Apache Kafka) - 파티셔너

파티셔너(Partitioner)는 Apache Kafka에서 데이터를 특정 파티션에 어떻게 분배할지 결정하는 로직을 담당한다. 프로듀서가 데이터를 토픽에 보낼 때 데이터를 어떤 파티션에 저장할지를 결정하는 역할을 한다. 1. 파티셔너의 역할카프카의 토픽(Topic)은 여러 파티션(Partition)으로 나뉘며 각 파티션은 독립적으로 데이터를 저장한다.파티셔너는 데이터가 특정 파티션에 저장되도록 결정하여 데이터의 분배와 병렬 처리를 최적화한다.데이터 분배의 필요성데이터는 파티션에 분산되어야 병렬 처리, 읽기/쓰기 성능 향상, 확장성을 제공할 수 있다.파티셔너는 데이터를 특정 키를 기준으로 그룹화하거나 균등하게 분산한다. 2. 기본 파티셔닝 전략Kafka는 기본적으로 DefaultPartitioner를 사용..

아파치 카프카(Apache Kafka) - 브로커

Apache Kafka에서 브로커(Broker), 복제(Replication), ISR(In-Sync Replicas)는 데이터의 안정성과 가용성을 보장하기 위한 중요한 구성 요소이다. 1. 브로커(Broker)브로커는 카프카 클러스터에서 데이터를 저장하고 관리하는 개별 서버(노드)이다.역할데이터를 저장 및 제공프로듀서로부터 데이터를 받아 파티션에 저장컨슈머 요청에 따라 데이터를 전달클러스터 내에서 파티션 리더와 복제를 관리특징하나의 카프카 클러스터는 여러 브로커로 구성된다.각 브로커는 고유 ID를 가지고 있다.데이터의 파티션을 분산 저장하여 확장성과 병렬 처리 성능을 높인다.브로커의 주요 구성 요소리더(Leader) : 특정 파티션의 읽기/쓰기 요청을 처리하는 주 노드팔로워(Follower) : 리더의..

아파치 카프카(Apache Kafka) - 토픽

카프카의 토픽(Topic)은 데이터를 논리적으로 그룹화하는 기본 단위로 프로듀서(Producer)와 컨슈머(Consumer) 간 데이터를 송수신하는 채널 역할을 한다. 각 토픽은 카프카 클러스터에서 데이터를 저장하고 관리하는 핵심 개념이다. 토픽의 주요 특징토픽의 데이터 흐름프로듀서 : 데이터를 특정 토픽에 게시(Produce)한다.컨슈머 : 토픽에 저장된 데이터를 구독(Consume)하고 읽어온다.토픽 이름각 토픽은 클러스터 내에서 고유한 이름을 가져야 한다.이름 규칙 : 소문자, 숫자, 점(.), 밑줄(_), 하이픈(-)만 사용 가능토픽은 멀티캐스트 방식여러 컨슈머가 동일한 토픽을 구독할 수 있으며 각 컨슈머는 독립적으로 데이터를 처리한다.컨슈머 그룹을 통해 데이터를 분산 처리 가능데이터는 로그 형태..

아파치 카프카(Apache Kafka) - 개념

아파치 카프카(Apache Kafka)는 분산 이벤트 스트리밍 플랫폼으로 대량의 데이터를 실시간으로 처리하고 전송할 수 있도록 설계된 오픈 소스 소프트웨어이다. 카프카는 LinkedIn에서 처음 개발되었으며 이후 Apache Software Foundation에 기부되었다. 주로 데이터 스트리밍, 실시간 분석, 메시지 브로커 역할을 수행한다. 주요 개념Producer (프로듀서)데이터를 카프카 클러스터로 보내는 역할을 한다.프로듀서는 데이터를 특정 토픽(Topic)에 게시한다.Consumer (컨슈머)카프카 클러스터에서 데이터를 읽어오는 역할을 한다.컨슈머는 하나 이상의 토픽으로부터 메시지를 구독(subscribe)한다.Topic (토픽)데이터가 저장되는 논리적 채널이다.프로듀서와 컨슈머는 특정 토픽을 ..

[리뷰] 최소한의 한국사 - 최태성

최소한의 한국사는 방대한 한국사의 흐름을 한 눈에 볼 수 있도록 구성된 입문서라고 할 수 있다. 이 책은 고조선부터 현대에 이르기까지 5천년의 한국사를 쉽고 간결하게 설명해주고 있으며 역사적 맥락을 이해하고자 하는 사람들에게 친절하게 설명해주는 책이다. 이 책의 장점은 단순한 연대기적 사건 나열이 아니라 각 시대를 관통하는 핵심적인 이야기와 흐름을 중심으로 설명하고 있다는 점이다. 복잡할 수 있는 역사적 개념이나 사건들을 쉽게 표현하고 실생활 사례로 풀어내어 부담없이 읽을 수 있도록 되어있다. 역사적 사건을 현대와 연결지어서 생각할 수 있도록 하여 과거가 현재에 미치는 영향을 되새길 수 있게 하였다. 책 제목과 같이 최소한의 한국사는 꼭 알아야 할 핵심 내용을 중심으로 구성되어 있어 한국사의 큰 그림을 ..

2024.12.30

CQRS 패턴 (Command and Query Responsibility Segregation)

CQRS(Command and Query Responsibility Segregation) 패턴은 명령(Command)과 조회(Query)를 분리하여 데이터에 대한 작업을 처리하는 설계 패턴이다. 이 패턴은 특히 마이크로서비스 아키텍처에서 유용하며 다음과 같은 이유로 활용된다. 핵심 개념명령(Command)데이터의 변경(예: 생성, 수정, 삭제)을 처리한다.일반적으로 데이터베이스를 업데이트하거나 변경 작업이 포함된다.비즈니스 로직과 검증이 중요한 부분이다.조회(Query)데이터를 조회(예: 검색, 읽기)하는 작업을 처리한다.데이터 무결성과 비즈니스 로직은 크게 관여하지 않으며 빠르고 최적화된 조회가 목표이다.명령과 조회를 분리함으로써 각 작업에 대해 별도의 모델을 유지할 수 있다. CQRS의 구조Comm..

사가(Saga) 패턴

사가(Saga) 패턴은 마이크로서비스 아키텍처에서 분산 트랜잭션 관리 문제를 해결하기 위해 사용하는 설계 패턴이다. 각 마이크로서비스가 독립적으로 작동하면서도 여러 서비스 간의 상태 일관성을 유지하는 데 도움을 준다. 사가 패턴의 개념사가 패턴은 장기 실행 트랜잭션을 여러 개의 작은 트랜잭션으로 나누고 각 트랜잭션이 독립적으로 수행되도록 한다.각각의 트랜잭션은 보상 트랜잭션(compensating transaction)을 함께 정의하여 실패 시 이전 상태로 롤백할 수 있다. 사가 패턴의 주요 특징트랜잭션 분리한 서비스에서 모든 작업을 처리하는 대신 여러 서비스에 걸쳐 분산 트랜잭션을 수행한다.이벤트 기반서비스 간 통신은 이벤트를 통해 이루어진다.예) 하나의 서비스가 작업을 완료하면 관련된 이벤트를 발행하..

저장소 분리 패턴

마이크로서비스 아키텍처에서 저장소 분리 패턴 (Database per Service Pattern)은 각 마이크로서비스가 독립적인 데이터 저장소를 가지도록 설계하는 원칙이다. 이 패턴은 마이크로서비스의 자율성을 강화하고 서비스 간의 의존성을 줄이며 시스템의 확장성과 유지보수성을 개선하기 위해 사용된다. 저장소 분리 패턴의 핵심 개념독립적 데이터베이스각 마이크로서비스는 자신만의 데이터베이스를 소유하며 다른 서비스와 데이터베이스를 공유하지 않는다.예를 들어, 주문 관리 서비스와 사용자 관리 서비스가 각각 별도의 데이터베이스를 가지게 된다.독립적 데이터 스키마각 서비스는 자신의 데이터 스키마를 독립적으로 정의하고 관리한다.이는 다른 서비스와의 데이터 구조 충돌을 방지하고 각 서비스가 독립적으로 진화(evolu..

마이크로서비스 통신 패턴 (동기, 비동기)

마이크로서비스 아키텍처에서 동기(Synchronous)와 비동기(Asynchronous) 통신 방식은 서로 다른 서비스 간 데이터 교환 및 작업 처리를 다루는 방식으로 각각의 특성과 용도가 있다. 1. 동기 호출(Synchronous)특징호출자가 요청을 보내고 응답을 받을 때까지 기다리는 방식.서비스 간의 호출은 실시간으로 이루어지며 요청-응답 패턴이 명확.일반적으로 HTTP/REST API가 동기 통신의 대표적인 예이다.장점구현이 간단하며 직관적.호출 순서가 보장되고 응답 결과를 바로 처리할 수 있음.디버깅이 상대적으로 쉬움 (문제가 발생한 지점 추적이 간단).단점의존성 문제 : 호출하는 서비스가 응답하지 않거나 느리면 호출자가 대기 상태에 빠짐.성능 병목 : 여러 서비스가 연결되어 있으면 하나의 느린..

Resilience4j 개요

Resilience4j는 Spring Cloud와 같은 마이크로서비스 환경에서 탄력성(Resilience)을 제공하기 위해 사용되는 라이브러리다. 주로 분산 시스템에서 발생할 수 있는 장애에 대한 대비책을 제공하며 서킷 브레이커(Circuit Breaker), 제한자(Rate Limiter), 재시도(Retry), 벌크헤드(Bulkhead), 시간 초과(TimeLimiter)와 같은 패턴을 지원한다. 주요 특징경량 라이브러리Resilience4j는 함수형 프로그래밍과 Java 8의 람다 표현식에 적합하도록 설계된 경량 라이브러리다.모듈화각 기능(서킷 브레이커, 재시도 등)이 독립적인 모듈로 제공되어 필요에 따라 선택적으로 사용할 수 있다.Spring Boot 통합Spring Boot 환경에서 Spring..

개발이론/Spring 2024.12.21

서킷 브레이커 패턴(Circuit Breaker Pattern) 이란

서킷 브레이커 패턴(Circuit Breaker Pattern)은 마이크로서비스 아키텍처에서 시스템의 안정성과 탄력성을 향상시키기 위해 사용하는 중요한 설계 패턴이다. 이 패턴의 주요 목적은 서비스 간의 장애 전파를 방지하고 실패한 서비스와의 불필요한 호출을 줄여 시스템의 복구를 돕는 것이다. 주요 개념회로 차단기처럼 동작서킷 브레이커는 전기 회로 차단기와 유사하게 작동한다. 시스템에서 특정 조건(예: 실패 횟수나 시간 초과)이 발생하면 서킷 브레이커는 "열림(open)" 상태가 되어 추가 요청을 차단한다. 서비스가 복구되었다고 판단될 때 "닫힘(closed)" 상태로 돌아간다.상태서킷 브레이커는 다음 세 가지 상태를 가집니다:Closed (닫힘) : 정상 상태로 모든 요청이 서비스로 전달된다.Open ..

반응형