** ๐Ajax ์ฌํ ์ด๋ก & ์ค๋ฌด ์ต์ ํ ๋ง์คํฐ ๋ชฉ์ฐจ **
๐ โ๊ต์๊ธ ๊ฐ๋ฐ์โ ์์ค์ผ๋ก ์ธ์ ๋ฐ๊ธฐ ์ํด ์์์ผ ํ ๊ณ ๊ธ ์ฃผ์ ์ฒด๊ณ
๐ฆ PART 1. Ajax ๋ด๋ถ ๊ตฌ์กฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์
1-1. Ajax์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ์ฐ๊ด์ฑ
- Call Stack, Web API, Callback Queue, Event Loop ๋ถ์
- Ajax๊ฐ ๋น๋๊ธฐ์ธ ์ด์
- XMLHttpRequest vs Fetch ์ฐจ์ด์ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ํฅ
1-2. ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง๊ณผ Ajax ๋์
- DOM Tree, CSSOM Tree, Render Tree
- Ajax ํธ์ถ ์ ๋ ๋๋ง ๋๊ธฐํ ๋ฌธ์
- Layout Reflow / Repaint ์ํฅ๋
๐ง PART 2. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ & ์ฑ๋ฅ ์ต์ ํ
2-1. Ajax ๊ด๋ จ ๋ฉ๋ชจ๋ฆฌ ๋์ ์์ธ
- append(), innerHTML ์ฌ์ฉ ์ DOM ๋์
- ํด๋ก์ /์ฝ๋ฐฑ์ผ๋ก ์ธํด GC ๋ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฑ
- ์ ๊ฑฐ๋์ง ์์ ํ์ด๋จธ(setInterval)/์ด๋ฒคํธ ํธ๋ค๋ฌ
2-2. ๋ธ๋ผ์ฐ์ GC(Garbage Collector) ๊ด์ ์์ ๋ณธ ๋ฉ๋ชจ๋ฆฌ ํ์
- Mark-and-Sweep ์๊ณ ๋ฆฌ์ฆ
- ๋๋ฌ ๊ฐ๋ฅ์ฑ(reachability) ๊ฐ๋
- Ajax ์ฝ๋ฐฑ ํจ์์ ์ฐธ์กฐ ์นด์ดํธ ๋ฌธ์
2-3. ์ค๋ฌด ๋ฉ๋ชจ๋ฆฌ ๋์ ์์ ๋ถ์
- 1000๋ฒ์ Ajax ์์ฒญ ์ดํ UI ๋ฐ์์ด ๋๋ ค์ง๋ ์์ธ ๋ถ์
- ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง ๋๊ตฌ(Chrome DevTools Memory Tab) ์ฌ์ฉ๋ฒ
๐ PART 3. Ajax ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ (Frontend Architecture)
3-1. ๋คํธ์ํฌ ์ต์ ํ
- Keep-Alive, Gzip, HTTP/2 Server Push, ์บ์ฑ ์ ๋ต
- ETag / If-Modified-Since ์ฌ์ฉ๋ฒ
3-2. ์์ฒญ ์ต์ ํ
- Debounce / Throttle๋ก Ajax ํธ์ถ ๊ฐ์ํ
- ์์ฒญ ๋ณํฉ (Batching) ๋ฐ ์ค๋ณต ์ ๊ฑฐ ์ฒ๋ฆฌ
3-3. ์๋ต ์ต์ ํ
- Lazy rendering vs Pre-rendering
- ์ต์ ์๋ต ํฌ๊ธฐ ์ค๊ณ (JSON ํ๋ ์ถ์, pagination ๋ฑ)
๐งฉ PART 4. ์ํ ๊ด๋ฆฌ์ ์์ฒญ ์ ์ด
4-1. ์ํ ์ผ๊ด์ฑ ๋ฌธ์
- Ajax ์๋ต ์์ ์ญ์ ๋ฌธ์ (Race Condition)
- Axios CancelToken, AbortController๋ก ์์ฒญ ์ทจ์
4-2. ๋ณ๋ ฌ Ajax ์ฒ๋ฆฌ์ Promise ๋ณ๋ ฌ์ฑ
Promise.all
,Promise.race
,async/await
ํ์ฉ- ๋จ์ผ ์ฐ๋ ๋ ํ๊ฒฝ์์์ ๋์์ฑ ์ ์ด
4-3. Ajax ์์ฒญ ํ ์ค๊ณ
- ์์ ์ฐ์ ์์ ๊ธฐ๋ฐ ์์ฒญ ํ
- ํธ๋ํฝ ๊ธ์ฆ ์ ๋ฐฑ์คํ(back-off) ์ ๋ต
๐ PART 5. ๋ณด์ ๊ณ ๋ ค์ฌํญ
5-1. CORS(Cross-Origin Resource Sharing)
- Preflight ์์ฒญ๊ณผ OPTIONS ๋ฉ์๋
- Access-Control-Allow-Origin
5-2. CSRF(Cross-Site Request Forgery) ๋ฐฉ์ง
- SameSite ์ฟ ํค ์ ์ฑ
- CSRF ํ ํฐ์ Ajax๋ก ์์ ํ๊ฒ ๋ณด๋ด๋ ๋ฐฉ๋ฒ
5-3. XSS์ JSON ์๋ต ์ค๊ณ
- ์๋ฒ์์ JSON ์๋ต ์
<script>
์ฝ์ ๋ฐฉ์ง - Content-Type: application/json + ๋ฌธ์์ด ์ด์ค์ผ์ดํ
๐ PART 6. ๋๋ฒ๊น ยท ๋ก๊น ยท ํ ์คํธ
6-1. Ajax ์์ฒญ ๋๋ฒ๊น ๊ธฐ๋ฒ
- Network ํจ๋์์ ์์ฒญ ์์ธ ๋ถ์
- fetch/XHR ํ์ด๋ฐ ์ ๋ณด ๋ถ์ (TTFB, Waiting ๋ฑ)
6-2. Ajax ํต์ ํ ์คํธ ์ ๋ต
- Mock Server (e.g., JSON Server, Mirage.js)
- Jest + axios-mock-adapter / fetch-mock ์ฌ์ฉ๋ฒ
6-3. Ajax ์คํจ ์ฌ์๋ ์ ๋ต (Retry Pattern)
- ์ง์ ๋ฐฑ์คํ (exponential backoff)
- ์ต๋ ์๋ ํ์ ์ ํ ๋ฐ ๋ก๊ทธ ์์ง ์ ๋ต
๐ PART 7. ์ฑ๋ฅ ์ธก์ ๊ณผ ์งํ ๊ด๋ฆฌ
7-1. Frontend ์ฑ๋ฅ ์ธก์ ์งํ
- TTI (Time To Interactive), LCP, FID
- Ajax ์๋ต ์๊ฐ, JS Heap Size, Paint Time
7-2. Ajax ์์ฒญ์ ํธ๋ํน / ๋ก๊น ์์คํ
- Sentry / Datadog / NewRelic์ ํตํ ์ค์๊ฐ ์ค๋ฅ ์ถ์
- ์ฌ์ฉ์ ์ธ์ ๋ณ Ajax ๋ณ๋ชฉ ์์ธ ํ์
๐ญ PART 8. ๋ํ ์์คํ ์์์ Ajax ์ํคํ ์ฒ ์ค๊ณ
8-1. Ajax + SPA ์ํคํ ์ฒ ์ค๊ณ ์ ๋ต
- ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฒฐํฉ (Redux, Vuex, Recoil)
- CSR(Client Side Rendering)๊ณผ SSR(Server Side Rendering) ์กฐํ
8-2. Micro Frontend ํ๊ฒฝ์์ Ajax ํต์ ๊ตฌ์กฐ
- ๊ฐ ๋ชจ๋๋ณ API ์ ๊ทผ ๊ฒฉ๋ฆฌ์ ๊ถํ ์ ์ด
- Service Worker์ ๊ฒฐํฉํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ฒญ ๊ด๋ฆฌ
๐ผ PART 9. ์ค๋ฌด ์์ฉ ์๋๋ฆฌ์ค ๋ฌธ์ (๋ฉด์ ๋๋น์ฉ)
๐ ์ค๋ฌดํ ๋ฌธ์ ์์
[๋ฌธ์ ]
- 100๊ฐ์ ์ํ ์ ๋ณด๋ฅผ Ajax๋ก ๋ถ๋ฌ์ค๋๋ฐ, ์ฌ์ฉ์๊ฐ ๋น ๋ฅด๊ฒ ์คํฌ๋กคํ๋ฉด์ ์์๋ก ์์ฒญ์ด ๋ฐ์ํ๋ค. ์๋ฒ๋ ์ ํ๋ TPS(์ด๋น ์ฒ๋ฆฌ ์)๋ฅผ ๊ฐ๋๋ค. ์ด ์ํฉ์์ ๋ค์์ ๋ง์กฑํ๋ ์ํคํ
์ฒ๋ฅผ ์ ์ํ๋ผ:
- ์๋ฒ ๊ณผ๋ถํ ๋ฐฉ์ง
- ์ค๋ณต ์์ฒญ ์ ๊ฑฐ
- UI ์๋ต์ฑ ์ ์ง
โ ๐ก ์ ๋ต ์์: Debounce + ์์ฒญ ํ + ์๋ต ์บ์ฑ + ์์ฒญ ์ทจ์
๐ง PART 10. ๊ต์๊ธ ์ฌ๊ณ ๋ฅผ ์ํ ์ฌํ ๋น๊ต ๋ถ์
์ฃผ์ | Ajax | WebSocket | Server-Sent Events | GraphQL |
---|---|---|---|---|
์์ฒญ ๋ฐฉ์ | ๋จ๋ฐฉํฅ | ์๋ฐฉํฅ | ๋จ๋ฐฉํฅ (์๋ฒ โ ํด๋ผ์ด์ธํธ) | ์ฟผ๋ฆฌ ๊ธฐ๋ฐ |
์ฐ๊ฒฐ ์ ์ง | X | O | O | X |
์ฌ์ฉ ์ฌ๋ก | ํผ ์ ์ก, ๋ฆฌ์คํธ ์กฐํ | ์ฑํ , ๊ฒ์ | ๋ด์ค ์ค์๊ฐ ์ ์ก | ์ ๋ฐํ ์ฟผ๋ฆฌํ API |
โ ์์ฝ ํค์๋
Call Stack, Event Loop, Memory Leak, Garbage Collector, append(), remove(), AbortController, CORS, Debounce, Race Condition, XHR vs Fetch, Chrome DevTools, Lazy Render, CSRF, XSS, Mocking, Logging, SPA, Micro Frontend