본문 바로가기

분류 전체보기

(190)
정리 보호되어 있는 글입니다.
Transactional Outbox Pattern / Change Data Capture 개요QUIT 팀 프로젝트에서 Kafka를 사용한 비동기 처리를 구현했다. 프로젝트 막바지에 발표 자료를 만드는 과정에서 Kafka에 대한 에러 발생에 대한 처리를 하지 않았다는 사실을 깨달았고, 프로젝트 완료 후 리팩토링 겸 공부를 위해 TOP와 CDC에 대해 알아보려고 한다. Transactional Outbox Pattern과 CDC의 필요성?MSA 구조에서 각 서비스 간 데이터 일관성을 유지하면서 이벤트를 발행하기 위해서 필요하다.단일 작업에 데이터베이스 쓰기 작업과 메시지 또는 이벤트 알림이 모두 포함된 경우 분산 시스템에서 발생하는 이중 쓰기 작업 문제를 해결할 수 있다.데이터베이스 업데이트 후 마이크로서비스가 이벤트 알림을 보내는 경우 데이터 일관성과 신뢰성을 보장하기 위해 두 작업이 원자적으..
Redisson 분산 락 구현 개요예약 관리 시스템에서 동일한 시간대의 예약에 대한 동시성 제어를 하기 위해 다양한 lock 기법 중 Redisson 분산 락을 적용하기로 했다. Redisson 분산 락 구현1. Redisson 의존성 추가// Redissonimplementation 'org.redisson:redisson-spring-boot-starter:3.24.3'build.gradle 파일에 Redisson 라이브러리 의존성을 추가한다. 2. Redisson 설정import org.redisson.Redisson;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import org.springframework.beans.factory.annot..
Kafka 비동기 처리 구현 개요MSA 예약 관리 시스템 프로젝트에서 예약 관리 서비스를 Kafka를 사용해 비동기 방식으로 처리하도록 구현했다. Kafka 비동기 처리 구현 과정Kafka 설치1. Docker-Compose.yml 작성version: '3.8'services: zookeeper: image: wurstmeister/zookeeper:latest platform: linux/amd64 ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: image: wurstmeister/kafka:latest platform: linux/amd64 ..
Kafka - 비동기 처리 개요Kafka 비동기 처리에 대해 궁금했던 점에 대한 것과 해결 방안을 찾아볼 것이다. Kafka 비동기 처리에 대해 궁금했던 점Consumer가 Message를 받아 서비스를 호출해 작업을 하는데 동일한 작업에 대한 Controller 메서드가 필요한가? Kafka 비동기 처리 시 Controller의 동일 메서드가 필요 없는 이유Kafka Consumer가 작업을 처리메시지가 producer에서 전달되면 consumer가 해당 메시지를 받아 특정 로직을 실행함Consumer가 생성 작업을 호출하면, 이미 Kafka에서 수신된 메시지에 대한 처리를 완료하는 것이므로 별도의 REST API가 필요하지 않음Controller의 역할이 없을 경우컨트롤러는 주로 클라이언트 요청을 처리하는 역할을 함비동기 처리..
동시성 제어 시점과 데이터 일관성 유지 관점 개요MSA 예약 관리 프로젝트에서 예약 관리 서비스를 개발하게 되었다.예약 관리 서비스는 Kafka를 사용해 비동기 처리를 하도록 할 예정이다.서비스의 동시성 제어와 데이터 일관성을 유지하기 위한 방법에 대해 알아보고 어떤 방식을 적용할 지 고려해 볼 것이다. 사용 기술 및 라이브러리Kafka - 이벤트 기반 비동기 처리Redis - Redisson 라이브러리 사용 분산락(동시성 제어)\ 동시성 제어 시점Kafka Consumer에서 메시지를 처리할 때 lock 적용예약 서비스에서 예약 생성 시 lock 적용각 방식의 차이Consumer에서 Lock 사용동작Consumer가 메시지 처리할 때 리소스에 대해 락 획득락 획득 후 예약 생성 요청을 처리메시지 처리 중 Consumer 또는 프로세스가 동일 리소..
Redis - Redisson 개요팀 프로젝트에 Redisson 분산 락을 적용해 보기 전에 간단하게 Redisson 사용방법 및 테스트를 진행할 것이다. Redis Redisson 라이브러리Redisson은 ava 기반의 Redis 클라이언트 라이브러리로, Redis를 단순한 캐시나 데이터 저장소로 사용하는 것을 넘어 분산 데이터 구조, 분산 락, 분산 서비스 관리 등의 기능을 손쉽게 구현할 수 있도록 도와준다.Redisson은 Redis의 다양한 기능을 추상화하여 Java 개발자가 쉽게 사용할 수 있는 API를 제공함. 주요 특징분산 데이터 구조 지원Redisson은 Redis 기반으로 Java 기본 데이터 구조를 확장하여 분산 환경에서 사용할 수 있도록 지원제공되는 분산 데이터 구조Map, Set, List, Queue, Deq..
DB Lock 개요DB에 저장되는 데이터의 일관성을 유지하고 충돌을 방지할 수 있는 방법인 DB Lock에 대해 정리할 것이다. DB Lock?DB Lock은다수의 사용자나 프로세스가 데이터베이스의 동일한 리소스(테이블, 행 등)에 동시에 접근하거나 수정하려고 할 때 발생할 수 있는 데이터 무결성 문제를 방지하기 위해 사용되는 메커니즘. DB Lock 주요 개념Lock의 필요성:다중 사용자 환경에서 데이터베이스가 동일한 데이터를 동시에 읽거나 쓸 경우, 데이터 정합성 문제나 경합 조건(Race Condition)이 발생할 수 있다.Lock은 이런 문제를 방지하여 데이터 무결성을 보장한다.Lock의 수준:테이블 수준 락(Table-Level Lock): 테이블 전체를 잠그는 방식으로, 간단하지만 동시성이 낮아진다.행 수..