Microservices Architecture / / 2024. 12. 16. 10:41

리액티브(Reactive)와 논리액티브(Non-Reactive)

리액티브(Reactive)논리액티브(Non-Reactive)프로그래밍 방식이나 시스템 동작의 차이를 설명하는 개념입니다. 이를 쉽게 설명하자면 "데이터와 요청을 처리하는 방식의 차이"라고 볼 수 있어요.


리액티브(Reactive)란?

"이벤트(데이터)의 흐름에 따라 반응하며 비동기적으로 처리하는 방식"입니다.

  • 비동기: 요청과 응답이 동시에 일어나지 않아도 기다리지 않고 다른 작업을 진행합니다.
  • Non-Blocking: 처리 시간이 오래 걸리는 작업이 있어도 멈추지 않고 다른 작업을 처리합니다.
  • 데이터 흐름 중심: 데이터나 이벤트가 들어오면 즉시 반응(React)해서 처리합니다.

📌 리액티브 방식 예시

콜센터를 떠올리면 쉬워요.

  1. 전화가 걸려오면 → 즉시 대기 중인 상담원이 전화를 받습니다.
  2. 상담원이 없으면? → 전화를 잠시 대기시킵니다.
  3. 상담원이 다시 비게 되면 대기 중인 전화를 순서대로 받습니다.

리액티브는 이렇게 "들어오는 이벤트에 반응하며 동시에 여러 작업"을 처리하는 방식이에요.


📌 리액티브 코드 예시 (JavaScript - 비동기)

console.log("1");

setTimeout(() => {  // 비동기 작업: 2초 뒤 실행
  console.log("2");
}, 2000);

console.log("3");

출력 순서:

1
3
2
  • setTimeout은 비동기적으로 작동하므로 기다리지 않고 다음 코드(3)를 실행합니다.
  • 이후 시간이 지나면 비로소 2가 출력됩니다.

논리액티브(Non-Reactive)란?

"요청을 순차적으로 처리하며 결과를 기다리는 방식"입니다.

  • 동기: 하나의 작업이 끝나야 다음 작업을 진행합니다.
  • Blocking: 작업을 처리할 동안 다른 작업을 멈추고 기다립니다.

📌 논리액티브 방식 예시

식당에서 줄 서서 주문하기를 떠올리면 쉬워요.

  1. 손님이 줄을 서고 차례대로 주문을 합니다.
  2. 앞 사람이 주문을 끝낼 때까지 다음 사람은 기다려야 합니다.
  3. 주문이 끝나면 그 다음 손님이 주문을 시작합니다.

논리액티브는 이렇게 "하나의 작업이 끝나야만 다음 작업"을 처리하는 방식이에요.


📌 논리액티브 코드 예시 (Java - 동기)

System.out.println("1");

try {
    Thread.sleep(2000); // 동기 작업: 2초 동안 기다림
} catch (InterruptedException e) {
    e.printStackTrace();
}

System.out.println("2");
System.out.println("3");

출력 순서:

1
2
3
  • Thread.sleep 때문에 코드가 2초 동안 멈추고 그 이후에 다음 코드가 실행됩니다.
  • 이게 바로 Blocking입니다.

리액티브와 논리액티브 비교

구분 리액티브(Reactive) 논리액티브(Non-Reactive)
작동 방식 비동기, Non-Blocking 동기, Blocking
동작 흐름 데이터의 흐름에 반응 순차적으로 하나씩 처리
성능 효율적, 많은 작업 동시 처리 가능 비효율적, 처리 속도가 느림
예시 콜센터(대기와 동시에 처리) 식당 줄 서기(순서대로 처리)
사용 사례 실시간 데이터, 대규모 이벤트 처리 단순하고 작은 규모의 작업

정리

  1. 리액티브

    • 비동기적으로 데이터 흐름에 반응하며 여러 작업을 동시에 처리합니다.
    • 예: 실시간 채팅, 이벤트 스트림, 대량 데이터 처리.
  2. 논리액티브

    • 동기적으로 순차적으로 하나의 작업을 끝내고 다음 작업을 처리합니다.
    • 예: 작은 규모의 요청, 단순한 데이터 처리.

리액티브는 현대의 대규모 시스템에서 필수적인 방식으로, Spring WebFlux, Node.js, RxJava와 같은 기술에서 많이 사용됩니다.

'Microservices Architecture' 카테고리의 다른 글

Correlation ID  (0) 2024.12.16
/actuator/gateway/refresh의 refresh  (0) 2024.12.16
Spring Cloud Gateway  (4) 2024.12.16
서비스 게이트웨이(Service Gateway)  (0) 2024.12.16
Netflix Zuul  (0) 2024.12.16
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유