18장. 반응형 아키텍처와 어니언 아키텍처

반응형 아키텍처

스크린샷 2024-01-04 오후 9 23 35

  • 순차적 액션 단계에 사용해 애플리케이션을 구조화 하는 방법
  • 코드에 나타난 순차적 액션의 순서를 뒤집음
  • 핵심 원칙 : 이벤트에 대한 반응으로 일어날 일을 미리 지정하는 것
  • X가 일어나면 언제나 Y를 한다

반응형 아키텍처가 주는 영향 3가지

1. 원인효과가 결합한 것을 분리한다

2. 여러 단계를 파이프라인으로 처리한다.

  • 파이프라인 : 작은 액션과 계산을 조합한 하나의 액션
  • 데이터는 파이프라인으로 들어가 각 단계에서 처리됨
  • 자바스크립트의 경우, Promise로 파이프라인을 구현
    • Promise는 단일값을 전달할 수 있기 때문에 파이프라인 단계 간 데이터를 전달할 수 있음

3. 타임라인이 유연해진다.

  • 순서를 정의하는 방법을 뒤집기 때문에 자연스럽게 타임라인이 작은 부분으로 분리됨

반응형 아키텍처를 사용하기 좋은 상황

  • 여러 원인이 있고 그에 따른 여러 효과가 있을 때, 원인과 효과를 분리해 일을 독립적으로 처리 가능

반응형 아키텍처를 사용하기 나쁜 상황

  • 원인과 효과의 중심이 없는 상황
  • 순차적인 단계가 있고 항상 원인은 하나일 때

→ 더 직관적인 순차적 액션 추천


어니언 아키텍처

스크린샷 2024-01-05 오전 12 53 44

  • 웹 서비스나 현실 세계와 상호작용하기 위한 서비스 구조를 만드는 방법
  • 계층 구조
    • 인터렉션 계층 : 바깥 세상에 영향을 주거나 받는 액션
    • 도메인 계층 : 비즈니스 규칙을 정의하는 계산
    • 언어 계층 : 언어 유틸리티와 라이브러리
  • 액션과 계산의 분리, 계층형 설계 방식과 잘 맞음
    • 데이터 : 이벤트에 대한 사실
    • 계산 : 호출 시점이나 횟수에 영향을 받지 않고 같은 입력을 주면 항상 같은 결과를 내는 연산
    • 액션 : 바깥 세계에 영향을 주거나 받는 실행 가능한 코드로, 호출 시점과 횟수가 중요함
    • 계층형 설계 : 함수 호출 관계를 기반으로 함수를 배치하는 방법
  • 함수형 시스템이 잘 동작할 수 있는 중요한 규칙
    • 현실 세계와 상호작용은 인터렉션 계층에서 해야한다.
    • 계층에서 호출하는 방향은 중심 방향이다.
    • 계층은 외부에 어떤 계층이 있는지 모른다.

특징 1. 변경과 재사용이 쉬워야 한다.

어니언 아키텍처는 인터렉션 계층을 바꾸기 쉬워, 도메인 계층을 재사용하기 좋음

특징 2. 도메인 규칙은 도메인 용어를 사용한다.

( 프로그램 핵심 로직 = 도메인 규칙 = 비즈니스 규칙 )

도메인 규칙에는 제품, 이미지, 가격 할인과 같은 용어를 사용한다.


전통적인 아키텍처

전통적인 계층형 아키텍처로는 웹 API가 있음

다음은 웹 서버 생성 시 사용하는 전형적인 계층이다.

웹 인터페이스웹 요청을 도메인으로 바꾸고 도메인을 웹 응답으로 바꾼다.
도메인 계층애플리케이션 핵심 로직으로 도메인 개념에 DB 쿼리나 명령이 들어간다.
데이터베이스 계층시간에 따라 바뀌는 정보를 저장한다.

함수형 아키텍처

도메인 계층이 데이터베이스 계층에 의존하지 않는다

데이터베이스 동작은 값을 바꾸거나 데이터베이스에 접근하기 때문에 액션

스크린샷 2024-01-05 오전 12 46 14

위의 함수형 아키텍처 그림에서 각 점선 끝을 연결하면 어니언 아키텍처와 같은 모양이 됨