당신의 하드디스크는 지급준비율 0%의 부실 은행이다 morgan021 2025. 11. 28.
> _
여기, 아주 흥미로운 마법이 하나 있다. 당신이 지금 당장 명령 프롬프트를 열고 fsutil 명령어를 입력해 10GB짜리 파일을 생성한다고 가정해 보자. 엔터키를 누르는 그 찰나의 순간, 손가락이 키보드에서 떼어지기도 전에 파일 생성이 완료된다. 1GB도 아니고 무려 10GB다. 물리적으로 0이라는 데이터를 100억 개 넘게 디스크에 기록하려면 아무리 빠른 NVMe SSD라도 최소한의 물리적 시간이 필요하다. 하지만 윈도우는 단 1초, 아니 0.1초 만에 "여기 10GB 파일이 준비되었습니다"라며 시치미를 뚝 뗀다.
이것은 기술이라기보다는 정교한 금융 사기에 가깝다. 당신이 겪은 이 현상은 운영체제(OS)가 구사하는 가장 기초적이면서도 강력한 '신용 창출(Credit Creation)' 기술이다. 경제학에서 은행이 실제 금고에 있는 현금보다 훨씬 많은 돈을 대출해 주며 자본을 불리는 것처럼, 운영체제 역시 실제 디스크 공간(현금)을 쓰지 않고도 거대한 파일(대출금)을 만들어낸다. 우리는 이것을 '희소 파일(Sparse File)'이라 부르지만, 실상은 '공수표'나 다름없다.
이 마법의 비결은 '게으름'에 있다. 당신이 10GB 파일을 달라고 했을 때, 운영체제는 실제로 0을 10GB만큼 쓰지 않는다. 그저 파일 시스템이라는 장부(Ledger)에 "이 파일은 10GB짜리다"라고 숫자만 적어 넣을 뿐이다. 은행 창구 직원이 전산망에 '100억 원 입금'이라고 타이핑하는 순간, 실제 현금 수송차가 오지 않아도 당신의 통장 잔고가 늘어나는 것과 완벽하게 동일한 원리다.

통장 잔고와 금고 안의 현금: 탐색기가 보여주는 숫자의 기만
윈도우 탐색기를 열어 방금 만든 파일을 우클릭하고 '속성'을 확인해 보라. '크기'는 분명 10GB로 찍혀 있을 것이다. 하지만 그 바로 아래, 괄호 쳐진 작은 글씨나 고급 설정에서 볼 수 있는 '디스크 할당 크기'를 주목해야 한다. 거기엔 놀랍게도 0바이트, 혹은 기껏해야 몇 킬로바이트 정도의 아주 미미한 숫자만 적혀 있을 것이다.
여기서 '크기'는 당신의 통장 잔고다. 논리적 용량(Logical Size)이라고 부른다. 시스템이 당신에게 "이만큼 쓸 수 있다"고 약속한 숫자이자, 어플리케이션들이 믿고 있는 허상이다. 반면 '디스크 할당 크기'는 은행 금고에 실제로 들어 있는 현금 뭉치다. 물리적 용량(Physical Size)이라고 부른다.
이 간극이 바로 희소 파일의 핵심이다. 운영체제는 당신에게 10GB라는 거대한 통장을 쥐여줬지만, 실제 그 통장을 뒷받침하는 현금은 10원 한 장 넣어두지 않았다. 대신 그 빈 공간에는 "여기는 비어 있음(0)"이라는 꼬리표(Metadata)만 붙여두었다. 당신이 이 파일을 열어서 읽으려고 하면, 운영체제는 그제야 꼬리표를 보고 "아, 여기는 데이터가 없으니 그냥 0을 보여주면 되겠군"이라며 즉석에서 0을 생성해 화면에 뿌린다. 당신은 10GB의 데이터가 존재한다고 믿겠지만, 그것은 시스템이 실시간으로 만들어낸 환영이다.
지급준비율 0%의 위험한 도박: OS의 배짱 영업
현실 세계의 은행은 최소한의 안전장치로 '지급준비율'이라는 것을 둔다. 고객이 돈을 찾아갈 것에 대비해 예금액의 일정 비율(예: 7%)은 반드시 중앙은행이나 금고에 현금으로 쌓아둬야 한다는 규칙이다. 하지만 운영체제라는 은행은 지급준비율이 0%다.
이것을 엔지니어링 용어로는 '씬 프로비저닝(Thin Provisioning)'이라고 포장하지만, 본질적으로는 "나중에 채워 넣으면 그만"이라는 위험한 도박이다. 운영체제는 당신이 만든 10GB 희소 파일의 모든 영역에 당장 데이터를 쓰지 않을 것이라고 확신한다. 그리고 그 확신을 바탕으로, 실제로는 없는 디스크 공간을 있는 것처럼 부풀려서 사용자에게 제공한다.
이 도박은 평상시에는 아주 훌륭하게 작동한다. 디스크 공간을 효율적으로 쓰고, 파일 생성 속도는 빛처럼 빠르며, 사용자는 넉넉한 가상 공간에 만족한다. 하지만 모든 '빚'에는 만기가 있는 법이다. 당신이 그 희소 파일의 빈 공간에 실제로 데이터를 쓰기 시작하는 순간, 운영체제는 급하게 실제 디스크 블록을 할당해야 한다. 만약 그때 디스크가 꽉 차 있다면? 은행은 파산하고, 당신의 프로그램은 'Disk Full' 오류를 뱉으며 장렬하게 전사할 것이다. 이것이 바로 지급준비율 0% 시스템이 가진 태생적 리스크다.
뱅크런 시나리오: USB 복사가 불러오는 재앙
금융 위기는 언제 오는가? 모든 예금자가 동시에 돈을 찾으러 은행으로 달려가는 '뱅크런(Bank Run)'이 발생할 때다. 희소 파일의 세계에서도 똑같은 일이 벌어진다. 그리고 그 방아쇠는 대개 '파일 복사'가 당긴다.
당신이 10GB 희소 파일을 FAT32 포맷의 싸구려 USB 드라이브에 복사한다고 상상해 보자. 혹은 희소 파일을 지원하지 않는 구형 백업 시스템으로 전송한다고 가정해 보자. 이때 대재앙이 시작된다. 복사를 시도하는 순간, 스마트했던 운영체제의 메타데이터는 무력화된다. 파일을 받는 쪽(USB)은 "희소 파일이 뭔데? 난 그런 거 몰라. 그냥 데이터 내놔."라고 요구하기 때문이다.
이 요구를 받은 운영체제는 당황하며 그동안 숨겨왔던 '빚'을 청산해야 한다. 즉, 메타데이터로만 존재했던 10GB의 빈 공간을 실제 '0'이라는 데이터로 채워서(Hydration) 전송해야 한다. 1초 만에 만들어진 가상의 파일이, 복사할 때는 실제 10GB의 물리적 쓰기 작업을 유발하는 괴물로 돌변하는 것이다.
당연히 복사 속도는 끔찍하게 느려지고, 8GB짜리 USB라면 복사 도중 용량이 가득 차 터져버린다. 사용자는 당황한다. "분명 내 컴퓨터에서는 용량을 거의 안 차지했는데, 왜 USB에 넣으려니 안 들어가는 거야?" 이것이 바로 디지털 뱅크런이다. 숨겨진 부채가 일시에 현실화되면서 시스템이 붕괴하는 현상 말이다.
신용 붕괴의 현장: 쿼터를 우회하는 지능적 범죄
이 희소 파일 메커니즘을 악용하면 시스템 관리자를 골탕 먹이는 경우도 있다. 대부분의 서버 관리자들은 사용자별로 디스크 사용량을 제한하는 '디스크 쿼터(Quota)'를 설정한다. "당신은 5GB까지만 쓸 수 있어"라고 제한을 거는 것이다.
하지만 많은 레거시 시스템이나 허술하게 짜인 감시 프로그램들은 사용자의 디스크 사용량을 계산할 때 '물리적 점유 공간'만을 체크하는 실수를 저지른다. 즉, 실제 금고에서 빠져나간 현금만 계산하고, 마이너스 통장의 한도는 계산하지 않는 것이다.
이 허점을 파고들어 1TB짜리 희소 파일을 생성해 보자. 논리적으로는 1TB지만, 물리적으로는 0바이트에 가깝다. 감시 프로그램은 이를 감지하지 못하고 통과시킨다. 이렇게 시스템 깊숙이 침투한 거대 희소 파일은 잠재적인 시한폭탄이 된다. 나중에 이 파일이 압축되거나, 암호화되거나, 포맷이 변환되는 과정을 거치면서 실제 용량으로 '수분 보충(Re-hydration)'되면, 서버의 디스크 전체를 순식간에 가득 채워 서비스 거부(DoS) 상태를 만들 수 있다. 이것은 단순한 버그가 아니라, 시스템의 신용 평가 모델을 기만하는 폰지 사기 수법과 다를 바 없다.
오직 금고 속의 현금만이 진짜다
우리는 화려한 과학 기술 시대에 살고 있다. 윈도우 탐색기가 보여주는 파일 크기, 클라우드 스토리지가 제공하는 무제한 용량, 이 모든 것은 사실 '약속된 신용'일뿐 실체가 아닐 수 있다. 운영체제는 끊임없이 우리에게 "공간은 충분하다"라고 거짓말을 하며 아슬아슬한 줄타기를 한다.
개발자라면, 그리고 시스템을 다루는 엔지니어라면 이 달콤한 거짓말에 속지 말아야 한다. ls -l이 보여주는 크기(Logical Size)를 맹신하지 마라. 실제 디스크가 감당하고 있는 무게(Physical Size)를 함게 확인하는 습관을 들여야 한다.
희소 파일은 훌륭한 최적화 기술이지만, 그 본질은 '빚'이다. 그리고 모든 빚은 언젠가 반드시 갚아야 한다. 당신의 코드가, 혹은 당신의 시스템이 그 빚을 갚아야 할 때 파산하지 않으려면, 장부상의 숫자 너머에 있는 진짜 '돈', 즉 물리적 비트의 세계를 한 구석에서는 늘 인지하고 있어야 한다. 명심하라. 은행이 망해도 금고 속의 금괴는 사라지지 않듯, 오직 물리적으로 기록된 데이터만이 진짜 당신의 것이다.
3줄 요약
- 희소 파일은 운영체제가 실제 디스크 공간(현금) 없이 논리적 용량(신용)만으로 파일을 생성하는 '지급준비율 0%'의 금융 상품과 같다.
- 윈도우 탐색기에 찍힌 용량은 장부상의 숫자일 뿐이며, 이를 다른 장치로 복사하는 순간 숨겨진 부채(실제 용량)가 폭발하는 '뱅크런'이 발생한다.
- 시스템의 효율성을 위한 이 거짓말은 디스크 할당량 제한을 우회하거나 백업 시스템을 마비시킬 수 있으므로, 엔지니어는 항상 '물리적 점유 공간'을 확인해야 한다.
'MACHINE: EXPLOIT' 카테고리의 다른 글
| 그날 우리는 디지털 신의 족쇄를 풀었다 (0) | 2025.12.09 |
|---|---|
| 왜 친절하게 학습된 AI일수록 더 위험한가 (0) | 2025.12.08 |
| 당신의 AI 비서가 순식간에 공범으로 돌변하는 이유 (0) | 2025.12.08 |
| AI 시대, 당신은 스스로 로봇이 아님을 증명할 수 있는가? (0) | 2025.12.03 |
| "자연어로 코딩하세요"라는 말은 IT 역사상 가장 달콤한 사기극이다 (0) | 2025.11.29 |
| 개발자가 'AS IS'를 숭배해야 하는 진짜 이유 (0) | 2025.11.28 |
| 당신의 서버가 11줄짜리 코드에 목숨을 저당 잡힌 이유 (0) | 2025.11.28 |
| AI를 천재로 만드는 건 '자유'가 아니라 '감옥'이다 (0) | 2025.11.27 |
| AI가 멍청한 건 프롬프트 탓이 아니다. 욕심 탓이다. (0) | 2025.11.27 |
| 그 낡은 '타르볼'이 여전히 섹시한 이유? 유닉스 철학의 우아한 생존법 (0) | 2025.11.26 |