# [[Single Page Applications (SPA)]] ## ๐Ÿ“Œ Brief Summary Single Page Applications (SPA)์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์ „์ฒด ๋กœ๋“œํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐฉ์‹ ๋Œ€์‹ , ์›น ์„œ๋ฒ„์—์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์™€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ JavaScript๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ฉฐ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค [1]. ์ดˆ๊ธฐ ์…ธ(Shell) ํŒŒ์ผ์ด ๋กœ๋“œ๋œ ํ›„์—๋Š” ์ฆ‰๊ฐ์ ์ธ ํŽ˜์ด์ง€ ์ „ํ™˜๊ณผ ์›ํ™œํ•œ ์ƒํƒœ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๋›ฐ์–ด๋‚œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 2]. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ Œ๋”๋ง(CSR)์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO) ์ฒ˜๋ฆฌ์™€ ์ดˆ๊ธฐ ๋กœ๋”ฉ ๋ฐ ์ƒํ˜ธ์ž‘์šฉ ์„ฑ๋Šฅ(Core Web Vitals) ์ธก๋ฉด์—์„œ ๊ณ ์œ ํ•œ ๊ธฐ์ˆ ์  ๊ณผ์ œ๋“ค์„ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content * **SPA์˜ ์žฅ์  ๋ฐ ํ™œ์šฉ:** ์ดˆ๊ธฐ ์›น์˜ ์ „์ฒด ์ƒˆ๋กœ๊ณ ์นจ ๋ฐฉ์‹์—์„œ ๋ฐœ์ „ํ•œ SPA๋Š” AJAX๋ฅผ ๊ฑฐ์ณ ์˜ค๋Š˜๋‚  React, Vue, Svelte, Angular ๋“ฑ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค [1, 2]. ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์ „ํ™˜ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ํŽ˜์ด์ง€ ๊ฐ„ ์ด๋™ ์‹œ์—๋„ ์˜ค๋””์˜ค ์žฌ์ƒ ๋“ฑ๊ณผ ๊ฐ™์€ ์ƒํƒœ(State Persistence)๊ฐ€ ์œ ์ง€๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [2]. ํ”„๋ก ํŠธ์—”๋“œ UI์™€ ๋ฐฑ์—”๋“œ API๊ฐ€ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜๋„ ์šฐ์ˆ˜ํ•˜๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ Gmail, Spotify Web, Figma, Trello ๋“ฑ์— ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [2]. * **ํด๋ผ์ด์–ธํŠธ ์ธก ๋ Œ๋”๋ง(CSR)์œผ๋กœ ์ธํ•œ SEO์˜ ํ•œ๊ณ„:** SPA๋Š” ์ฒ˜์Œ ๋กœ๋”ฉ ์‹œ ๋น„์–ด ์žˆ๋Š” HTML ์…ธ(`
`)์„ ์ „์†กํ•˜๊ณ  ์ดํ›„์— JavaScript๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๋Š” CSR์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค [4]. ๊ตฌ๊ธ€๋ด‡ ๋“ฑ์€ ๋นˆ HTML์„ ๋จผ์ € ์ƒ‰์ธํ™”ํ•œ ํ›„ ๋‚˜์ค‘์— JS ์‹คํ–‰์„ ์œ„ํ•ด ๋Œ€๊ธฐ์—ด์— ๋„ฃ๋Š” 2๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์น˜๋ฏ€๋กœ ์ƒ‰์ธ์ด ์ง€์—ฐ๋˜๊ฑฐ๋‚˜ ๋ฌด๋ฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5-7]. ๋˜ํ•œ ์ตœ์‹  AI ๋ชจ๋ธ(ChatGPT, Perplexity ๋“ฑ)์˜ ํ›ˆ๋ จ์„ ๋•๋Š” ์—์ด์ „ํŠธ ํฌ๋กค๋Ÿฌ๋“ค์€ ๋น„์šฉ ๋ฌธ์ œ๋กœ JavaScript ์‹คํ–‰์„ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„, ์ˆœ์ˆ˜ SPA ํ˜•ํƒœ๋ผ๋ฉด AI ๊ฒ€์ƒ‰ ์—”์ง„ ๋ฐ ์š”์•ฝ ๊ธฐ๋Šฅ์—์„œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ฌด์‹œ๋  ์œ„ํ—˜์ด ๋งค์šฐ ํฝ๋‹ˆ๋‹ค [8]. * **์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ(Core Web Vitals) ์„ฑ๋Šฅ ์ €ํ•˜ ์š”์ธ:** ๋Œ€๊ทœ๋ชจ์˜ JavaScript ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ด๋ฅธ๋ฐ” 'ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ๋น„๋Œ€ํ™”(Hydration Bloat)'๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์žฅ์‹œ๊ฐ„ ์ ์œ ํ•ฉ๋‹ˆ๋‹ค [9, 10]. ์ด๋กœ ์ธํ•ด ์ฝ˜ํ…์ธ ๊ฐ€ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์‹œ๊ฐ„์ธ LCP(Largest Contentful Paint)์™€ ์‚ฌ์šฉ์ž์˜ ์ฒซ ์ƒํ˜ธ์ž‘์šฉ ์‹œ ๋ฐ˜์‘ ์†๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” INP(Interaction to Next Paint) ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์ ธ ๊ตฌ๊ธ€์˜ ํŽ˜์ด์ง€ ๊ฒฝํ—˜ ํ‰๊ฐ€์—์„œ ํŽ˜๋„ํ‹ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. * **๋ผ์šฐํŒ…(Routing) ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๋ฌธ์ œ:** ๋ผ์šฐํŒ…์ด ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฉด์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€ URL์— ์ ‘์†ํ•˜๋”๋ผ๋„ ์„œ๋ฒ„๋Š” ์—ฌ์ „ํžˆ ์ •์ƒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์†Œํ”„ํŠธ 404(Soft 404) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ํฌ๋กค๋ง ์˜ˆ์‚ฐ์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [10, 11]. ๋”๋ถˆ์–ด ๋™์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฉด ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ๋™์ผํ•œ `` ํƒœ๊ทธ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๊ณ , URL์— ํ•ด์‹œ(#)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•ด์‹œ ๋ผ์šฐํŒ… ๋ฐฉ์‹์„ ๊ณ ์ˆ˜ํ•  ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ์—”์ง„์ด ๊ณ ์œ  ํŽ˜์ด์ง€๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [12-14]. * **์ตœ์ ํ™” ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€ (Best Practices):** ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„(SSR)๋‚˜ ์ •์  ์ƒ์„ฑ(SSG) ๋˜๋Š” ์ ์ง„์  ์ •์  ์žฌ์ƒ์„ฑ(ISR)์œผ๋กœ ์ด์ „ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [15, 16]. ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ํ•ด์‹œ๊ฐ€ ์—†๋Š” HTML5 History API ๊ธฐ๋ฐ˜์˜ ๊นจ๋—ํ•œ URL ๊ตฌ์กฐ ๊ตฌํ˜„, ๋ชจ๋“  ๋‚ด๋ถ€ ๋„ค๋น„๊ฒŒ์ด์…˜์— `onClick`์ด ์•„๋‹Œ ์ „ํ†ต์ ์ธ `<a href>` ๋งํฌ ํƒœ๊ทธ ์‚ฌ์šฉ, ๊ทธ๋ฆฌ๊ณ  ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ(<title>, ์˜คํ”ˆ ๊ทธ๋ž˜ํ”„ ๋“ฑ)๊ฐ€ ๊ฐฑ์‹ ๋˜๋„๋ก ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์„ค๊ณ„๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [14, 17, 18]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** `[[Client-Side Rendering (CSR)]]`, `[[Server-Side Rendering (SSR)]]`, `[[Core Web Vitals]]`, `[[JavaScript SEO]]` - **Projects/Contexts:** `[[SPA SEO Guide 2026]]`, `[[React SEO Optimization]]` - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ๋ชจ๋“  SPA๊ฐ€ ๋ฐ˜๋“œ์‹œ SEO ์ตœ์ ํ™”๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ๋ฒฝ ๋’ค์— ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ)์ด๋‚˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŽธ์ง‘๊ธฐ ๋„๊ตฌ ์ž์ฒด(์˜ˆ: Figma ์—๋””ํ„ฐ ํ™”๋ฉด)์ธ ๊ฒฝ์šฐ์—๋Š” 100% ํด๋ผ์ด์–ธํŠธ ๋ Œ๋”๋ง์„ ์œ ์ง€ํ•˜๊ณ  SEO๋ฅผ ๋ฌด์‹œํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋ฉฐ `<meta name="robots" content="noindex">`๋ฅผ ์ ์šฉํ•ด ํฌ๋กค๋ง ์˜ˆ์‚ฐ์„ ์•„๊ปด์•ผ ํ•œ๋‹ค๊ณ  ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค [19]. ๋˜ํ•œ, ๋ด‡์—๊ฒŒ๋Š” ์ •์  HTML์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” CSR์„ ์ œ๊ณตํ•˜๋Š” '๋™์  ๋ Œ๋”๋ง(Dynamic Rendering)' ๊ธฐ๋ฒ•์˜ ๊ฒฝ์šฐ 2026๋…„ ๊ธฐ์ค€์œผ๋กœ๋Š” ํด๋กœํ‚น(Cloaking) ์ œ์žฌ ์œ„ํ—˜์ด ์žˆ์–ด ๋” ์ด์ƒ ๊ตฌ๊ธ€์—์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์šฐํšŒ์ฑ…(Hack)์œผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค [20, 21]. --- *Last updated: 2026-04-26*