Skip to content

6장 함수형 프로그래밍

Boseong Choi edited this page Jan 27, 2022 · 3 revisions

자유롭게 작성 해 주세요.

<명욱>

  • 함수형 프로그래밍에는 변수의 할당이 매우 제한적으로 이루어진다.
  • 이를 통해 동시성 문제를 해결할 수 있다. 애초에 변수에 값을 할당하지 않으므로, 멀티스레드 환경에서도 서로 간섭 없는 동작을 보장한다.
  • 물론 완전히 변수가 없는 프로그램은 모든곳에 적용되기 어렵다. 중요한 것은 가변성을 분리할 수 있다는 것이다.
  • disk 와 컴퓨팅 능력의 한계가 없다면 update, delete 가 없는 DB 를 구현할 수 있다! (이벤트 소싱) 만약 이것이 가능하다면 마치 git 에서 commit 을 통해 항상 변경내역을 추척할 수 있는 것 처럼, DB 에 저장 되어야 할 모든 데이터가 빠짐없이 기록되는 동시에 변하지 않는 데이터를 쌓을 수 있다.

통계 테이블을 볼 때 마다 DB 성능이 뛰어나면 매번 계산하면 될텐데..라고 생각을 했었다. 하지만 그 당시 시점의 DB 기준으로 계산된 통계가 지금 다시 계산했을 때 같으리란 보장이 없다. 그러나 이벤트 소싱 DB 라면 그러한 보장을 할 수 있구나 라고 생각하게 되었다.


<보성>

  • 함수형 언어는 람다 대수(Lambda Calculus), LISP, SML로 처음 접했었는데 정말 매력적이라고 느꼈습니다. SICP에서도 함수형 언어로 프로그래밍 입문을 안내하듯이, 프로그래밍에 대한 본질적인 접근에 함수형 패러다임이 큰 도움을 준다고 생각합니다.
  • 파이썬에서도 종종 재미로 함수형 스타일로 코딩테스트 문제를 풀어보곤 하는데, 확실히 본격적인 함수형 언어들이 제공하는 문법적인 도움이 없다면 한계도 있고, 깔끔하게 짜는 것이 어렵다고 느꼈습니다.
  • 트랙잭션의 결과가 아닌 트랜잭션만을 저장해서 동시성 문제를 해결하려 한다는 부분에서 CRDT를 떠올렸습니다. 블록체인도!
  • 버전관리시스템 이야기가 나와서 반가웠습니다. 개인적으로 느낀 Git의 가장 멋진 아이디어가 저장소에 대한 연산을 CR만 제공한다는 점이었습니다(게다가 그걸 Delta가 아닌 Snapshot으로 처리한다니!). Git이 가지는 불변성이 Git을 오늘날 가장 널리 쓰이게 하는 데 큰 역할을 하지 않았나 싶습니다(물론 불변성을 가지는 VCS가 Git만 있는 건 아니지만요).