You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Akka Stream의 Working Graph는 데이터 처리 플로우를 레고 블럭처럼 모듈화하고 구성할 수 있는 강력한 도구입니다. 이를 활용하면 복잡한 비동기 데이터 흐름을 간결하고 직관적으로 구성할 수 있습니다. 이에 대한 장단점과 Akka Stream이 제공하는 주요 장치를 설명드리겠습니다.


장점

  1. 모듈성 및 재사용성

    • 데이터를 처리하는 각 단계를 작은 블럭(Graph Stage)으로 나누어 조립할 수 있어 코드 재사용성이 높아집니다.

    • 기존의 블럭을 다른 Graph에 손쉽게 삽입하거나 대체할 수 있습니다.

  2. 비동기 및 병렬 처리

    • Akka Stream은 비동기적으로 데이터를 처리하므로 높은 처리량과 낮은 대기시간(Latency)을 보장합니다.

    • 각 단계(Stage)가 독립적으로 병렬 실행될 수 있어 대규모 데이터 처리에 적합합니다.

  3. 명확한 데이터 흐름

    • 데이터 플로우가 Graph 형태로 명시되기 때문에 복잡한 처리도 시각적으로 이해하기 쉽습니다.

    • Source, Flow, Sink를 조합하여 데이터의 시작부터 끝까지의 흐름을 설계할 수 있습니다.

  4. 백프레셔 지원

    • 다운스트림이 처리 속도를 따라가지 못할 경우, Akka Stream은 자동으로 백프레셔(Backpressure)를 적용하여 데이터 과부하를 방지합니다.

  5. 확장성

    • Akka의 멀티노드 환경에서 클러스터링 기능을 활용해 스트림을 분산 처리하거나 동적으로 확장할 수 있습니다.


단점

  1. 초기 학습 곡선

    • Graph DSL이나 복잡한 흐름을 설계할 때 처음에는 구조를 이해하고 설계하는 데 시간이 필요합니다.

    • 특히 기존의 Imperative 방식에 익숙한 개발자들에게는 새로운 접근 방식으로 느껴질 수 있습니다.

  2. 디버깅 어려움

    • 스트림이 비동기적으로 실행되므로 실행 중에 발생하는 에러를 디버깅하는 데 어려움이 있을 수 있습니다.

    • 데이터 흐름이 복잡할수록 오류의 원인을 추적하기 힘들어질 수 있습니다.

  3. 추가 리소스 소비

    • 각 Stage는 별도의 비동기 Task로 실행되므로, 작은 단위로 쪼갤수록 리소스 사용량이 증가할 수 있습니다.


Akka Stream이 제공하는 주요 장치

  1. Graph DSL

    • 복잡한 데이터 흐름을 표현하기 위해 제공되는 도메인 특화 언어(DSL).

    • Source, Sink, Flow 등을 유기적으로 연결해 Directed Graph 형태로 구성.

  2. Source / Sink / Flow

    • Source: 데이터 스트림의 시작점. (e.g., 파일, 네트워크, 데이터베이스)

    • Flow: 데이터를 변환하거나 필터링하는 중간 단계.

    • Sink: 데이터 스트림의 종착점. (e.g., 저장, 출력)

  3. FlexiFlow (Custom Graph Stage)

    • 기본 제공되는 연산자 외에도 사용자가 직접 커스텀 Stage를 구현할 수 있습니다.

  4. Materializer

    • 정의한 Graph를 실행 가능한 스트림으로 변환합니다.

    • 실행 시 필요한 리소스나 스레드를 할당합니다.

  5. Backpressure

    • 다운스트림의 처리 속도를 기준으로 업스트림의 데이터를 조절하여 스트림이 과부하되지 않도록 보장.

  6. Predefined Stages

    • Akka Stream은 자주 사용되는 연산자를 기본적으로 제공합니다. (e.g., map, filter, groupBy, merge, broadcast)

  7. Supervision Strategy

    • 스트림 실행 중 발생한 에러를 다루기 위해 Resume, Restart, Stop 등의 정책을 제공합니다.


Akka Stream의 Working Graph는 설계 단계에서 약간의 추가 학습이 필요하지만, 복잡한 스트림 처리 시 강력한 모듈성과 유연성을 제공합니다. 특히 백프레셔와 병렬 처리 지원은 대규모 실시간 데이터 처리 시스템에서 큰 장점으로 작용합니다. 😊







전체 샘플코드 :





  • No labels