Bank-End Chronicles

「Memory gets GC’d, but this blog stays committed.」

도메인 애그리거트

DDD 스터디 스타트!

DDD의 애그리거트 애그리거트는 관련된 객체를 하나의 군으로 묶어 준다. 수 많은 객체를 애그리거트로 묶어서 바라보면 상위 수준에서 도메인 모델 간의 관계를 파악할 수 있다. 애그리거트의 특징 애그리거트는 경계를 갖는다. 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않는다. 애그리거트는 독립된 객체 군이며, 각 애그리거트는 자기자...

분산 환경에서의 트랜잭션 처리 - Transactional Outbox pattern

분산환경에서의 데이터 전달 방식에 대해

Transactional Outbox Pattern 분산시스템에서 트랜잭션의 원자성을 보장하기 위해, 분산 트랜잭션(2PC 등)을 활용할 수 있다. 트랜잭션 아웃박스 패턴은 트랜잭션과 이벤트 발행이 원자적으로 처리되어 데이터의 일관성을 보장하기 위해 등장했다. 트랜잭션 내에서 발생한 이벤트를 데이터베이스에 미리 저장해두고, 트랜잭션이 성공적으로 완...

도메인 모델, 도메인 아키텍처

DDD 스터디 스타트!

도메인 모델이란? 도메인이란, 구현해야 할 소프트웨어의 대상이다. 이를테면 온라인 서점이라는 도메인은 여러 하위 도메인으로 이루어지는데, 주문, 결제, 회원, 배송, 정산, 리뷰 등으로 하위 도메인을 가지고 있다고 볼 수 있다. 도메인 모델이란, 특정 도메인을 개념적으로 표현하는 것이다. 기본적으로 도메인 자체를 이해하기 위한 개념 모델을 의미하...

분산 환경에서의 트랜잭션 처리 - 2PC, Saga pattern

분산환경에서의 데이터 전달 방식에 대해

MSA에서 트랜잭션 트랜잭션이란, 우리가 데이터를 이용해 수행하고자 하는 작업의 집합이다. 분산 환경에서는 DB가 분리되어 있기 때문에 여러 DB의 원자성을 보장하기가 어렵다. 각 서비스가 다른 서비스와 일관성을 유지해야 하기 때문에 일반 트랜잭션보다 더 복잡하다. 원자성이란, 트랜잭션의 연산은 DB에 모두 반영되거나, 모두 반영되지 않아야 하는...

분산시스템이란?

분산환경에서의 데이터 전달 방식에 대해

분산 시스템 목표를 달성하기 위하여 여러 개의 컴퓨터 리소스를 사용하는 시스템 시스템은 2개 이상의 컴포넌트로 구성되어 있다. 엔터프라이즈 애플리케이션 마이크로 서비스 아키택처 어플리케이션 모놀리틱 아키텍처 어플리케이션 + 검색엔진 네트워크를 사용하여 컴포넌트 간의 기능을 통합한다. ...

Concurrency 제어 - Locking

낙관적 락, 비관적 락 등

동시성 제어와 락 메커니즘 lock이란? Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법이다. Lock을 적용한다는 것의 의미란, 공유자원을 동시에 접근해서 문제가 될 수 있는 부분(critical section)을 순차적으로 처리하는 것을 의미한다. 그런데 lock은 처리량의 병목을 발생시킨다. Locking 기...

Java - Atomic Type

동시성 제어

Java Atomic Type에 대해서 최근 메세지 큐 시스템을 제어하는 프레임워크 repo를 보다가 AtomicInteger라는 타입을 보게 되었다. 처음 보는 타입이라 흥미로워서 서치해보았다. 멅티 스레딩 프로그래밍에서 고려할 동시성 문제를 고려하면, 경쟁상태race condition을 고려해야 한다. 그럴 때 사용하는 것이 Atomic...

Latency 관리 전략

시스템의 안정성과 사용자 경험을 향상시키기

latency 관리 전략 Consumer가 트래픽을 감당하지 못해 지연(latency)이 발생할 때, 이를 완화하거나 해결하기 위한 다양한 전략이 있다. 시스템의 성능을 유지하고, 트래픽 급증 시에도 안정성을 보장하기 위해 설계하기 위함이다. 일반적으로 대용량 트래픽 처리와 관련된 latency 전략에는 보통 이런 것들이 있다. 로드 밸런싱...

API Rate Limiting

시스템의 안정성과 사용자 경험을 향상시키기

API Rate Limiting란? API Rate Limiting은 API에 대한 요청 수를 일정 시간 동안 제한하는 메커니즘이다. 주로 서비스의 안정성을 유지하고, 특정 API에 대한 과도한 요청으로 인해 발생할 수 있는 문제를 방지하기 위해 사용된다. 예를 들어, 특정 API가 초당 100개의 요청만 허용한다고 설정하면, 그 한도를 초과하는 요청...

Dead Letter Queue

Architecture

DLQ(Dead Letter Queue)란? 애플리케이션이 메시지를 처리하는 과정에서 예상치 못한 문제가 발생할 수 있다. 메시지가 특정 조건을 만족하지 않거나, 여러 번의 재시도에도 불구하고 성공적으로 처리되지 않는 경우, 이러한 메시지는 어떻게 처리해야 할까? 이때 사용되는 것이 바로 Dead Letter Queue(DLQ)이다. DLQ의 개념...