Domain Modeling Made Functional

목차
저자 : Scott Wlaschin
출간일 : 2018년 1월
주제 #
이 책은 F#과 함수형 프로그래밍 패러다임에 도메인 주도 설계를 적용한다.
대상 독자 #
DDD와 F#, FP 세가지를 모두 알고 있어야 할 것 같지만 DDD의 개념을 처음부터 다루고, F#은 변수와 함수를 호출하는 기본만 알고 있으면 따라갈 수 있다. 책의 난이도를 높이지 않으려 하면서도 이후에 어려운 주제를 학습하는데 도움이 될 수 있도록 기반의 지식을 잘 설명해준다.
오래 된 책 #
2018년 1월 출간된 책이다. F# 문법은 최신 버전에 무리 없이 동작하지만 책이 오래 되어 라이브러리가 더 이상 사용되지 않는 것들(예: 데이터베이스 관련)이 있으나 책에서 설명하는 바를 이해하기 어렵지 않게 설명되어 있다. 또한 이 책이 다루는 내용은 짧은 기한을 갖는 주제가 아니다.
읽게 된 계기 #
- OOP의 언어에 FP의 개념을 담은 사양들이 추가되고 있다. FP가 아니더라도 패턴 매칭을 비롯하여 Data-Oriented Programming 같은 개념도 상황에 맞게 활용할 수 있다. 컴파일하고 실행되는 것을 넘어 문법의 활용에 대한 궁금증이 생겼다.
- 최근 FP가 아닌 주제에서 FP 개념이 언급되는 글을 자주 접했다. 그래서 FP의 기본 개념 정도는 이해하고 싶었다. OOP를 이해하는데 가장 도움이 되었던 주제는 DDD였기에 이 책이 함수형 프로그래밍을 시작하기에 좋다고 판단했다.
- 간단한 도구를 FP로 구현할 일이 생길 수도 있을 텐데 그럴 때를 대비해 조금 학습해두고 싶었다.
구성 #
책은 3개의 파트로 나눠져있다.
Part 1 #
도메인 주도 설계에서 커뮤니케이션의 중요성을 언급하고 코드에 도메인 지식을 담아 이 자체로 문서화되며 비기술자에게까지 공유되어야 한다는 개념을 다룬다.
Part 2 #
함수형 프로그래밍에서 함수와 타입을 설명한다. 주문, 결제, 배송 도메인으로 OOP에서의 도메인 주도 설계와 무엇이 다른지 설명하며 FP에서의 타입과 함수, 워크플로 설계를 다룬다.
Part 3 #
파트 2 설계를 바탕으로 구현하는 방법을 설명한다. 본격적으로 FP에서 중요하게 생각하는 조합(Composition)을 설명하고 함수의 출력과 다음 함수의 입력을 연결할 때 타입의 불일치를 해결하는 어댑터, FP에서 종속성을 다루는 방법, 함수의 성공과 실패를 Result 타입으로 감싸고 함수의 연결에 적용하는 방법과 직렬화를 다룬다. 지속성과 이펙트에 대한 설명, 도메인 모델의 변화를 주는 방법 등 구현에 필요한 기본 개념들을 다룬다.
만족한 점 #
파트 2의 설계는 타입과 함수를 이용한다. 코드를 작성하지만 내부 구현을 하지 않는다. 도메인 주도 설계에 맞게 값 타입을 선언하고 함수 시그니처를 작성하여 도메인에 대한 워크플로를 표현한다. 특히 파트 2의 내용은 비개발자가 (정말)약간의 학습으로 이해할 수 있을 정도로 텍스트 기반 워크플로를 그대로 옮긴 코드라는 저자의 설명에 어느정도 설득되었다. 목차에서는 파트 3에서 배울 점이 많을 것으로 생각했는데 파트 2에서 더 영감을 얻었다. 물론 DDD의 개념을 처음 접하는 사람은 이 책으로부터 DDD에 대한 가치를 배울 수 있을 것이다.
원서를 그대로 읽을 수 없지만 책에 사용된 문장은 번역기의 번역으로 읽기 충분할 만큼 깔끔하게 작성되어 있다.
마무리 #
FP의 첫 책으로 읽었기 때문에 다른 책과 비교를 하거나 평가하기 어렵지만 다음으로 다른 FP 책을 읽는데 부담을 충분히 덜었고, FP로 애플리케이션을 어떻게 개발할 수 있을까에 대해 충분한 가이드와 힌트를 얻은 것으로 만족한다.
함수형 프로그래밍을 사용하게 된다면 스칼라나 엘릭서를 써보고 싶다. 이 책에 사용된 F# 언어는 국내 뿐 아니라 해외까지도 사용율이 낮은 편이라 거부감이 있을 것이다. 그럼에도 도메인 주도 설계와 함수형 프로그래밍 패러다임을 결합하는 개념을 배우기에 좋은 책이다.