드디어 읽는 클린아키텍처..
좋은 설계란?
- 유연해야 한다. 유지보수 비용이 적게 드는 설계가 좋은 설계
기능보다 구조
- 엉성하게 동작하더라도 바꾸기 쉬우면 쉽고 빠르게 개선할 수 있다.
- 완벽하게 동작하더라도 구조가 복잡하면 새로 개발하는게 비용이 더 적은 사태가 발생한다.
객체지향 프로그래밍?
- 데이터와 함수의 조합, 실제 세계를 모델링하는 방법 등은 모두 부족한 설명
캡슐화, 상속, 다형성
- 캡슐화는 오히려 C에서 더 완벽함
- 상속의 경우 C에서도 사용한 기법이며 OO는 개발자의 실수를 막고 더 편리하게 사용하게 만들어 주지 본질은 아님
- 다형성이 OO가 지향하는 소스 코드 의존성을 원하는 방향으로 설정하도록 도와주는 의존성 역전 원칙을 가능케하는 특징
- 모듈간 세부사항 변경이 다른 모듈에 영향을 끼치지 않아 개발 독립성을 갖추도록 함
재미있다. 좀 더 객체지향 프로그래밍을 피부로 느끼는 느낌. 멀티모듈 프로젝트를 진행하면서 어렴풋이 느꼈던 부분을 문장으로 확인한 기분이다.
함수형 프로그래밍?
불변성과 아키텍처
- 변수의 가변성이 없다면 데드락과 동시성 문제등이 발생하지 않는다.
- 멀티 프로세스와 멀티 스레드 상황에서 타협을 통해 불변성을 실현한다면 안정적으로 프로그램을 설계할 수 있다.
- 불변 컴포넌트와 가변 컴포넌트를 분리하는 것이 가장 기본적인 타협
이벤트 소싱
- 상태가 아닌 이벤트(함수)를 저장하는 전략
- 잔고를 관리하는 은행 어플에서 입금과 출금 트랜잭션을 통해 잔고(상태)를 변경하지 않고 트랜잭션 자체를 더하고, 조회 시에는 트랜잭션을 모두 더해서 보여준다.
- 소스 코드 버전 관리 시스템이 이런 방식으로 동작
이벤트 소싱이라는 개념이 실제로 사용되고 있다는 점이 신기했다. 생각해보면 Git이 어떻게 구현되어 있을지 생각해봤다면 놀랍진 않을수도?