함수형코딩 524~544 46, 47일차
어니언 아키텍처
- 인터렉션 계층 : 바깥 세상에 영향을 주거나 받는 액션
- 도메인 계층 : 비즈니스 규칙을 정의 하는 계산
- 언어 계층 : 언어 유틸리티와 라이브러리
액션에서 계산을 빼내면 의도하지 않아도 어니언 아키텍처 구조가 된다.
전통적인 계층형 아키텍처는 데이터베이스 계층이 가장 아래에 있고 이것은 액션이기 때문에 상위 모든 행위들이 모두 액션이 된다.
도메인 규칙은 도메인 언어를 사용해야한다.
EX, 새 데이터베이스에 제품 이미지가 있다면 사용하고 없다면 이전 데이터 베이스에서 가져온다
이것이 비즈니스 로직일지라도 도메인 용어를 쓰지 않기 때문에 도메인 규칙이 아니다.
해당 로직은 인터랙션 계층에서 수행되어야한다.
가독성을 결정하는 요소 4가지
- 사용하는 언어
- 사용하는 라이브러리
- 레거시 코드와 코드 스타일
- 개발자들 습관
어니언 아키텍처는 가장 이상적인 모습이다. 함수형을 통해 어니언 아키텍처를 달성할 수 있다.
하지만, 함수형 코드가 아닌 코드가 더 명확한 경우도 있다. 어쩌면 명확함을 위해 함수형 스타일을 사용하지 않아야 할 수도 있다. 도메인 계층을 계산으로 만들어 인터랙션 계층과 분리하면서 읽기 좋은 코드를 만들려고 노력해야한다
속도전
많은 것을 포기하고 가더라도, 나중에 아키텍처에 맞춰 코드를 정리할 준비를 하는 것이 좋다.
성능
시스템 성능과 타협해야하는 경우도 있다.
변경 가능한 데이터 구조는 불변데이터 구조 보다 빠르다. (ex, 카피와 라이트 과정의 생략)
성능 개선과 도메인 계산으로 만드는 것은 따로 생각하는 것이 좋다.
최적화는 인터렉션 계층에서 하고, 도메인 계층은 재사용 가능한 계산을 만드는것에 집중하자
요약
반응형 아키텍처
- X하고 Y하는 것이 아니라 X하면 Y하게
- 액션과 계산을 조합해서 파이프 라인을 만든다. 파이프라인은 순서대로 발생하는 작은 액션들의 조합.
- ValueCell로 반응형 파이프라인을 만들어봤다.
어니언 아키텍처
지금까지 배운 것들
파트1
- 액션 계산 데이터 분리
- 액션에서 계산을 빼내 재사용하기 좋고 테스트 하기 쉬운 코드를 만든다.
- 암시적인 입출력을 명시적으로 바꾼다.
- 카피온라이트를 사용해서 불변형 테이터를 사용해 계산을 한다.
- 계층형 설계로 코드를 구성하고 개선한다.
파트2
- 일급추상
- 일급으로 만들어 코드를 추상화한다.
- 함수형 반복과 함수형 도구를 사용해 고차원으로 추론한다.
- 함수형 도구를 연결해 데이터 변환 파이프 라인을 만든다.
- 동시성 분산 시스템을 이해한다.
- 동시성 제어를 위해 (독립적으로 하나씩 실행하기 큐, 모든 타임라인이 실행완료될떄 까지 대기하기 컷, 한번만 실행하기 Justonce, 비슷한 항목은 건너뛰는 드롭핑큐)를 배움
- 반응형 아키텍처를 위해 원인과 효과를 분리한다.
- 세상과 상호작용을 위해 어니언 아키텍처를 사용한다