ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
I Accidentally Wrote a Filesystem Driver. For a Browser. ๐Ÿค”
Dev.toDev.to
Frontend

Browser-based WAL ๊ตฌํ˜„์„ ํ†ตํ•œ ๋ชจ๋ฐ”์ผ I/O ๋ฐ์ดํ„ฐ ์œ ์‹ค ์ œ๋กœํ™”

I Accidentally Wrote a Filesystem Driver. For a Browser. ๐Ÿค”

Ekong Ikpe2026๋…„ 5์›” 3์ผ4๋ถ„advanced

Context

File System Access API ๊ธฐ๋ฐ˜ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ OS์˜ Background Process Kill๋กœ ์ธํ•œ ์“ฐ๊ธฐ ์ž‘์—… ์ค‘๋‹จ ๋ฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฐœ์ƒ. API ์ž์ฒด์˜ Serialization ๋ถ€์žฌ๋กœ ์ธํ•œ Race Condition๊ณผ Stale File Handle ๋ฌธ์ œ ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ๋Ÿฐํƒ€์ž„์˜ ์‹œ์Šคํ…œ์  ํ•œ๊ณ„ ์ง๋ฉด.

Technical Solution

  • Write-Ahead Logging(WAL) ์›๋ฆฌ๋ฅผ ์ ์šฉํ•œ Write-ahead buffer ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์“ฐ๊ธฐ ๋‚ด๊ตฌ์„ฑ ํ™•๋ณด
  • Per-filename Queue ๋„์ž…์œผ๋กœ I/O ์š”์ฒญ์˜ ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ ๋ฐ Race Condition ์›์ฒœ ์ฐจ๋‹จ
  • IndexedDB๋ฅผ Fallback Shelf๋กœ ํ™œ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ์ €์žฅํ•˜๋Š” ์•ˆ์ •์„ฑ ๊ณ„์ธต ๊ตฌ์ถ•
  • App Wake ์‹œ์ ์— Shelf์— ์ €์žฅ๋œ ๋ฏธ์™„๋ฃŒ ์“ฐ๊ธฐ ์ž‘์—…์„ ์žฌ์‹คํ–‰ํ•˜๋Š” Recovery Mechanism ๊ตฌํ˜„
  • Browser Runtime์„ ๋‹จ์ˆœ UI Layer๊ฐ€ ์•„๋‹Œ OS Kernel ์ˆ˜์ค€์˜ I/O ๊ด€๋ฆฌ ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•œ ์•„ํ‚คํ…์ฒ˜ ์žฌ์„ค๊ณ„

- ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์“ฐ๊ธฐ ์‹œ Process Lifecycle์— ๋”ฐ๋ฅธ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ†  - ๋น„๋™๊ธฐ I/O ์ž‘์—…์˜ ์ˆœ์ฐจ ๋ณด์žฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ API ์ˆ˜์ค€์˜ ์˜์กด์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ  ์ž์ฒด Queueing Layer ๊ตฌ์ถ• - Crash Recovery๊ฐ€ ํ•„์ˆ˜์ ์ธ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ IndexedDB๋ฅผ ํ™œ์šฉํ•œ WAL ํŒจํ„ด ์ ์šฉ ๊ณ ๋ ค

์›๋ฌธ ์ฝ๊ธฐ