6장 함수형 프로그래밍 - ChoDragon9/posts GitHub Wiki
불변성과 아키텍처
경합(race) 조건, 교착상태(deadlock) 조건, 동시성 업데이트(concurrent update) 문제가 모두 가변 변수로 인해 발생하기 때문에 아키텍트는 변수의 가변성을 염려한다.
끝없는 리스트와 지연 평가
범위가 정해진 리스트를 사용하지 않고, 끝없는 리스트를 사용한다. take를 통해 원하는 갯수를 추출한다. 지연 평가가 가능하기 때문에 이 형태가 가능하다.
(println (take 25 (map (fn [x] (* x x)) (range))))
가변성의 분리
불변성과 관련하여 가장 중요한 타협 중 하나는 애플리케이션 내부에서 가변과 불변을 분리하는 것이다.
이벤트 소싱
- 상태가 아닌 트랜젝션을 저장하자는 전략
- 결과적으로 애플리케이션을 CRUD가 아니라 그저 CR만 수행한다.
- 데이터 저장소에서 변경과 삭제가 전혀 발생하지 않으므로 동시업데이트 문제 또한 일어나지 않는다.
- 이 방식은 소스코드 버전 관리 시스템이 정확히 이 방식으로 동작한다.