๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Frontend/JavaScript

SPA(Single Page Application)๋ž€?

by sukii 2025. 4. 10.
๋ฐ˜์‘ํ˜•

๐Ÿ“˜ SPA๋ž€?

ํ•œ ๋งˆ๋””๋กœ 'ํŽ˜์ด์ง€๊ฐ€ ํ•˜๋‚˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์›น์•ฑ'์„ ๋งํ•œ๋‹ค. 

 

๋กœ๊ทธ์ธ์„ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด,

๐ŸŸก MPA (Multi Page Application) = ์ „ํ†ต์ ์ธ ์›น์•ฑ 

๋กœ๊ทธ์ธ ํด๋ฆญ → ์„œ๋ฒ„์—์„œ ์ƒˆ๋กœ์šด HTML ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์‘๋‹ตํ•ด์„œ ์ƒˆ๋กœ๊ณ ์นจ

๐ŸŸก SPA (Single Page Application)
๋กœ๊ทธ์ธ ํด๋ฆญ → ๊ธฐ์กด ํŽ˜์ด์ง€ ์œ ์ง€ํ•œ ์ฑ„, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์™€์„œ ํ™”๋ฉด ์ผ๋ถ€๋งŒ ๋ฐ”๋€œ

 


โœ…SPA ํ™˜๊ฒฝ์—์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฌ๊ธฐ์„œ ์•Œ์•„์•ผ ํ•  Pointโ˜…

SPA๋Š” ํ™”๋ฉด ์ „ํ™˜์„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ ํ•˜๊ณ , ๋ฐฑ์—”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ๋‹ค.
๊ทธ๋ž˜์„œ Spring Boot๋Š” REST API ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•จ!

 

๐Ÿ’ฌ ์˜ˆ์‹œ

React ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ์•„์ด๋””/๋น„๋ฒˆ ์ž…๋ ฅ → POST /auth/login API๋กœ ๋ฐฑ์—”๋“œ์— ์š”์ฒญ

→ ๋ฐฑ์—”๋“œ๋Š” JSON ์‘๋‹ต๋งŒ ์คŒ ({ token: "..." })

 

React/Vue/Angular๋กœ ๋งŒ๋“  ํ”„๋ก ํŠธ๋Š” ๋‹ค SPA์ธ๋ฐ, ์ง€๊ธˆ ๊ฐœ์ธ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ Spring Boot + React ์กฐํ•ฉ์ด๋ผ SPA ๊ฐœ๋…์„ ๋‹ค์‹œ ๋ณต์Šตํ•˜๊ณ ์ž ํ•œ๋‹ค.

๐Ÿ“ CORS (Cross-Origin Resource Sharing) ํ”„๋ก ํŠธ ์„œ๋ฒ„(3000) ↔ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„(8080) ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์ด๋ผ ์š”์ฒญ ๋ง‰ํž˜ → CORS ์„ค์ • ํ•„์š”
๐Ÿ“ REST API SPA๋Š” HTML์ด ์•„๋‹ˆ๋ผ JSON๋งŒ ์š”์ฒญํ•จ → ๋ฐฑ์—”๋“œ๋Š” API๋งŒ ์ œ๊ณต
๐Ÿ“ JWT ์ธ์ฆ SPA์—์„œ๋Š” ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜์„ ๋“ค๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ(์ฟ ํ‚ค+์„œ๋ฒ„ ์„ธ์…˜) ๋ณด๋‹ค
๋ฌด์ƒํƒœ ์ธ์ฆ ๋ฐฉ์‹์ธ ํ† ํฐ ๊ธฐ๋ฐ˜(JWT) ์ด ์ ํ•ฉํ•จ
→ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ† ํฐ์„ ์ €์žฅํ•˜๊ณ , ์š”์ฒญ๋งˆ๋‹ค Authorization ํ—ค๋”์— ๋ถ™์—ฌ์„œ ์ธ์ฆ
๐Ÿ“ ํ”„๋ก ํŠธ ๋นŒ๋“œ ๋ฐฐํฌ React ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐฑ์—”๋“œ์—์„œ ํ•จ๊ป˜ ์„œ๋น™ํ•  ์ˆ˜๋„ ์žˆ์Œ (/static, /public)
but, ๋ณดํ†ต์€ ํ”„๋ก ํŠธ+๋ฐฑ ๋ถ„๋ฆฌ๊ฐ€ ๋” ์ผ๋ฐ˜์ 
๋ฐ˜์‘ํ˜•