매일같이 타는 엘리베이터? 생각보다 복잡합니다;;
"엘리베이터 한 대니까 간단하겠지. 위아래 왔다갔다 하면 되잖아?"
그렇게 생각하면 오산입니다.
출근 시간, 20층짜리 건물, 엘리베이터는 딱 한 대.
출근 시간, 로비엔 이미 사람들로 북적이고, 여기저기서 버튼을 누르는 '띡' 소리가 울려 퍼집니다. 5층에서는 누군가가 내려가는 버튼을 눌렀고, 8층에서는 누군가가 올라가고 싶다며 기다리고 있습니다. 3층, 10층, 13층에서도 호출이 들어오죠.
지금 엘리베이터는 6층에 있고, 아래로 향하고 있습니다. 누구를 먼저 태우고, 어디에 먼저 도착해야 할까요?
그때부터 시작됩니다. 단순한 버튼 입력이 "누굴 먼저 도와줄 것인가", "누굴 기다리게 만들 것인가"로 바뀌는 순간, 엘리베이터는 단순한 기계가 아니라 우선순위를 조율하는 스케줄러가 됩니다. 어떻게 하면 공평하면서도 효율적으로 이 문제를 해결 할 수 있을까요?
가장 쉬운 방식: 먼저 누른 순서대로 (FCFS)
가장 단순한 방식은 First-Come, First-Served, 즉 먼저 호출한 순서대로 처리하는 것입니다.
- 예: 3층, 8층, 2층 순으로 호출이 들어오면, 그 순서대로 이동합니다.
문제는? 효율 따윈 없습니다. 지금 6층에 있는데, 2층이 가까워도 무시하고 8층까지 가야 합니다. 누군가에게는 "왜 얘 먼저 태워?" 라는 불만만 남습니다.
다양한 알고리즘: 사용자 입장에서 직접 느껴보자
같은 상황: 엘리베이터는 6층, 요청은 3층(하), 8층(상), 2층(하), 10층(상)
도식 예시
층 | 요청 | 비고
---------------------
10 | ▲ | 상행 요청
9 | |
8 | ▲ | 상행 요청
7 | |
6 | ◎ | 현재 위치
5 | |
4 | |
3 | ▼ | 하행 요청
2 | ▼ | 하행 요청
1 | |
이제 각 알고리즘은 이 상황을 어떻게 처리할지 살펴보겠습니다.
1. SSTF (가장 가까운 요청 먼저)
→ 지금 6층이니까, 8층(상)이 가장 가깝죠. 그다음 10층, 그리고 내려가면서 3층, 2층.
체감: 빠르긴 한데, 2층에서 먼저 누른 사람은 10분째 기다리는 중. 짜증 납니다.
사용자 반응 시뮬레이션: "아니 내가 먼저 누른 거 같은데, 왜 얘를 먼저 태워줘? 뭐야 이거..."
2. SCAN (한 방향으로 쭉 돌고 반대 방향)
→ 현재 내려가는 중이면, 먼저 아래층 요청을 모두 처리하고, 맨 아래까지 간 후 다시 올라갑니다.
체감: "엘리베이터가 왜 위에 있다가 안 내려오고 계속 위로만 가?" 하지만 순서대로 잘 오긴 합니다. 기다리긴 해도 납득 가능한 시스템.
사용자 반응 시뮬레이션: "기다리긴 했지만, 그래도 얘는 나중에 눌렀으니 내가 먼저 타는 게 맞지."
3. LOOK (요청 있는 곳까지만 이동)
→ SCAN에서 불필요한 움직임 제거. 예를 들어 2층까지 요청 있으면 2층까지만 갔다가 다시 위로.
체감: "기다리는 시간은 좀 있지만, 이해는 됨." 불필요하게 엘리베이터가 1층까지 내려가진 않아서 효율적.
사용자 반응 시뮬레이션: "그래도 내가 요청한 층까지 오긴 하네. 그냥 좀만 더 기다리자."
4. C-SCAN (한 방향만 돈다)
→ 올라가면서만 사람 태움. 내려갈 때는 아무도 안 태우고 다시 처음으로 돌아감.
체감: "왜 5층에서 안 태워주고 그냥 지나쳐?" 기계적인 공정함은 있지만, 사용자는 답답함.
사용자 반응 시뮬레이션: "지금 비어있는데도 안 태워준다고? 무슨 기계야 이건."
알고리즘, 사용자 입장에서 보면 이렇게 다릅니다
| 알고리즘 | 사용자 체감 | 장점 | 단점 |
|---|---|---|---|
| FCFS | 불공정함, 비효율 | 구현 간단 | 대기시간 길어짐 |
| SSTF | 빠르긴 함, 짜증도 남 | 짧은 거리 우선 | 멀리 있는 요청 무시됨 |
| SCAN | 좀 느림, 납득감 있음 | 공정함 | 불필요한 이동 |
| LOOK | 적당히 빠르고 납득감 | 효율적, 납득 가능 | 구현 복잡도 약간 ↑ |
| C-SCAN | "왜 날 무시해?" | 대기시간 예측 쉬움 | 체감상 차별적 |
실제 엘리베이터는 어떤 걸 쓸까?
현실에서는 SCAN과 LOOK의 변형을 가장 많이 씁니다. 특히 아파트나 중층 빌딩에서는 SCAN 기반이 많고, 고층 상업 건물에서는 목적지 기반(Destination Dispatch)이 점점 도입되는 추세입니다.
그리고 최근엔 AI 기반 예측 시스템도 사용됩니다. 평일 아침이면 위쪽에서 요청이 몰린다는 걸 알고 미리 엘리베이터를 대기시켜두는 식입니다.
결론
엘리베이터 한 대라고 만만하게 보면 안 됩니다. 그 한 대가 수십 명의 기다림을 조율해야 하고, 누굴 먼저 태우느냐는 곧 공정성과 효율성의 문제로 연결됩니다.
간단한 상황도 알고리즘 하나에 따라 사람의 인상, 대기시간, 짜증까지 완전히 달라집니다. 당신이 타는 그 한 대에도, 보이지 않는 우선순위 알고리즘이 숨 쉬고 있습니다.