|
백앤드 개발자는 아니지만, 도메인 주도 설계(DDD)라는 개념은 오래전부터 한 번쯤 제대로 공부해보고 싶었다. 처음 DDD를 접했을 당시에는 관련 서적도 많지 않았고, 어렵게 읽기 시작한 책들 역시 쉽게 이해되지 않았다. 언젠가 다시 공부할 날을 기약하며 덮어두게 되었다. 그러던 중 『도메인 주도 설계를 위한 함수형 프로그래밍』을 알게 되었다. 평소 관심 있던 함수형 프로그래밍과 DDD를 함께 다룬다는 점이 무척 흥미롭게 느껴져 책을 읽기 시작했다. DDD와 함수형 프로그래밍은 각각만으로도 학습 범위가 상당히 넓고 깊은 주제다. 실제로 관련 서적들을 읽어보면 추상적인 개념과 낯선 용어들 때문에 중간에 흐름을 놓치거나 끝까지 읽지 못하는 경우도 많다. 그런 점에서 이 책의 가장 큰 장점은, DDD와 함수형 프로그래밍의 핵심적인 사고방식을 비교적 부담 없이 경험해볼 수 있다는 점이라고 생각한다. 모든 내용을 깊고 완벽하게 다루기보다는 왜 이런 방식이 필요한지, 어떤 문제를 해결하기 위한 접근인지를 중심으로 설명해주기 때문에 끝까지 읽어나가기 수월했다. 이 책은 총 3개의 파트로 구성되어 있는데, 초반에는 현업에서 충분히 마주칠 수 있는 사례를 바탕으로 도메인 모델링과 함수형 프로그래밍에 필요한 개념들을 설명하고 이후에는 이를 실제 도메인 문제에 어떻게 적용할 수 있는지를 점차 확장해 나간다. 단순히 이론만 설명하는 것이 아니라 실제 비즈니스 규칙을 코드로 표현하는 과정 중심으로 전개된다는 점이 인상 깊었다. 객체지향 프로그래밍을 사용하면서도 종종 "객체"보다는 단순 데이터 전달에 가까운 형태로 코드를 작성하게 되는 경우가 많았는데, 이 책을 읽으며 도메인 자체를 코드 안에서 더 명확하게 표현하는 방식에 대해 다시 생각하게 되었다. 단순히 클래스를 나누는 수준이 아니라, 비즈니스 규칙과 의미를 타입 자체에 담아내려는 접근이 인상 깊었다. 특히 ID 같은 값조차 단순 문자열(String)로 다루기보다 별도의 타입으로 정의해 의미를 부여하는 방식이 인상 깊었다. DDD를 제대로 적용한다면 객체지향 프로그래밍의 완성도를 더 높일 수 있겠다는 생각이 들었다. 또 하나 좋았던 점은 대부분의 함수형 프로그래밍 관련 서적들이 스칼라나 하스켈 중심으로 설명하는 것과 달리, 이 책은 코틀린과 타입스크립트를 사용한다는 점이었다. 특히 원서에서는 F#으로 작성된 예제를 사용하고 있지만, 옮긴이가 한국 개발자들이 보다 익숙하게 접근할 수 있도록 코틀린과 타입스크립트 기반으로 예제를 재작성했다는 점이 매우 인상 깊었다. 단순 번역에 그치지 않고 국내 개발 환경과 독자층을 고려해 내용을 다시 구성했다는 점에서 옮긴이의 많은 고민과 노력이 느껴졌다. 개인적으로는 코틀린을 주 언어로 사용하고 있는 상태에서 타입스크립트를 학습해야하는 상황이었기 때문에 이 책의 구성에 큰 도움을 받았다. DDD와 함수형 프로그래밍을 학습하는 동시에, 코틀린을 기반으로 타입스크립트를 함께 이해할 수 있다는 점도 큰 장점이었다. 코틀린 코드를 먼저 이해한 뒤 타입스크립트 코드를 비교하며 읽다 보니, 타입스크립트의 함수형 스타일과 타입 시스템도 훨씬 자연스럽게 받아들일 수 있었다. DDD 역시 거대한 아키텍처 방법론처럼 느끼고 있었는데, 실제로는 현실의 업무 규칙과 상태를 코드로 어떻게 명확하게 표현할 것인가에 대한 고민이라는 점을 조금이나마 이해할 수 있었다. 물론 한 번 읽는다고 모든 내용을 완전히 이해할 수 있는 책은 아닌 것 같다. 하지만 DDD와 함수형 프로그래밍에 대한 막연한 거리감을 느끼던 입장에서, 끝까지 읽을 수 있었고, "왜 이런 접근이 필요한가"를 이해할 수 있었다는 점만으로도 충분히 의미 있는 독서였다. DDD나 함수형 프로그래밍을 어렵게만 느끼고 있었던 개발자라면 좋은 입문서이자 오랫동안 곁에 두고 다시 펼쳐볼 만한 책이라고 생각한다. |
| 와... Scott Wlaschin 책이 번역되다니 너무 기대됩니다. 게다가 예제 코드도 타입스크립트와 코틀린으로 업데이트되었네요. 역자 정말 대단합니다. 많은 분들이 읽었으면 좋겠네요. 정말 좋은 책, 추천합니다. 기대해요! |
|
백엔드 개발자를 준비하면서 가장 많이 듣게 되는 키워드 중 하나가 바로 DDD(Domain-Driven Design, 도메인 주도 설계)입니다.
‘그래서 이걸 코드로 어떻게 짜라는 거지? 엔티티와 VO는 알겠는데, 서비스 계층은 어떻게 구성해야 도메인 지식이 드러나는 걸까?’ 이런 고민 속에서 만난 책이 바로 <도메인 주도 설계를 위한 함수형 프로그래밍>입니다.
결론부터 말하자면, 이 책은 추상적인 DDD의 개념을 '타입(Type)'과 '함수(Function)'라는 구체적인 도구로 묶어 실체화시켜 줍니다.
(한번만 읽으면서 바로 이해는 쉽지 않은 것 같습니다. 천천히 음미하며 2~3번 반복으로 읽는것을 추천드립니다!) 1. 이 책을 선택한 이유: 이론과 구현의 연결 고리시중의 많은 DDD 책들은 '전략적 설계(비즈니스 이해)'에 많은 지면을 할애하거나, 객체 지향의 복잡한 패턴(팩토리, 레포지토리 등)에 집중하느라 정작 "비즈니스 로직을 명확하게 표현하는 법"을 놓치는 경우가 있습니다.
하지만 이 책의 목차를 보면 PART II 도메인 모델링하기와 PART III 모델 구현하기가 책의 핵심입니다. 특히 Chapter 4, 5의 '타입' 이야기와 Chapter 7의 '파이프라인' 이야기는 백엔드 개발자가 비즈니스 로직을 어떻게 코드로 번역해야 하는지에 대한 새로운 시각을 제공합니다.
2. 제가 생각하는 이 책의 강력한 장점 3가지① 타입 시스템 자체가 '살아있는 문서'가 된다
보통 우리는 주석이나 위키 문서를 통해 비즈니스 룰을 설명합니다. 하지만 이 책은 타입 시스템을 활용해 문서 없이도 코드가 비즈니스를 설명하게 만듭니다.
책에서는 AND 타입(객체/레코드)과 OR 타입(선택/열거형)을 조합하여, 불가능한 상태를 컴파일 시점에 막아버리는 모델링을 보여줍니다.
유효하지 않은 상태는 아예 코드로 표현할 수 없게 만드는 것, 이것이 진정한 도메인 보호라는 것을 깨닫게 해줍니다. ② 파이프라인으로 그려내는 비즈니스 프로세스백엔드 개발의 핵심은 결국 Input -> 검증 -> 처리 -> 저장 -> Output으로 이어지는 데이터의 흐름입니다. 이 책은 이 흐름을 '철도(Railway) 지향 프로그래밍' 혹은 '파이프라인' 패턴으로 설명합니다.
위와 같이 함수들을 레고 블록처럼 연결하여 비즈니스 로세스를 구성합니다. 이는 거대한 서비스 클래스에 절차지향적으로 로직을 때려 넣던 방식에서 벗어나, 작고 테스트 가능한 함수들의 조합으로 아키텍처를 바라보게 합니다.
특히 Chapter 3에서 언급되는 '양파 아키텍처(Onion Architecture)'와 결합되어, 외부 의존성(DB, API)을 가장자리로 밀어내고 순수한 도메인 로직을 지키는 방법을 명확히 보여줍니다.
③ 예외 처리를 비즈니스 로직의 일부로백엔드 개발에서 가장 골치 아픈 것이 try-catch와 예외 처리입니다. 이 책은 에러를 단순히 던져야 할(throw) 예외가 아니라, 비즈니스 프로세스의 결과값(Result/Either)으로 다룹니다. 성공했을 때의 경로와 실패했을 때의 경로를 명시적으로 타입에 드러냄으로써, 어떤 에러가 발생할 수 있는지 함수 시그니처만 보고도 파악할 수 있게 돕습니다. 3. 총평: 객체지향 개발자에게 던지는 신선한 충격저는 주로 Java와 같은 객체지향 언어를 공부했지만, 이 책을 읽으면서 언어의 패러다임을 떠나 "설계의 본질"을 다시 생각하게 되었습니다.
저자가 말하는 함수형 프로그래밍은 난해한 수학 공식이 아닙니다. "부수 효과(Side Effect)를 격리하고, 타입을 통해 도메인을 명확히 정의하며, 데이터의 흐름을 파이프라인으로 연결하라"는 실용적인 조언들입니다. 이는 현대적인 Java나 Go, Kotlin을 사용하는 백엔드 개발자라면 반드시 갖춰야 할 사고방식입니다. 📚 추천 대상 (Who)이 책은 다음과 같은 분들에게 강력히 추천합니다.
📖 이 책을 읽는 방법 (How)
|
제이펍 출판사에서 책을 제공받아 작성한 리뷰입니다.✨ 책의 구성 · Part 1: 도메인 이해하기 (DDD 기본 개념, 함수형 아키텍처) · Part 2: 도메인 모델링하기 (타입 중심 모델링, 파이프라인) · Part 3: 모델 구현하기 (함수 조합, 오류 처리, 영속화) Part1에서는 개발자와 도메인 전문가가 대화하며 도메인을 파악해가는 과정을 스토리텔링 방식으로 보여줍니다. 스토리텔링 방식이라 몰입도 되고, 도메인을 이해하는데에도 많은 도움이 되었습니다. 2장에서 데이터베이스 중심 디자인과 클래스 중심 디자인을 지양하라는 내용이 나올 때 정말 놀랐습니다. 프로젝트를 진행하면서 자연스럽게 DB 스키마부터 설계하거나 클래스 다이어그램부터 떠올렸기 때문입니다. 도메인 주도 설계에서는 스키마나 클래스가 아닌 '도메인'이 설계를 주도해야 한다고 말합니다. 핵심은 도메인 전문가와 개발자, 팀원이 모두 이해할 수 있는 언어(공용어)로 모델을 표현하는 것이었습니다. 🎯 핵심 학습 내용 1. 공용어(Ubiquitous Language)의 중요성 2. 타입으로 도메인 제약을 표현하는 방법 3. 함수 파이프라인으로 작업 흐름 모델링 4. 도메인 이벤트와 경계 진 맥락(Bounded Context) 5. TypeScript와 Kotlin에서의 타입 시스템 활용 객체 지향이 아닌 타입과 함수 중심으로 DDD를 설명하고, TypeScript와 Kotlin 두 언어로 상세한 예제를 제공해 구현 과정을 쉽게 따라갈 수 있었습니다. 서비스를 설계할 때 단순히 "기능을 어떻게 구현할 것인가?"가 아니라, "서비스 안에서 어떤 경계를 나누고 도메인을 어떻게 표현해야 하는지"에 대해 고민해보는 계기가 되었습니다. "어디서부터 생각을 시작해야 하는지"에 대한 감은 잡을 수 있었고, "이런 게 있구나", "이런 식으로 생각할 수도 있구나"를 알게 해주는 것 만으로도 충분한 가치가 있는 책입니다. 읽다 보니 도메인 주도 설계의 핵심은 구현이나 패턴보다도, 팀 내의 의사소통을 어떻게 구조화할 것인가에 있다는 생각이 들었습니다. 구현보다 앞선 세계가 있다는 것을 알게 해준 책입니다. 📌 추천 대상 ✅ TypeScript나 Kotlin을 다룰 수 있는 개발자 ✅ DDD가 궁금하지만 어디서부터 시작해야 할지 모르는 초중급자 ✅ 함수형 프로그래밍과 DDD를 함께 경험해보고 싶은 분 ✅ 팀 내 의사소통 개선에 관심 있는 분 #제이펍 |