React

[React] SPA μ‹±κΈ€νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λž€? λ¬΄μ—‡μΌκΉŒ.

hyonie 2024. 9. 24. 02:45

 λ¦¬μ•‘트 개발 μ‹œμž‘ν•˜κΈ°μ— μ•žμ„œ, λ¦¬μ•‘νŠΈ ν”„λ ˆμž„μ›Œν¬μ˜ κ°œλ…μ„ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. 이λ₯Ό μœ„ν•΄ λ¨Όμ € μ›Ή μ„œλ²„μ™€ μ›Ή λΈŒλΌμš°μ € κ°„μ˜ 톡신 κ³Όμ •κ³Ό μ‹±κΈ€νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA)의 κ°œλ…μ„ μ•Œμ•„μ•Όν•œλ‹€. μ›Ή λΈŒλΌμš°μ €κ°€ μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό μš”μ²­ν•˜κ³  μ‘λ‹΅λ°›λŠ” κ³Όμ •κ³Ό SPAκ°€ νŽ˜μ΄μ§€λ₯Ό λ™μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€λŠ” 방식을 μ΄ν•΄ν•˜λ©΄, λ¦¬μ•‘νŠΈμ˜ 핡심 λ™μž‘ 원리λ₯Ό μ‰½κ²Œ νŒŒμ•…ν• μˆ˜ μžˆλ‹€. 이 κΈ€μ—μ„œλŠ” μ΄λŸ¬ν•œ λ‚΄μš©μ„ κ°„λž΅ν•˜κ²Œ 정리 ν•˜μ˜€λ‹€.


λ¦¬μ•‘νŠΈ ν”„λ ˆμž„μ›Œν¬ μ΄ν•΄ν•˜κΈ°

  • λ¦¬μ•‘νŠΈ(React)λŠ” 2013λ…„ νŽ˜μ΄μŠ€λΆμ—μ„œ λ°œν‘œν•œ μ˜€ν”ˆμ†ŒμŠ€ μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리
  • 주둜 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€(UI)λ₯Ό 효율적으둜 κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • 가상 DOM(Virtual DOM)κ³Ό JSX λΌλŠ” μƒˆλ‘œμš΄ λ°©μ‹μœΌλ‘œ 효율적인 λ Œλ”λ§ 지원
  • ν”„λ‘ νŠΈμ—”λ“œλŠ” μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” 화면을 HTML, CSS,  μžλ°”μŠ€ν¬λ¦½νŠΈ 등을 μ΄μš©ν•΄ κ°œλ°œν•˜λŠ” λΆ€λΆ„
  • λ°±μ—”λ“œλŠ” ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μš”μ²­ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  μ œκ³΅ν•˜λŠ” μ„œλ²„ μΈ‘ κ°œλ°œμ„ 의미
  • 이런 κ΄€μ μ—μ„œ λ¦¬μ•‘νŠΈλŠ” ν”„λ‘ νŠΈμ—”λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ ˆμž„μ›Œν¬μ— ν•΄λ‹Ή

 


1. μ›Ή μ„œλ²„μ™€ μ›Ή λΈŒλΌμš°μ €μ˜ 톡신 κ³Όμ • πŸŒπŸ’­

μ›Ή μ„œλ²„λŠ” μ›Ή λΈŒλΌμš°μ €κ°€ μš”μ²­ν•˜λŠ” λ‹€μ–‘ν•œ μœ ν˜•μ˜ μžμ›μ„ μ œκ³΅ν•˜λŠ” 역할을 ν•œλ‹€. 이 과정은 HTTP ν”„λ‘œν† μ½œμ„ 톡해 이루어진닀.

*ν”„λ‘œν† μ½œ: μ–΄λ–€ λ°©μ‹μœΌλ‘œ μžμ›μ— 접근할지에 λŒ€ν•œ κ·œμΉ™μ΄λ‚˜ 약속을 의미 (예: http, https, ftp λ“±)

 

  1. HTTP μš”μ²­: μ›Ή λΈŒλΌμš°μ €κ°€ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ URL을 기반으둜 μ›Ή μ„œλ²„μ— νŠΉμ • μžμ›μ„ μš”μ²­ν•œλ‹€. μ΄λ•Œ, HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ„œλ²„λ‘œ μš”μ²­μ„ 보낸닀.
  2. HTTP 응닡: μ›Ή μ„œλ²„λŠ” μš”μ²­λ°›μ€ μžμ›(예: HTML, CSS, 이미지 파일 λ“±)을 μ°Ύμ•„, 이λ₯Ό HTTP 응닡 ν˜•νƒœλ‘œ μ›Ή λΈŒλΌμš°μ €μ— μ „μ†‘ν•œλ‹€.
  3. λ Œλ”λ§: μ›Ή λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° 받은 HTTP 응닡 데이터λ₯Ό λ°”νƒ•μœΌλ‘œ μ‚¬μš©μžκ°€ λ³Ό 수 μžˆλŠ” μ›Ή νŽ˜μ΄μ§€λ‘œ λ³€ν™˜ν•˜μ—¬ 화면에 ν‘œμ‹œν•œλ‹€.

 

 


 

2. μ‹±κΈ€ νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λž€ λ¬΄μ—‡μΌκΉŒ πŸ–₯οΈπŸ”„οΈ

 λ¦¬μ•‘트둜 λ§Œλ“œλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ index.html ν•˜λ‚˜μ˜ 파일둜 λ™μž‘ν•˜λ©°, λ°±μ—”λ“œμ—μ„œ λ°›μ•„μ˜¨ JSON 데이터λ₯Ό 해석해 ν™”λ©΄μ—μ„œ ν•„μš”ν•œ λΆ€λΆ„λ§Œ λ™μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•œλ‹€. 이λ₯Ό 톡해 전체 νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ λ‘œλ“œν•˜μ§€ μ•Šκ³ , μ‚¬μš©μžκ°€ μš”μ²­ν•œ λΆ€λΆ„λ§Œ λ³€κ²½ν•˜λŠ” λ°©μ‹μ˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹±κΈ€ νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA)이라고 ν•œλ‹€.

 

  • λ©€ν‹° νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(MPA): μƒˆλ‘œμš΄ νŽ˜μ΄μ§€ μš”μ²­ μ‹œλ§ˆλ‹€ 전체 νŽ˜μ΄μ§€κ°€ λ‹€μ‹œ λ‘œλ“œλ˜λ©°, ν™”λ©΄ κΉœλΉ‘μž„(μƒˆλ‘œκ³ μΉ¨)이 λ°œμƒν•˜λŠ” 전톡적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 방식
  • μ‹±κΈ€ νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA): ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€μ—μ„œ λ°μ΄ν„°λ§Œ λ™μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λ©°, νŽ˜μ΄μ§€ μƒˆλ‘œκ³ μΉ¨ 없이 λΆ€λ“œλŸ½κ²Œ 화면을 μ „ν™˜ν•˜λŠ” 방식