위키득계정 ↗
기술

큐 (자료 구조)

큐 (자료 구조)기술
영문명
Queue
처리 원칙
선입선출 FIFO
추가 연산
Enqueue
제거 연산
Dequeue
대표 활용
버퍼, 작업 대기열, 너비 우선 탐색
큐는 먼저 넣은 항목을 먼저 꺼내는 자료형이다. 입력과 처리 속도를 분리하거나 순서대로 대기 중인 작업을 관리하는 데 쓰이지만, 큐에 넣는 순서와 실제 작업 완료 순서는 다를 수 있다.

앞에서 꺼내고 뒤에 넣기

A, B, C를 차례로 큐에 넣으면 일반적인 FIFO 큐에서는 A부터 꺼낸다. 새 항목은 뒤에 추가하고 제거는 앞에서 수행한다. 가장 최근 항목부터 꺼내는 스택과 구분된다.

우선순위 큐는 이름에 큐가 들어가지만 우선순위가 높은 항목을 먼저 꺼내므로 일반적인 FIFO 규칙과 다르다. 어떤 기준의 순서를 보장하는지 확인해야 한다.

순서를 유지하며 저장하는 방법

배열로 구현할 때마다 앞 항목을 삭제하고 나머지를 모두 옮기면 비용이 커질 수 있다. 원형 버퍼는 앞과 뒤의 위치를 별도로 관리하여 공간을 돌아가며 사용한다. 연결 구조를 이용하는 방법도 있다.

저장 용량이 제한된 큐가 가득 찼을 때는 추가를 거절하거나 생산자를 기다리게 하는 등 정책이 필요하다. 데이터를 버리는 선택을 한다면 무엇을 버리는지도 동작의 일부다.

대기열은 처리 능력을 늘리지 않는다

순간적으로 입력이 몰릴 때 큐는 작업을 잠시 보관할 수 있다. 그러나 장기간 입력 속도가 처리 속도보다 빠르면 대기량과 지연이 계속 늘어난다. 큐를 길게 만드는 것만으로 병목이 해결되지는 않는다.

대기 시간과 큐의 길이, 실패 및 재시도 횟수를 함께 관찰해야 한다. 재시도가 다시 부하를 만들면 원래 작업보다 더 많은 요청이 쌓일 수도 있다.

꺼낸 순서와 완료 순서

여러 작업자가 FIFO 큐에서 항목을 꺼내더라도 처리 시간이 다르면 뒤에 꺼낸 작업이 먼저 끝날 수 있다. 순서 보장은 큐에서 제거되는 시점과 최종 결과가 기록되는 시점을 나누어 살펴야 한다.

네트워크를 이용하는 작업 큐에는 확인 응답과 재전달 같은 문제도 있다. 같은 작업이 다시 전달되어도 결과가 중복되지 않도록 하는 처리가 필요한 경우가 있다. 이는 자료형으로서의 큐 정의에 더해지는 시스템 설계다.

관련 문서

자료 구조 / 스택 / 컴퓨터 망