Ch02 현실에서의 함수형 사고

·

2 min read

함수형 피자 가게

앞으로 살펴볼 함수형 개념 대략적으로 살펴보기

Part1 - 변경 가능성에 따라 코드 나누기

액션, 계산, 데이터 구분하기

계층화 설계 stratified design

자주 바뀌는 것 - 자주 바뀌지 않는 것에 따라 코드 나누기

  • 자주 바뀌는 것

    • 이번 주 메뉴, 이번주 사야 할 것

    • \=> 비즈니스 규칙

  • 바뀔 수도 있지만 자주 바뀌지 않는 것

    • 조리법 순서, 재료 목록에 대한 동작

    • \=> 도메인 규칙

  • 잘 바뀌지 않는 것

    • JavaScript 언어 자체

    • \=> 기술 스택

  • 각 계층은 그 아래에 있는 계층을 기반으로 만들어짐

Part2 - 일급 추상

타임라인 다이어그램

  • 액션이 시간 순서에 따라 어떻게 실행되는지 보여줌

  • 분산 시스템을 도입한다면?

    • 반죽 만들기, 치즈 갈기, 소스 만들기 작업을 나눠서 하게 되면 타임라인의 실행 순서가 섞이게 됨

      • 치즈 갈기 작업이 끝나지 않았는데 소스 만드는 로봇은 치즈를 뿌려야 함
    • 서로 다른 타임라인이 서로 다른 순서로 실행되는 문제

    • 분산 시스템의 어려움

      • 기본적으로 타임라인은 서로 순서를 맞추지 않음

      • 액션이 실행되는 시간은 중요하지 않고, 각각의 타임라인은 다른 타임라인 순서와 관계없이 진행되어야 함

      • 드물게 타이밍이 어긋나는 경우가 발생, 특히 주문이 많이 들어오면 더 많이 발생

    • 다만 타임라인 다이어그램으로 시스템의 문제를 알 수 있음

타임라인 커팅 cutting

여러 타임라인이 동시에 진행될 때 서로 순서를 맞추는 방법

  • 고차 동작 high-order operation 으로 구현

  • 각 타임라인이 독립적으로 동작하고, 특정 작업이 완료되면 다른 타임라인이 끝나기 기다림