index

밀 것인가, 당길 것인가

· 13min

밀 것인가, 당길 것인가

전화와 문자의 차이

친구가 소식을 전하는 두 가지 방법이 있다.

첫 번째: 갑자기 전화가 온다. “야, 나 합격했어!” → 즉각적이다. 하지만 내가 뭘 하고 있든 끊긴다.

두 번째: 문자가 온다. 나중에 시간 날 때 확인한다. → 내 타이밍이다. 하지만 늦게 알 수도 있다.

이게 PushPull의 전부다.

💡 Push / Pull

**Push** = 밀다. 정보가 나에게 "밀려온다".

**Pull** = 당기다. 내가 정보를 "당겨온다".

시스템 설계의 가장 근본적인 선택지 중 하나다.


코드에서 질문이 생겼다

분산 시스템을 설계하다 보면 항상 이 질문을 만난다.

Webhook vs Polling?
Event-driven vs Request-response?
Kafka consumer: push or pull?

“언제 밀고, 언제 당겨야 하지?”

이 질문을 파고들었다. 뇌과학, 인지과학까지 연결해보려고 찾아보는 게 흥미로웠다.


황금비의 비밀

2011년, Van Houdt는 분산 시스템에서 Push와 Pull을 수학적으로 비교했다[1].

결론은 단순하다:

한가하면 Push, 바쁘면 Pull

graph LR
    subgraph 부하 낮음
        A["🚀 Push 효율 ↑"]
    end
    subgraph 경계점
        B["⚖️ ~60%"]
    end
    subgraph 부하 높음
        C["🎯 Pull 효율 ↑"]
    end
    A --> B --> C

구체적으로 생각해보자:

시나리오부하최적 전략이유
서버 100대, 요청 30개/초30%Push여유로우니 미리 알려두는 게 이득
서버 100대, 요청 80개/초80%Pull바쁘니 필요할 때만 찾는 게 이득

직관적으로도 맞다. 한가할 때는 바로바로 알려주는 게 좋지만, 바쁠 때는 “필요할 때 가져가”가 낫다.

🔬 수학적 배경 (접기/펼치기)

λ(람다)란?

λ=단위 시간당 요청 수시스템 처리 용량\lambda = \frac{\text{단위 시간당 요청 수}}{\text{시스템 처리 용량}}
  • λ=0.3\lambda = 0.3 → 시스템이 30% 사용 중
  • λ=0.9\lambda = 0.9 → 시스템이 90% 사용 중 (과부하 직전)

황금비와의 연결

Van Houdt의 분석 결과:

Push가 우월    λ<φ10.618\text{Push가 우월} \iff \lambda < \varphi - 1 \approx 0.618

여기서 φ=1+521.618\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618황금비다.

💡 황금비 (Golden Ratio)

자연과 예술에서 반복적으로 나타나는 비율.

피보나치 수열의 극한값이기도 하다.

분산 시스템의 최적점에서도 등장한다니, 신기하다.

⚠️ 모델의 한계

이 0.618이라는 숫자는 특정 가정 하에서 도출됐다:

논문의 가정현실
균등 분포 — 모든 노드에 요청이 고르게파레토/멱법칙 — 소수가 대부분 트래픽
랜덤 그래프 — 노드 간 연결이 무작위계층적/클러스터링 — 실제 네트워크는 구조적
동질적 시스템 — 모든 노드가 동일이질적 — 노드마다 성능 차이

결론: 0.618은 참고값일 뿐, 시스템마다 경계점은 다르다.

하이브리드는 답이 아니다?

흥미로운 발견: Van Houdt는 하이브리드 전략(Push+Pull 혼합)이 순수 전략보다 항상 열등하다고 증명했다[1].

“단순히 섞는다고 좋아지지 않는다”

이건 직관에 반하지만, 최소한 이 모델에서는 그렇다. 런타임에 전략을 전환하는 오버헤드가 있기 때문이다.

최신 연구 동향 (2024-2025)

연구접근법핵심 아이디어
ClusterBalance (2025)[7]실시간 클러스터링워크로드 패턴을 분석해 동적 분배
ALB-TP (2025)[8]예측 기반GRU-Attention으로 트래픽 예측 후 전략 결정
DeFlow (2024)[9]플로우 크기별 차별화대용량은 throughput, 소용량은 latency 최적화

최신 연구들은 **“상황을 예측해서 미리 전략을 선택”**하는 방향으로 가고 있다. 런타임 전환보다 예측이 효율적이라는 것이다.


뇌가 먼저 알았다

재밌는 건, 우리 뇌도 Push/Pull로 작동한다.

인지과학에서는 이걸 외인성/내인성 주의라고 부른다[2].

구분Push (외인성)Pull (내인성)
영어Exogenous AttentionEndogenous Attention
작동자극이 주의를 “끌어감”내가 주의를 “보냄”
속도~100ms~300ms
특징반사적, 자동적의도적, 유연함
texogenous100mstendogenous300mst_{\text{exogenous}} \approx 100\text{ms} \quad \ll \quad t_{\text{endogenous}} \approx 300\text{ms}

Push가 3배 빠르다. 뇌가 외부 자극에 먼저 반응하도록 설계된 것이다. 생존에 유리하니까.

호랑이가 나타나면 “생각”하기 전에 “반응”해야 한다.

하지만 대가가 있다:

💡 Notification Fatigue (알림 피로)

과도한 Push 알림이 인지 부하를 높이고,

결국 무시하거나 비활성화하게 만드는 현상이다.

연구에 따르면[3]:

  • 시간당 10개 이상 알림 → 응답률 52% 하락
  • 2020년 이후 알림량 97% 증가
  • 사용자의 **47%**가 첫 주 내에 알림을 꺼버림

뇌는 Push에 빠르게 반응하지만, 과부하가 오면 시스템을 꺼버린다.


1953년, 슈퍼마켓에서

Toyota의 Taiichi Ohno는 미국 슈퍼마켓을 보고 깨달았다[4].

“고객이 선반에서 물건을 당겨간다. 빈 자리가 생기면 그때 채운다. 미리 밀어넣지 않는다.”

이게 Pull 시스템의 시작이다.

💡 Kanban (칸반)

일본어로 "신호판"이라는 뜻이다.

필요할 때만 생산을 시작하는 Pull 기반 시스템.

Toyota Production System의 핵심이다.

Push 생산: 예측해서 미리 만들어 둠 → 재고 쌓임 Pull 생산: 필요할 때 만듦 → 낭비 최소화

소프트웨어 개발에서도 마찬가지다:

PushPull
매니저가 태스크 할당개발자가 백로그에서 선택
스프린트 시작 전 모든 계획 확정WIP 제한 내에서 유동적으로
예측 기반수요 기반

트레이드오프 지도

                    타이밍 중요


         Webhook ────────┼──────── Push Notification

    제어권 ←─────────────┼─────────────→ 즉시성

         Polling ────────┼──────── Long Polling


                    제어권 중요
패턴Push/Pull언제 쓰나
WebhookPush이벤트 발생 즉시 알아야 할 때
SSEPush서버 → 클라이언트 단방향 스트림
PollingPull간단하고 클라이언트가 제어하고 싶을 때
Long Polling하이브리드실시간성과 호환성 둘 다 필요할 때
Kafka ConsumerPull소비자가 자기 속도로 처리할 때

핵심 격언:

“Use push when timing matters. Use pull when control matters. Combine both when resilience matters.”


Observer에서 Pub/Sub으로

코드 레벨에서도 Push/Pull이 진화했다.

Observer 패턴 (1994, GoF):

Subject ──직접 알림──→ Observer
  • 둘이 서로를 안다
  • 동기적이다
  • 같은 프로세스 안에서 동작한다

Pub/Sub 패턴:

Publisher ──→ [Broker] ──→ Subscriber
  • 서로 모른다
  • 비동기적이다
  • 분산 환경에서 동작한다
💡 Decoupling (디커플링)

컴포넌트 간 의존성을 줄이는 것.

Observer → Pub/Sub으로 가면서 디커플링이 강해졌다.

진화의 방향:

CouplingBroker 도입Decoupling비동기화Resilience\text{Coupling} \xrightarrow{\text{Broker 도입}} \text{Decoupling} \xrightarrow{\text{비동기화}} \text{Resilience}

Polling vs Interrupt

하드웨어 레벨에서도 같은 고민이 있다[5].

Polling (Pull)Interrupt (Push)
방식CPU가 계속 확인장치가 CPU에 신호
장점단순함, 예측 가능효율적, 즉각적
단점CPU 낭비복잡함, 경쟁 조건
// Polling
while (true) {
    if (device_ready()) {
        process();
    }
}

// Interrupt
void ISR() {  // Interrupt Service Routine
    process();
}

“Interrupt가 더 효율적이지만, Polling이 더 예측 가능하다.”

현대 시스템은 둘을 섞는다. 기본은 Interrupt, 과부하 시 Polling으로 전환하는 Interrupt Coalescing 같은 기법이 있다.


인간은 Pull을 원한다

2024년 HCI 연구[6]가 재밌는 걸 발견했다.

Proactive(Push) 모드: 성능 ↑, 인지 부하 ↓ Reactive(Pull) 모드: 성능 ↓, 하지만 사용자가 선호

효율은 Push가 높다. 하지만 인간은 통제감을 원한다.

User Satisfaction=f(Efficiency,Control)\text{User Satisfaction} = f(\text{Efficiency}, \text{Control})

효율만 높인다고 만족도가 올라가지 않는다. 통제감이 떨어지면 불안해진다.

그래서 최고의 시스템은:

  1. 기본은 Pull — 사용자가 원할 때 정보를 가져감
  2. 중요한 건 Push — 긴급한 것만 밀어넣음
  3. 제어권 제공 — 언제, 어떻게 받을지 선택하게 함

마치며

Webhook을 붙이다가 시작된 질문이 황금비와 뇌과학까지 이어졌다.

**“밀 것인가, 당길 것인가”**는 단순한 기술 선택이 아니다.

  • 수학적으로는 부하율과 황금비의 관계
  • 인지적으로는 반사 vs 의도의 균형
  • 철학적으로는 효율 vs 통제의 트레이드오프

Toyota의 Ohno가 슈퍼마켓에서 본 것, Van Houdt가 수식으로 증명한 것, 인지과학자들이 뇌에서 발견한 것 — 결국 같은 이야기다.

타이밍이 중요하면 민다. 통제가 중요하면 당긴다. 회복력이 중요하면 섞는다.

시스템도, 조직도, 뇌도 이 원칙을 따른다.


참고

[1] B. Van Houdt, “A Fair Comparison of Pull and Push Strategies in Large Distributed Networks”, IEEE/ACM QEST, 2011

[2] Carrasco, M., “Differential impact of endogenous and exogenous attention on activity in human visual cortex”, Scientific Reports, 2020

[3] Morrison et al., “The Effect of Timing and Frequency of Push Notifications”, PLOS ONE, 2017

[4] Ohno, T., “Toyota Production System: Beyond Large-Scale Production”, Productivity Press, 1988

[5] Silberschatz et al., “Operating System Concepts”, Wiley, 10th Edition

[6] de Jong et al., “Comparison of proactive and reactive interaction modes”, Applied Ergonomics, 2024

[7] “Cluster Balance: Adaptive Load Balancing in Distributed Systems via Real-Time Clustering”, ResearchGate, 2025

[8] “ALB-TP: Adaptive Load Balancing based on Traffic Prediction using GRU-Attention for Software-Defined DCNs”, Journal of Network and Computer Applications, 2025

[9] “DeFlow: Differential flowlet switching for load balancing in datacenter networks”, Computer Networks, 2024


  • [[bsp-parallel-model]]
  • [[moc-ai-agent]]