목록전체 글 (288)
개발자는 기록이 답이다

계좌 이체와 도메인 서비스에릭 에반스는 도메인 주도 설계(DDD)에서 도메인 서비스를 활용하는 사례로 계좌 이체를 소개했습니다. 하지만 도메인 서비스를 사용하면 트랜잭션의 범위와 일관성이 도메인 서비스와 결합되어, 필요할 때 서비스를 독립적으로 분리하기 어려운 문제가 발생할 수 있습니다.이를 해결하기 위해, 계좌 이체 프로세스를 개별 애그리게이트(Aggregate)로 분리하고, 나아가 별도의 마이크로서비스로 독립할 수 있도록 설계하는 방식을 고려할 수 있습니다.계좌 이체 도메인 모델 계좌 이체는 일관성의 범위로 한 개의 Transfer와 2 개의 Account 애그리게이트가 참여하고 애그리게이트마다 독립적인 데이터베이스 트랜잭션을 소유합니다.Transfer 애그리게이트는 출금 계좌(from)와 입금 ..

최종적 일관성(Eventual Consistency)은 즉각적인 데이터 동기화(Strong Consistency)를 보장하지 않지만, 일정 시간이 지나면 시스템이 일관된 상태로 수렴하는 데이터 일관성 모델입니다. 이는 특히 분산 시스템이나 마이크로서비스 아키텍처에서 데이터 정합성을 유지하는 데 중요한 개념입니다. ✅ 특징즉각적인 데이터 동기화를 보장하지 않음 → 데이터가 모든 서비스에 동일하게 반영되기까지 시간이 걸릴 수 있음일정 시간이 지나면 일관된 상태로 수렴 → 메시지 기반 시스템, 이벤트 소싱, 데이터 복제 등의 기술을 활용해 최종적으로 정합성을 유지높은 가용성을 보장 → 강한 일관성을 유지하려면 시스템이 대기해야 하지만, 최종적 일관성은 시스템의 독립적인 운영을 가능하게 함✅ 사용 사례마이크로서..

비관적락과 낙관적 락은 어떤 상황에 적합할까요? 선정 기준이 어떻게 되나요?4개월 전 면접 당시 2번이상 들었던 질문입니다. 당시 면접관님께서 감사하게도 저의 의견을 반대로 역질문하면서, 설명해주신 내용을 듣고 많이 배웠습니다. 그래서 해당 포스팅은 제 머릿속에 있는 개념을 보완하고자 작성한 내용입니다. 먼저 선정 기준을 알기 전에 비관적락과 낙관적락이란 무엇인지 정의가 필요합니다. 비관적락이란?특정 데이터에 접근할 때 충돌이 발생할 가능성을 비관적으로 본다는 말에 유래 되었습니다. 즉, 데이터 충돌이 발생할 가능성이 매우 높다고 생각하기 때문에 미리 잠금을 걸어 충돌을 예방하려는 것(다른 사용자가 수정하지 못하도록 막는 것)입니다. 낙관적락이란?특정 데이터에 접근할 때 충돌이 거의 일어나지 않을 것이라..

기존에 프로젝트에서 Redis만 사용해 캐시를 구현했었고, 로컬 캐시의 필요성을 깊이 고려해 본 적이 없었습니다. 하지만 최근 네카라쿠배당토 중 면접에서 로컬 캐시 설계 관련된 질문을 받았고, 그때 제대로 답변하지 못한 경험을 되돌아보며 이를 복기하고, 보완하고자 포스팅을 작성하게 되었습니다. 데이터베이스에서 Disk I/O를 줄이기 위해 일반적으로 Redis와 같은 메모리 저장소를 도입하는데, 이런 외부 저장소에 의존할 경우 과부하가 발생하거나 단일 장애 지점(SPOF)이 될 위험이 있습니다. 모든 데이터를 외부 저장소에만 캐시하지 않고 내부적으로 관리하려는 경우 로컬 캐시를 도입하게 됩니다. 로컬 캐시를 사용할 경우, 예를 들어 @CachePut 어노테이션이나 write-back과 같은 캐시 전략을 ..