ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toFrontend
์๋ฌธ ์ฝ๊ธฐ
Browser-based WAL ๊ตฌํ์ ํตํ ๋ชจ๋ฐ์ผ I/O ๋ฐ์ดํฐ ์ ์ค ์ ๋กํ
I Accidentally Wrote a Filesystem Driver. For a Browser. ๐ค
AI ์์ฝ
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 ํจํด ์ ์ฉ ๊ณ ๋ ค