This lesson is only available in Korean for now.
Lesson 11 of 20

주문 큐 — 밀려드는 일을 순서대로 처리하기

선착순이 공정할까? 급한 주문은 어떻게 하지?

주문 큐 — 밀려드는 일을 순서대로 처리하기
일이 들어오는 속도보다 처리 속도가 느리면 줄이 생깁니다. 그 줄을 어떻게 관리하느냐가 알고리즘이에요.

오전 10시, 타임세일이 시작됐습니다. 1분에 3,000건의 주문이 들어오는데, 서버는 1분에 800건밖에 처리하지 못합니다.

이때 선택지는 셋입니다.

  • 거절한다 — "잠시 후 다시 시도해 주세요" (손님이 떠남)
  • 기다리게 한다 — 대기열에 넣고 순서대로 처리 ✅
  • 그냥 다 받는다 — 서버가 죽음 💀

정답은 두 번째, 큐(queue)입니다.

deque 는 앞뒤 모두 O(1). 리스트의 pop(0)은 O(n)이라 큐에 부적합합니다.
Python Runs in your browser
같은 큐, 자료구조 하나 바꿨을 뿐인데.
Python Runs in your browser

선착순이 항상 공정할까요?

이런 상황을 생각해 봅시다. 대기열에 이런 일들이 섞여 있습니다.

  • 일반 주문 500건
  • 결제 취소 요청 3건 — 늦으면 고객 항의가 폭발합니다
  • 서버 상태 점검 1건 — 이게 늦으면 장애를 못 알아챕니다

선착순으로 하면 결제 취소가 500건 뒤에 처리됩니다. 그래서 필요한 것이 우선순위 큐(priority queue)예요.

우선순위 큐 = 힙. 급한 일이 새치기하되, 동점이면 선착순.
Python Runs in your browser

🎮 주문 처리 대기열 시뮬레이터

주문 유입 속도와 서버 처리 속도를 조절해 보세요. FIFO와 우선순위 큐를 전환하면 급한 주문의 대기 시간이 얼마나 달라지는지 보입니다. 유입이 처리보다 빠르면 대기열이 폭발합니다 — 꼭 만들어 보세요.

주문 처리 대기열 — 유입 속도를 올려 큐를 터뜨려 보세요
Loading…

큐가 알려 주는 것 — 대기열 길이는 최고의 지표

시스템 관리자에게 대기열 길이는 체온계입니다.

대기열 상태의미조치
0에 가깝게 유지여유 있음정상
오르내리지만 결국 0순간 몰림을 잘 흡수 중정상
계속 늘어남처리 속도 < 유입 속도🚨 처리기 증설 · 유입 제한(17강)
꽉 차서 거절 발생이미 장애🚨 긴급 대응

"CPU 사용률 60%인데 서비스가 느려요"의 답이 대개 여기 있습니다. CPU가 아니라 큐를 보세요.

🤔 Check yourself
파이썬 리스트를 큐로 쓰면서 pop(0)을 쓰면 생기는 문제는?
🤔 Check yourself
우선순위 큐에 항목을 (우선순위, 순번, 내용) 형태로 넣는 이유는?
🤔 Check yourself
대기열 길이가 계속 늘어나기만 한다면 어떤 상태일까요?