큐?
리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트. 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되므로 선입 선출(先入先出)인 FIFO(first in first out) 리스트라고 한다.
[네이버 지식백과] 큐 [queue] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 전산용어사전편찬위원회)
- 무엇인가
- 일반 명사 : 대기 행렬, (무엇을 기다리는 사람·자동차 등의) 줄, 줄을 서서 기다리다
- 고유 명사 : 선입 선출 구조(First In First Out)로 먼저 삽입된 자료부터 출력 혹은 삭제되는 리스트 형태의 자료구조스택의 후입선출(LIFO) 특성이 필요한 곳에 사용한다.
- 왜 사용하는가?
- 비동기 프로세스
Queue는 즉시 실행할 필요가 없는 프로세스를 처리하기 적합하다. 메인 앱의 실행을 방해하지 않고, 메일을 보내거나, 대용량 파일을 전송하거나, 보고서를 생성할 때 Queue는 유용하다.
- 부하 분산
Queue는 여러 작업자들과 서비스에 걸쳐 작업 부하를 분산시키는 데 도움을 준다. 특히,작업에 계산이 많이 필요하거나, 시간이 많이 걸리는 시나리오에서 유용하다.
- 확장성
작업을 생성하는 컴포넌트와 그 작업을 실행하는 컴포넌트를 분리함으로써, 시스템 확장을 효과적으로 만들 수 있다. 웹서버의 성능에 영향을 주지 않고, 많은 작업자들을 queue에 추가하여, 증가된 작업 부하를 처리할 수 있다.
- 신뢰성
큐는 이벤트 실패 시, 작업이 손실되지 않도록 보장함으로써, 시스템의 신뢰성을 향상시킬 수 있다. 작업 실행 중 실패가 발생하면, 다른 작업자에게 해당 작업을 재할당할 수 있다.
- 속도 제한
Queue는 작업 속도를 관리하는 데 도움을 줌으로써, 시스템 과부하를 방지하고, 자원을 효율적으로 관리 할 수 있다.
- 장단점
- 장점
- 사용자 경험 개선
큐는 사용자 인터페이스를 느리게 할 수 있는 작업을 백그라운드에서 처리함으로써, 부드럽고 반응이 좋은 사용자 경험을 유지하는 데 도움이 된다.
- 성능 향상
큐는 무거운 작업을 백그라운드 작업자에게 넘김으로써, 전반적인 웹 애플리케이션 성능을 향상시킬 수 있다.
- 자원 관리의 유연성
수요에 따라 작업자를 확장할 수 있는 큐는 자원 관리에 유연한 접근 방식을 제공한다. 이는 비용 절감과 효율성 향상으로 이어질 수 있다.
- 단점
- 복잡성
큐 시스템을 구성하면 시스템 아키텍쳐에 추가적인 복잡성이 도입된다. 이는 큐 인프라를 관리하고 작업이 올바르게 처리되는지 확인하는 작업이 필요해진다.
- 지연 시간
큐는 비동기 처리를 가능하게 하지만, 지연 시간이 생길 수 있다. 예를 들어, 큐에 있는 작업이 후속 작업에 필수적인 경우 전체 프로세스가 지연될 수 있다.
- 지원 오버헤드
큐 서버와 작업자를 운영하고 유지하는 데 추가 자원과 오버헤드가 필요하다.
- 어떻게 사용하는가
- 스택의 추상 자료형
- enqueue() : 데이터 삽입
- dequeue() : 데이터 제거
- front() : 데이터 참조 (가장 먼저 들어간 데이터 참조)
- isEmpty() : 비어있는지 체크
- 자바스크립트 코드로 큐 만들어보기
이전 글 [자료구조] - 양방향 연결리스트, https://steadyg.tistory.com/37 에서 만들었던, DoublyLinkedList를 통해서,
Stack을 만들어보았다.
import { DoublyLinkedList } from './DoublyLinkedList.mjs';
class Queue {
constructor() {
this.list = new DoublyLinkedList();
}
enqueue(data) {
this.list.insertAt(0, data);
}
dequeue() {
try {
return this.list.deleteLast();
} catch (e) {
console.log(e);
}
}
front() {
return this.list.tail;
}
isEmpty() {
return this.list.count === 0;
}
}
export { Queue };
참조한 글들
- https://blog.naver.com/justkukaro/220510730704 (자세하게 설명되어 있음. 추가 공부 필요)
- https://hyunipad.tistory.com/96
- https://terms.naver.com/entry.naver?docId=834442&cid=42344&categoryId=42344
- chatGPT
- 인프런 감자 강좌, https://www.inflearn.com/users/17036/@%EA%B0%90%EC%9E%90