Curious Y

「Stay curious, keep learning and keep growing.」

Oracle - Analyze

오픈을 맞이하며 배운 것

인덱스가 이미 잡혀 있음에도 성능이 안 나올 때, Analyze를 실행하는 것이 도움이 되었다. 아무리 인덱스가 생성되어 있어도, 데이터의 형태에 따라 만들어진 통계 정보가 없으면 FULL SCAN 이 발생할 수 있기 때문이다. Analyze란? Analyze는 인덱스, 테이블, 클러스터의 통계정보를 생성한다. Analyze가 생성한 ...

대출 필기노트

레시피북

대출팀이었을 때, 신입사원이었던 내게 많은 분들이 전파해주신 가르침들을 필기해놓은 내용이다. 지금 생각해보니 이 가르침은 할머니가 전해주신 레시피 북 같은, 어디에서든 대출 일을 하려면 알아야 할 클래식한 대출의 정수를 추린 내용이다. 두고두고 다시 펼쳐보자. 대출의 라이프사이클 대출은 상담, 실행, 상환 해지까지 다양한 단계가 나뉜다. 각...

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

DDD 스터디 스타트!

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

도메인 애그리거트

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...