본문 바로가기
PHP

[PHP] SplPriorityQueue로 중요 작업 먼저 처리하기

by teamnova 2025. 10. 16.
728x90

안녕하세요,

오늘은 SplPriorityQueue를 활용하여 작업 목록 중 중요 작업 먼저 처리하는 방법을 알아보겠습니다. 

 

SplPriorityQueue

일반적인 대기열(Queue)은 선입선출(FIFO) 방식으로 작업을 처리합니다.

하지만 '긴급 문의'처럼 다른 것보다 먼저 처리해야 할 중요한 작업이 있는 경우, SplPriorityQueue를 사용하여 먼저 처리할 수 있습니다. 
SplPriorityQueue는 PHP의 SPL(Standard PHP Library)이 제공하는 자료구조입니다.

 

데이터를 큐에 넣을(insert) 때, 데이터와 함께 '우선순위'를 숫자로 지정할 수 있습니다.

데이터를 꺼낼(extract) 때 SplPriorityQueue는 들어온 순서와 상관없이, 지정된 우선순위가 가장 높은 데이터를 먼저 돌려줍니다.

 

 

예시 

 

- 일반 큐 (SplQueue) 동작 방식 

먼저 일반적인 큐의 동작을 보겠습니다. 들어간 순서 그대로 나오는 것을 확인할 수 있습니다.

<?php

$queue = new SplQueue();

// 큐에 데이터를 순서대로 넣음
$queue->enqueue('[일반] 뉴스레터 발송');
$queue->enqueue('[긴급] 서버 장애 알림');
$queue->enqueue('[일반] 광고 이메일 전송');

echo "--- 일반 큐 작업 처리 순서 ---\n";
while (!$queue->isEmpty()) {
    echo "처리: " . $queue->dequeue() . "\n";
}
?>

 

 

- SplPriorityQueue로 중요 작업 먼저 처리하기

SplPriorityQueue는 데이터를 넣을 때 insert('데이터', 우선순위) 형태로 두 번째 인자에 우선순위를 지정합니다. 숫자가 클수록 우선순위가 높습니다.

<?php

$priorityQueue = new SplPriorityQueue();

// insert('데이터', 우선순위)
$priorityQueue->insert('[일반] 뉴스레터 발송', 10);
$priorityQueue->insert('[긴급] 서버 장애 알림', 100); // 가장 높은 우선순위
$priorityQueue->insert('[일반] 광고 이메일 전송', 1);

echo "\n--- 우선순위 큐 작업 처리 순서 ---\n";
while ($priorityQueue->valid()) {
    echo "처리: " . $priorityQueue->current() . "\n";
    $priorityQueue->next();
}
?>

 

 

실행 결과

SplPriorityQueue는 넣은 순서와 관계없이 '긴급' 작업을 가장 먼저 처리하는 것을 확인할 수 있습니다. 

- 일반 큐(SplQueue) 결과:

--- 일반 큐 작업 처리 순서 ---
처리: [일반] 뉴스레터 발송
처리: [긴급] 서버 장애 알림
처리: [일반] 광고 이메일 전송


 

- 우선순위 큐(SplPriorityQueue) 결과:

--- 우선순위 큐 작업 처리 순서 ---
처리: [긴급] 서버 장애 알림
처리: [일반] 뉴스레터 발송
처리: [일반] 광고 이메일 전송