Ch02 현실에서의 함수형 사고
함수형 피자 가게
앞으로 살펴볼 함수형 개념 대략적으로 살펴보기
Part1 - 변경 가능성에 따라 코드 나누기
액션, 계산, 데이터 구분하기
계층화 설계 stratified design
자주 바뀌는 것 - 자주 바뀌지 않는 것에 따라 코드 나누기
자주 바뀌는 것
이번 주 메뉴, 이번주 사야 할 것
\=> 비즈니스 규칙
바뀔 수도 있지만 자주 바뀌지 않는 것
조리법 순서, 재료 목록에 대한 동작
\=> 도메인 규칙
잘 바뀌지 않는 것
JavaScript
언어 자체\=> 기술 스택
각 계층은 그 아래에 있는 계층을 기반으로 만들어짐
Part2 - 일급 추상
타임라인 다이어그램
액션이 시간 순서에 따라 어떻게 실행되는지 보여줌
분산 시스템을 도입한다면?
반죽 만들기, 치즈 갈기, 소스 만들기 작업을 나눠서 하게 되면 타임라인의 실행 순서가 섞이게 됨
- 치즈 갈기 작업이 끝나지 않았는데 소스 만드는 로봇은 치즈를 뿌려야 함
서로 다른 타임라인이 서로 다른 순서로 실행되는 문제
분산 시스템의 어려움
기본적으로 타임라인은 서로 순서를 맞추지 않음
액션이 실행되는 시간은 중요하지 않고, 각각의 타임라인은 다른 타임라인 순서와 관계없이 진행되어야 함
드물게 타이밍이 어긋나는 경우가 발생, 특히 주문이 많이 들어오면 더 많이 발생
다만 타임라인 다이어그램으로 시스템의 문제를 알 수 있음
타임라인 커팅 cutting
여러 타임라인이 동시에 진행될 때 서로 순서를 맞추는 방법
고차 동작 high-order operation 으로 구현
각 타임라인이 독립적으로 동작하고, 특정 작업이 완료되면 다른 타임라인이 끝나기 기다림