세 가지 패러다임
구조적 프로그래밍
구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다.
- 무분별한 점프 (
goto
) 는 프로그램 구조에 해롭다.
if/then/else
, do/while/until
과 같이 더 익숙한 구조로 대체
객체 지향 프로그래밍
객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.
함수형 프로그래밍
함수형 프로그래밍은 변수 할당에 대해 규칙을 부과한다.
객체 지향 프로그래밍
결론
- 다형성을 이용하여 전체 시스템의 모든 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있다.
- 의존성 역전을 활용하여 플러그인 아키텍처를 구성할수 있다.
- 저수준의 세부사항은 중요도가 낮은 플러그인 모듈로 만들수 있다.
- 고수준의 정책을 포함하는 모듈과는 독립적으로 개발하고 배포할 수 있다.
함수형 프로그래밍
불변성과 아키텍처
- 변수의 가변성으로부터 발생하는 문제들 (동시성 문제)
- race condition (경합 조건)
- dead lock (교착 상태)
- conccurent update (동시 업데이트)
가변성의 분리
- 가변 컴포넌트와 불변 컴포넌트를 분리하기
- 불변 컴포넌트에서는 순수하게 함수형 방식으로 작업이 처리

이벤트 소싱
- 상태가 아닌 트랜잭션을 저장하는 전략
- 상태가 필요해지면, 단순히 상태의 시작점부터 모든 트랜잭션을 처리한다.
- CRUD가 아니라 CR만 수행한다.
- 따라서 충분한 데이터 저장소가 필요하다.