λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
JavaScript/React

[React] SPA λž€?

by soyλ―Έλ‹ˆ 2021. 11. 8.

 

 

SPA(Single Page Application) : ν•œ 개의 νŽ˜μ΄μ§€λ‘œ 이루어진 μ• ν”Œλ¦¬μΌ€μ΄μ…˜

 

전톡적인 μ›Ή 방식(SSR : μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§) 은 μ‚¬μš©μžκ°€ λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ 이동할 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ html 을 λ°›μ•„μ˜€κ³  νŽ˜μ΄μ§€λ₯Ό λ‘œλ”©ν•  λ•Œλ§ˆλ‹€ μ„œλ²„μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό 전달받아 ν•΄μ„ν•œ λ’€ 화면에 λ³΄μ—¬μ£ΌλŠ” λ°©μ‹μ΄μ—ˆλ‹€. 즉, μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ£ΌλŠ” 화면은 μ„œλ²„μ—μ„œ μ€€λΉ„ν–ˆλ‹€. 이처럼 전톡적인 μ›Ή λŒ€λΆ€λΆ„μ€ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 방식이닀. κ·ΈλŸ¬λ‚˜ μš”μ¦˜μ—λŠ” μ›Ήμ—μ„œ μ œκ³΅ν•˜λŠ” 정보가 정말 많기 λ•Œλ¬Έμ— μƒˆλ‘œμš΄ 화면을 보여쀄 λ•Œλ§ˆλ‹€ μ„œλ²„μ—μ„œ λͺ¨λ“  λ·°λ₯Ό μ€€λΉ„ν•œλ‹€λ©΄ μ„±λŠ₯μƒμ˜ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. (νŠΈλž˜ν”½, μ„œλ²„μ— 높은 λΆ€ν•˜ λ“±)

 

κ·Έλž˜μ„œ λ¦¬μ•‘νŠΈ 같은 라이브러리 ν˜Ήμ€ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ—¬ λ·° λ Œλ”λ§μ„ μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €κ°€ λ‹΄λ‹Ήν•˜λ„λ‘ ν•˜κ³  μš°μ„  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΈŒλΌμš°μ €μ— λΆˆλŸ¬μ™€μ„œ μ‹€ν–‰μ‹œν‚¨ ν›„ μ‚¬μš©μžμ™€μ˜ μΈν„°λž™μ…˜μ΄ λ°œμƒν•˜λ©΄ ν•„μš”ν•œ λΆ€λΆ„λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—…λ°μ΄νŠΈ ν•œλ‹€.

 

 

SPA 의 경우 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§ (CSR : ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§) 방식이닀. μ„œλ²„μ—μ„œ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•˜λŠ” νŽ˜μ΄μ§€λŠ” ν•œ μ’…λ₯˜μ΄μ§€λ§Œ, ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ λ‘œλ”©λœ μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ ν˜„μž¬ μ‚¬μš©μž λΈŒλΌμš°μ €μ˜ μ£Όμ†Œ μƒνƒœμ— 따라 λ‹€μ–‘ν•œ 화면을 보여쀄 수 μžˆλ‹€.

 

λ‹€λ₯Έ μ£Όμ†Œμ— λ‹€λ₯Έ 화면을 λ³΄μ—¬μ£ΌλŠ” 것을 λΌμš°νŒ…μ΄λΌκ³  ν•œλ‹€. λ¦¬μ•‘νŠΈ λΌμš°νŒ… λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ¦¬μ•‘νŠΈ λΌμš°ν„°, 리치 λΌμš°ν„°, Next.js 등이 μžˆλ‹€. λ¦¬μ•‘νŠΈ λΌμš°ν„°λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œμ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” λΌμš°νŒ…μ„ μ•„μ£Ό κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ ν•˜λ©° 더 λ‚˜μ•„κ°€ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ ν•  λ•Œ λΌμš°νŒ…μ„ λ„μ™€μ£ΌλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ œκ³΅ν•œλ‹€.

 

SPA 의 단점은 μ•±μ˜ 규λͺ¨κ°€ 컀지면 μžλ°”μŠ€ν¬λ¦½νŠΈ 파일이 λ„ˆλ¬΄ μ»€μ§„λ‹€λŠ” 것이닀. νŽ˜μ΄μ§€ λ‘œλ”© μ‹œ μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ λ°©λ¬Έν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ” νŽ˜μ΄μ§€μ˜ 슀크립트λ₯Ό 뢈러였기 λ•Œλ¬Έμ΄λ‹€.

 

 

 

 

 

 

Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ μ£Όμ†Œλ‘œ μ΄λ™ν•˜κΈ°

 

Link μ»΄ν¬λ„ŒνŠΈλŠ” ν΄λ¦­ν•˜λ©΄ λ‹€λ₯Έ μ£Όμ†Œλ‘œ μ΄λ™ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ΄λ‹€. 일반 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” a νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό μ „ν™˜ν•˜λŠ”λ°, λ¦¬μ•‘νŠΈ λΌμš°ν„°λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” 이 νƒœκ·Έλ₯Ό 직접 μ‚¬μš©ν•˜λ©΄ μ•ˆ λœλ‹€. a νƒœκ·ΈλŠ” νŽ˜μ΄μ§€λ₯Ό μ „ν™˜ν•˜λŠ” κ³Όμ •μ—μ„œ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ 뢈러였기 λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ“€κ³  있던 μƒνƒœλ“€μ„ λͺ¨λ‘ λ‚ λ¦¬κ²Œ λœλ‹€. λ Œλ”λ§λœ μ»΄ν¬λ„ŒνŠΈλ“€λ„ λͺ¨λ‘ 사라지고 λ‹€μ‹œ μ²˜μŒλΆ€ν„° λ Œλ”λ§ν•˜κ²Œ λ˜λŠ” 것이닀. 

 

Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό μ „ν™˜ν•˜λ©΄ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ λΆˆλŸ¬μ˜€μ§€ μ•Šκ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κ·ΈλŒ€λ‘œ μœ μ§€ν•œ μƒνƒœμ—μ„œ HTML5 History API λ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€μ˜ μ£Όμ†Œλ§Œ λ³€κ²½ν•œλ‹€. Link μ»΄ν¬λ„ŒνŠΈ μžμ²΄λŠ” a νƒœκ·Έλ‘œ 이루어져 μžˆμ§€λ§Œ νŽ˜μ΄μ§€ μ „ν™˜μ„ λ°©μ§€ν•˜λŠ” κΈ°λŠ₯이 λ‚΄μž₯λ˜μ–΄ μžˆλ‹€.

 

 

 

 

 

λŒ“κΈ€