Aggregate Root의 진화 과정
Intro 안녕하세요! 오늘은 도메인 주도 설계(DDD) 의 핵심 개념 중 하나인 Aggregate Root (애그리거트 루트) 의 진화 과정을 살펴보려 합니다. 특히, 금융 시스템의 기본적인 예시인 Account (계좌) 와 Transaction (거래) 도메인을 중심으로 이야기해볼게요. 초기에는 Transaction을 Account의 하위 엔티티...
Intro 안녕하세요! 오늘은 도메인 주도 설계(DDD) 의 핵심 개념 중 하나인 Aggregate Root (애그리거트 루트) 의 진화 과정을 살펴보려 합니다. 특히, 금융 시스템의 기본적인 예시인 Account (계좌) 와 Transaction (거래) 도메인을 중심으로 이야기해볼게요. 초기에는 Transaction을 Account의 하위 엔티티...
Intro 보안 제약 환경에서 OpenTelemetry를 기반으로 자체 로깅 및 계측 시스템을 구축한 경험을 공유하고자 합니다. 클라우드 서비스 제공자(CSP) 환경에서 보안 규정을 준수하면서 효과적인 시스템 모니터링 체계를 만드는 것은 쉽지 않은 과제입니다. 이번 글에서는 제가 겪었던 문제 상황부터 솔루션 선택, 구축 과정, 그리고 운영까지 도입 ...
Intro 이 글에서는 이벤트 처리를 통한 비동기 처리가 왜 필요하고 비동기 처리시에 발생할 수 있는 대표적인 문제 상황을 공유하면서 꼭 지켜야할 원칙에 대해서 알아보고자 글을 작성하였습니다. 코드 응집도와 Transaction의 중요성 소프트웨어 개발에서 코드 응집도는 모듈 내의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 개념입니다. ...
Intro 클린 아키텍처(Clean Architecture)는 애플리케이션의 각 계층 간 의존성을 명확히 분리하여 비즈니스 로직의 독립성과 유연한 확장성을 보장합니다. 이런 아키텍처를 Kotlin과 Spring 환경에서 구현할 때, 익셉션(Exception) 처리는 단순히 오류 메시지를 반환하는 것을 넘어, 각 계층의 책임과 경계를 명확히 하며 에러...
Intro 코틀린에서는 let, apply, run, with, also 같은 스코프 함수를 활용하여 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다. 하지만 이 함수들은 목적과 반환값이 다르기 때문에 올바르게 사용하지 않으면 가독성과 유지보수성이 오히려 저하될 수 있습니다. 이 글에서는 각 스코프 함수의 차이점, 실제 개발에서 활용할 수 있는 패...
Intro 코틀린의 when은 단순한 switch-case 문을 대체하는 것을 넘어, 더 강력하고 유연한 조건문을 제공합니다. 특히 스프링 기반의 코틀린 애플리케이션에서 when을 적절히 활용하면 가독성과 유지보수성이 향상되며, 중복을 줄이고 명확한 비즈니스 로직을 구현할 수 있습니다. 이 글에서는 when의 특징과 활용법을 살펴보고, 일반적인 i...
Intro 분산 시스템의 트랜잭션 관리 복잡성 분산 시스템에서는 데이터베이스(DB), 메시지 큐(Kafka), 캐시 서버 등 이기종 시스템 간 협력이 필수적입니다. 이때 트랜잭션의 원자성(Atomicity)을 보장하는 것은 큰 과제입니다. 특히 DB 업데이트와 Kafka 메시지 발행을 동시에 수행해야 할 때, 두 시스템의 트랜잭션 경계를 일관되게 ...
Intro 이번 글에서는 GraphQL Federation 환경에서 Zero-Code Instrumentation 방식으로 전환한 뒤 발생한 Context 전파 문제와 이를 해결한 경험을 구체적으로 공유하려 합니다. 이 글을 통해 유사한 문제를 겪는 분들에게 실질적인 도움이 되었으면 합니다. 문제 상황 GraphQL Federation 환경에...
위상 정렬은 방향성 있는 비순환 그래프(Directed Acyclic Graph, DAG)의 노드들을 정렬하는 알고리즘으로, 모든 간선 (u, v)에 대해 노드 u가 항상 노드 v보다 앞에 오도록 정렬합니다. 위상 정렬은 주로 작업 스케줄링, 컴파일러에서의 종속성 해결 등에 사용 위상 정렬의 기본 원리 위상 정렬은 주어진 그래프의 방향성을 유지...
Intro Node.js 환경에서 개발할 때, 프로젝트별로 Node 버전을 관리하기 위해 주로 nvm을 사용했었습니다. 하지만 회사 맥북에서 nvm으로 LTS 버전을 설치하고 .nvmrc 파일에 명시해도, nvm install 실행 시 제대로 설치되지 않는 버그가 발생했습니다. 이로 인해 사용성이 크게 떨어지는 경험을 하게 되었죠. 이 문제의 대안...