💡 함수형 프로그래밍
함수형 프로그래밍이란
- 함수들의 집합 / 조합으로써 프로그래밍 하는 기법
- 상태에 대한 변수와 가변 데이터를 사용하지 않는 것을 기본으로 함
- 자바에서는 모든 변수가 가변성을 갖고 있지만, 클로저에서는 가변 변수 타입이 전혀 없음
불변성과 아키텍쳐
- 가변 변수를 사용함에 있어서 생길 수 있는 단점
- Race condition
- 공유 자원에 대해 여러 프로세스가 접근하는 순서에 따라 결과 값에 영향을 줄 수 있는 상태
- Deadlock
- 두개 이상의 작업이 서로 작업이 끝나기만을 기다리고 있어 아무 결과도 낼 수 없는 상태
- Concurrent update
- 공유 자원에 대해 동시적으로 업데이트를 진행하여 업데이트의 결과 값이 엉망이 되는 상태
- 변할수 없는 타입으로만 개발이 가능한지 부터 살펴 보아야 함
가변성의 분리
- 가변적인 변수들을 한번에 불변성의 변수로 변경 할 수는 없음
- 이러한 가변적인 변수들을 wrapping 한 Atomic 변수들을 활용 하는 방법도 좋은 방법
트랜잭션
- 처리 되어야 할 하나의 논리적인 작업 단위를 이루는 여러 동작들의 집합
- 작업의 완전성을 보장 해 줌
이벤트 소싱
- 변수의 상태가 아닌 트랜잭션 자체를 저장 하여 재사용 하는 전략
- 예를 들어, 잔고 조회를 할 때마다 계좌 개설 시점부터 조회 이벤트가 발생한 시점까지 모든 트랜잭션을 조회하여 잔고를 계산 해주는 전략
- 매일 자정에 상태를 저장 하고, 그 상태를 불러와서 시작점을 재설정 하는 전략도 혼용 될 수 있음
- 데이터 저장소에서 삭제 / 변경 되는 작업이 하나도 없음 → CRUD 에서 CR 만 진행
- 소스 코드 버전 관리 시스템이 이러한 방식으로 동작 함