Page History
...
| Widget Connector | ||
|---|---|---|
|
- 원문영상
유튜브요약 by 릴리AI
이 컨텐츠는 액터 모델(Actor Model)과 도메인 주도 설계(DDD)를 활용하여 반응형 시스템(Reactive Systems)을 구축하는 방법에 대해 설명합니다. 특히, 멀티코어 프로세서 시대에 스레딩의 어려움을 극복하고 비동기 메시징을 통해 시스템의 응답성, 복원성, 탄력성을 향상시키는 액터 모델의 장점을 강조하며, DDD의 유비쿼터스 언어와 바운디드 컨텍스트 개념을 액터와 메시지에 적용하여 복잡성을 줄이고 도메인 모델을 효과적으로 구현하는 방법을 제시합니다.
...
💡 액터 모델이 기존 객체 지향 모델과 다른 점은 무엇인가?
항목 | 액터 모델 | 객체 지향 모델 |
메서드 호출/메시지 전송 | 비차단(Asynchronous) 메시지 전송 | 차단(Blocking) 메서드 호출 |
예외 처리 | 수퍼비전 계층에서 처리 | 클라이언트가 처리하거나 상위 컴포넌트로 전달 |
동시성 처리 | 메시지 큐를 통해 순차 처리, 상태 공유 없음 | 스레드 간 상태 공유 및 잠금 필요 |
이 웨비나는 액터 모델과 도메인 주도 설계(DDD)를 반응형 시스템에 적용하는 방법을 설명합니다. 액터 모델은 1973년에 처음 설계되었으며, 클라우드 동시성문제를 해결하는 데 유용합니다. 액터는 메시지 기반, 논블로킹방식으로 설계되어 처리량(throughput)을 향상시키고, 장애를 graceful하게 처리하여 시스템의 resilience와 responsiveness를 유지합니다. 또한, 액터는 시스템이 elastic하게 확장 및 축소되도록 지원하여 인프라 및 하드웨어 footprint를 최소화합니다. 이 웨비나는 액터 모델이 소프트웨어 개발의 미래에 중요한 이유와 DDD와 함께 사용할 때의 이점을 강조합니다.
...
액터 모델 기반 DDD 구현 (애그리게이트와 이벤트 소싱)
개념/패턴 | 설명 | DDD와의 관계 | 구현 방식 (액터 모델) |
액터 모델 | 병렬 및 분산 시스템 구축에 적합한 동시성 모델 | DDD와 함께 사용 시 효과적 | 메시지 기반 통신, 상태 고립 |
도메인 주도 설계 (DDD) | 복잡한 도메인 로직을 모델링하고 구현하는 소프트웨어 개발 접근 방식 | 액터 모델과 결합하여 반응형 시스템 구축 | 애그리게이트, 이벤트 소싱, 도메인 이벤트 등 |
애그리게이트 | DDD에서 일관성을 유지해야 하는 객체들의 묶음 | 액터가 애그리게이트 구현에 적합 | • 액터는 애그리게이트의 상태를 관리 |
이벤트 소싱 | 상태 변화를 이벤트 스트림으로 저장하는 데이터 관리 패턴 | 액터 모델에서 상태 변화를 기록하는 방식 | • 액터는 상태 변화를 이벤트로 기록 |
DDD에서 애그리게이트는 일관성을 유지해야 하는 객체들의 묶음입니다.
액터는 이 애그리게이트를 구현하기에 아주 적합합니다.
액터는 자신에게 오는 명령 메시지를 처리하고, 상태 변화를 이벤트로 기록할 수 있습니다.
이렇게 상태 변화를 이벤트로 저장하는 방식을 이벤트 소싱 패턴이라고 합니다.
액터의 상태는 보통 불변 객체로 만들고, 새로운 메시지가 오면 기존 상태를 바꾸는 대신 새로운 상태 객체를 만들어 사용합니다.
...
전통적인 방식에서는 하나의 요청을 처리하기 위해 하나의 스레드가 처음부터 끝까지 모든 작업을 순서대로 처리합니다.
중간에 데이터베이스 접근이나 다른 시스템 호출이 발생하면 해당 스레드는 그 작업이 끝날 때까지 기다려야 합니다. (블로킹)
이는 마치 한 사람이 모든 일을 순서대로 처리하는 것과 같습니다.
액터 모델에서는 요청이 오면 해당 액터가 메시지를 받고 바로 다른 일을 할 수 있습니다. ( 논블로킹)
마치 여러 사람이 동시에 다른 작업을 처리하고, 결과가 오면 그때 해당 결과를 처리하는 것과 같습니다.
특징 | 전통적인 방식 (스레드/요청) | 액터 모델 |
처리 방식 | 스레드가 순차적으로 모든 작업 처리 | 메시지 기반 비동기 처리 |
블로킹 여부 | 작업 완료까지 대기 (블로킹) | 메시지 보내고 즉시 다른 작업 (논블로킹) |
자원 활용 | 스레드가 대기 상태로 자원 점유 | 대기 없이 다른 작업 처리로 자원 활용도 높음 |
처리량 (Throughput) | 상대적으로 낮음 | 여러 액터 동시 처리로 높음 |
그렇다면 액터 모델은 항상 더 빠를까요?
단일 요청 처리 시간: 단일 스레드에서 순차적으로 처리하는 경우보다 액터 모델이 약간 더 오래 걸릴 수도 있습니다.
메시지 전달, 컨텍스트 전환 등의 오버헤드가 있을 수 있기 때문입니다.
전체 시스템 처리량: 하지만 여러 요청을 동시에 처리할 때, 액터 모델은 여러 코어와 자원을 훨씬 효율적으로 사용하여 전체 처리량이 훨씬 높습니다.
마치 혼자서는 빨리 못 뛰어도, 팀 전체로는 훨씬 많은 짐을 나르는 것과 같습니다.
...
