IndexedDB ๊ธฐ๋ฐ WAL ํจํด ๋์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ฐ์ดํฐ ํ๋ฐ์ฑ ํด๊ฒฐ
Gnoke Persist: Your Browser Has Short-Term Memory Loss. I Fixed It. ๐
AI ์์ฝ
Context
๋ชจ๋ฐ์ผ ํ๊ฒฝ์ OS ๋ฆฌ์์ค ๊ด๋ฆฌ ์ ์ฑ ์ ๋ฐ๋ฅธ ๋ธ๋ผ์ฐ์ ํญ ๊ฐ์ ์ข ๋ฃ์ ์ด๋ก ์ธํ ์ ๋ ฅ ๋ฐ์ดํฐ ์์ค ๋ฌธ์ ๋ฐ์. ๊ธฐ์กด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ State ๊ด๋ฆฌ ๋ฐฉ์์ด ํ๋ก์ธ์ค ์ข ๋ฃ ์ ์ ์ง๋์ง ์๋ ํ๋ฐ์ฑ ๊ตฌ์กฐ์ธ ์ ์ ํ๊ณ๋ก ๋ถ์.
Technical Solution
- Debounced listener ๊ธฐ๋ฐ input ์ด๋ฒคํธ ๊ฐ์ง๋ฅผ ํตํ Form State์ IndexedDB ์ค์๊ฐ ๋๊ธฐํ ๊ตฌ์กฐ ์ค๊ณ
- ๋ฐ์ดํฐ ์ฐ๊ธฐ ์์ ์ IndexedDB์ ๋จผ์ ๊ธฐ๋กํ๋ Write-Ahead Logging(WAL) ์ ๋ต์ ํตํ ์ฐ๊ธฐ ๋ด๊ตฌ์ฑ ํ๋ณด
- FileSystemDirectoryHandle์ IndexedDB์ ์ ์ฅํ์ฌ ๋ฆฌํ๋ ์ ํ์๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์งํ๋ Handle Re-acquisition ๋ก์ง ๊ตฌํ
- visibilitychange ์ด๋ฒคํธ๋ฅผ ํ์ฉํ ํ๋ก์ธ์ค ์ข ๋ฃ ์ง์ ์ต์ข ์ํ ๋๊ธฐํ ์๋
- NotAllowedError ๋ฐ์ ์ User Gesture๋ฅผ ํตํด ๊ถํ์ ์ฌํ๋ํ๊ณ WAL ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก Flushํ๋ ์ค์ผ์คํธ๋ ์ด์ ๋ ์ด์ด ๊ตฌ์ถ
- password, token ๋ฑ ๋ฏผ๊ฐ ์ ๋ณด ํ๋๋ฅผ ์ ์ธํ๋ Privacy Filter ์ ์ฉ์ ํตํ ๋ณด์์ฑ ์ ์ง
์ค์ฒ ํฌ์ธํธ
- ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์์ค ๋ฐฉ์ง๋ฅผ ์ํด LocalStorage๋ณด๋ค ์ฉ๋๊ณผ ์ฑ๋ฅ์ด ์ฐ์ํ IndexedDB ๊ธฐ๋ฐ์ State Persistence ๊ฒํ - ์ธ๋ถ API๋ ๋์คํฌ ์ฐ๊ธฐ ์์ ์ crash ๋์์ ์ํด Write-Ahead Logging ํจํด ์ ์ฉ ๊ณ ๋ ค - ๋ธ๋ผ์ฐ์ ๋ณด์ ์ ์ฑ ์ ์์ค๋๋ File Handle์ ์ฌํ๋์ ์ํด User Gesture ๊ธฐ๋ฐ์ ๊ถํ ๋ณต๊ตฌ ํ๋ก์ธ์ค ์ค๊ณ
ํ๊ทธ