210. 비직렬 스케줄 (Non-serial Schedule) - 인터리빙 병행 실행 동시성 트랜잭션 섞임 성능 극대화 무결성 파괴 위험
핵심 인사이트: (209번 복습 및 반대) 209번에서 1명씩 일렬로 줄을 세워놨더니(직렬 스케줄) 100번째 대기자가 늙어 죽어버렸다. 사장님이 극대노해서 소리쳤다. "야! 요즘 CPU가 코어가 몇 개고 속도가 얼만데, 고기 굽는 동안 가만히 서서 구경만 하고 있냐! 고기 굽는 10분 동안 물도 끓이고 옆에서 샐러드도 썰어! T1 쿼리 한 줄 치고, T2 쿼리 두 줄 치고, T3 쿼리 한 줄 치는 식으로 1초에 1,000번씩 잘게 썰어서 미친 듯이 섞어서 짬뽕으로 돌려버려(인터리빙)!! 100명이 동시에 밥을 먹는 것처럼 느끼게 만들어서 CPU 성능을 극한까지 뽑아내란 말이야!!" 시스템의 체감 속도를 빛의 속도로 만들었지만, 지옥의 데이터 에러 문을 활짝 열어젖힌 도박판 시간표, 비직렬 스케줄이다.
Ⅰ. 섞임의 미학: 다중 프로그래밍의 힘
- 컴퓨터의 CPU는 한 번에 1개의 연산만 처리할 수 있습니다.
- 하지만 CPU 속도가 미치도록 빠르기 때문에, 트랜잭션 T1, T2, T3의 연산(쿼리)들을 아주 짧은 조각(Time Quantum)으로 잘게 썰어서,
T1 ➜ T2 ➜ T3 ➜ T1 ➜ T2순서로 빛의 속도로 번갈아 가며 실행(Context Switching)하면 인간의 눈에는 수백 개가 동시에 돌아가는 것처럼(Concurrency) 보입니다.
Ⅱ. 비직렬 스케줄 (Non-serial Schedule)의 개념 🌟
- 개념: 2개 이상의 트랜잭션이 존재할 때, 한 트랜잭션이 끝날 때까지 기다리지 않고, **여러 트랜잭션의 연산(Read, Write)들을 하나의 타임라인 위에서 엎치락뒤치락 마구잡이로 교차(Interleaving)시키며 병행하여 수행하는 스케줄(시간표)**입니다.
- 현대의 윈도우, 리눅스, 오라클, MySQL 등 모든 다중 사용자 시스템(OS/DBMS)이 기본적으로 깔고 돌아가는 필수적인 실행 뼈대입니다.
Ⅲ. 비직렬 스케줄의 찬란한 빛과 어두운 그림자 🌟 핵심 🌟
극단적인 하이 리스크 하이 리턴(High Risk, High Return)을 보여줍니다.
1. 빛: CPU 한계 돌파 (성능과 응답성 극대화)
T1이 하드디스크에서 10GB 데이터를 가져오느라 CPU가 할 일 없이 놀고 있습니다(I/O 딜레이).- 비직렬 스케줄은 이 찰나의 순간을 놓치지 않고 잽싸게
T2의 쿼리를 꺼내어 CPU를 공회전 없이 100% 빡세게 풀가동시킵니다. - 결과적으로 시간당 처리하는 트랜잭션 개수(Throughput)가 수십 배로 뻥튀기되고, 10만 명의 대기 줄(Response Time)이 마법처럼 쑥쑥 빠져 사용자 체감 속도가 우주 최강이 됩니다.
2. 그림자: 지옥의 5대 에러 오픈 (무결성 파괴) 🌟
섞어서 짰을 때의 피할 수 없는 부작용입니다. (202번 완벽 연계)
- 무작정 막 섞어버리면,
T1이 에어팟 재고(100개)를 읽어서 99개로 막 고치려는 그 아슬아슬한 틈바구니에,T2가 불쑥 난입해서 100개를 읽어가 버리는 사고가 100% 필연적으로 터집니다. - 갱신 손실(덮어쓰기), 모순성(앞뒤 다름), 오손 읽기(찌꺼기 먹기), 연쇄 복귀(도미노 붕괴), 유령 읽기(귀신 등장)라는 데이터베이스 5대 재앙(모순 상태)이 끊임없이 폭발하여 은행의 모든 잔고 데이터가 썩어 문드러집니다.
Ⅳ. 해결책은 어디에? (211번 스포일러)
- 209번 직렬 스케줄은 100% 안전하지만 너무 느려서 버렸습니다.
- 210번 비직렬 스케줄은 미치도록 빠르지만 데이터가 썩어서 버려야 합니다.
- "야! 비직렬 스케줄처럼 미친 듯이 섞어 짜서(인터리빙) 속도를 극대화하되, 그 수만 가지의 섞는 타이밍(시간표 조합) 중에서 **'데이터 에러가 절대 안 터지는 황금비율의 섞기 패턴'**만 골라내면 되잖아!!"
- 이 황금비율을 찾아내는 인류의 위대한 타협점, 그것이 다음 장에 배울 **직렬 가능 스케줄(Serializable Schedule)**입니다.
📢 섹션 요약 비유: **비직렬 스케줄(Non-serial Schedule)**은 식당 주방장이 100그릇의 요리 주문을 처리할 때 **'모든 가스레인지 불을 10개 동시에 켜놓고 냄비를 현란하게 왔다 갔다 하며 요리하는 미친 멀티태스킹 셰프'**입니다. 이 셰프는 1번 라면 물을 끓이면서(대기 시간), 노는 손으로 2번 파를 썰고, 발로는 3번 튀김기를 조작합니다(연산 인터리빙 교차). 셰프가 1초도 쉬지 않으므로 요리 나오는 속도(시스템 처리량)가 1열 종대 요리사(직렬 스케줄)보다 100배 빠르고 손님들은 환호합니다. 하지만 셰프가 너무 신들린 나머지 냄비를 막 섞어서 조리하다가, 1번 라면에 넣을 마늘을 2번 케이크에 쏟아붓고, 3번 스테이크 소스를 1번 라면에 들이붓는 대참사(데이터 모순, 갱신 손실 에러)가 밥 먹듯이 터집니다. 속도에 눈이 멀어 손님상에 끔찍한 쓰레기 짬뽕 요리를 배달하게 되는, 컨트롤이 없으면 독약으로 변하는 현대 다중 접속 환경의 아슬아슬한 광란의 스케줄러입니다.