18장. 반응형 아키텍처와 어니언 아키텍처
반응형 아키텍처
- 순차적 액션 단계에 사용해 애플리케이션을 구조화 하는 방법
- 코드에 나타난 순차적 액션의 순서를 뒤집음
- 핵심 원칙 : 이벤트에 대한 반응으로 일어날 일을 미리 지정하는 것
X가 일어나면 언제나 Y를 한다
반응형 아키텍처가 주는 영향 3가지
1. 원인
과 효과
가 결합한 것을 분리한다
2. 여러 단계를 파이프라인으로 처리한다.
- 파이프라인 : 작은 액션과 계산을 조합한 하나의 액션
- 데이터는 파이프라인으로 들어가 각 단계에서 처리됨
- 자바스크립트의 경우, Promise로 파이프라인을 구현
- Promise는 단일값을 전달할 수 있기 때문에 파이프라인 단계 간 데이터를 전달할 수 있음
3. 타임라인이 유연해진다.
- 순서를 정의하는 방법을 뒤집기 때문에 자연스럽게 타임라인이 작은 부분으로 분리됨
반응형 아키텍처를 사용하기 좋은
상황
- 여러 원인이 있고 그에 따른 여러 효과가 있을 때, 원인과 효과를 분리해 일을 독립적으로 처리 가능
반응형 아키텍처를 사용하기 나쁜
상황
- 원인과 효과의 중심이 없는 상황
- 순차적인 단계가 있고 항상 원인은 하나일 때
→ 더 직관적인 순차적 액션 추천
어니언 아키텍처
- 웹 서비스나 현실 세계와 상호작용하기 위한 서비스 구조를 만드는 방법
- 계층 구조
인터렉션 계층
: 바깥 세상에 영향을 주거나 받는 액션도메인 계층
: 비즈니스 규칙을 정의하는 계산언어 계층
: 언어 유틸리티와 라이브러리
- 액션과 계산의 분리, 계층형 설계 방식과 잘 맞음
데이터
: 이벤트에 대한 사실계산
: 호출 시점이나 횟수에 영향을 받지 않고 같은 입력을 주면 항상 같은 결과를 내는 연산액션
: 바깥 세계에 영향을 주거나 받는 실행 가능한 코드로, 호출 시점과 횟수가 중요함계층형 설계
: 함수 호출 관계를 기반으로 함수를 배치하는 방법
- 함수형 시스템이 잘 동작할 수 있는 중요한 규칙
- 현실 세계와 상호작용은 인터렉션 계층에서 해야한다.
- 계층에서 호출하는 방향은 중심 방향이다.
- 계층은 외부에 어떤 계층이 있는지 모른다.
특징 1. 변경과 재사용이 쉬워야 한다.
어니언 아키텍처는 인터렉션 계층을 바꾸기 쉬워, 도메인 계층을 재사용하기 좋음
특징 2. 도메인 규칙은 도메인 용어를 사용한다.
( 프로그램 핵심 로직
= 도메인 규칙
= 비즈니스 규칙
)
도메인 규칙에는 제품, 이미지, 가격 할인과 같은 용어를 사용한다.
전통적인 아키텍처
전통적인 계층형 아키텍처로는 웹 API가 있음
다음은 웹 서버 생성 시 사용하는 전형적인 계층이다.
웹 인터페이스 | 웹 요청을 도메인으로 바꾸고 도메인을 웹 응답으로 바꾼다. |
---|---|
도메인 계층 | 애플리케이션 핵심 로직으로 도메인 개념에 DB 쿼리나 명령이 들어간다. |
데이터베이스 계층 | 시간에 따라 바뀌는 정보를 저장한다. |
함수형 아키텍처
도메인 계층이 데이터베이스 계층에 의존하지 않는다
데이터베이스 동작은 값을 바꾸거나 데이터베이스에 접근하기 때문에 액션
임
위의 함수형 아키텍처 그림에서 각 점선 끝을 연결하면 어니언 아키텍처와 같은 모양이 됨