Yuu's 2023. 3. 23. 16:44
λ°˜μ‘ν˜•

πŸ’«μ˜€λŠ˜μ˜ κΉ¨λ‹¬μŒ

이번 λ¦¬μ•‘νŠΈμ— λŒ€ν•΄ λ³΅μŠ΅ν•˜λ˜ 쀑 SPA에 λŒ€ν•΄ 미처 μ•Œμ§€ λͺ»ν–ˆλ˜ 단점듀과 JSX에 λŒ€ν•΄ κΈ°λ‘ν•΄λ³΄κ³ μž ν•œλ‹€.

 

SPA의 단점

 

1. μžλ°”μŠ€ν¬λ¦½νŠΈ 파일의 크기가 크닀.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 규λͺ¨κ°€ 컀지면 μ΄ˆκΈ°μ— λ‘œλ”©ν•΄μ•Ό ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‚˜ CSS λ²ˆλ“€ 파일의 μš©λŸ‰μ΄ μ¦κ°€ν•œλ‹€. λ²ˆλ“€ 파일의 μš©λŸ‰ μ¦κ°€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 초기 λ‘œλ”© μ„±λŠ₯ μ €ν•˜μ˜ 원인이 λœλ‹€.

 

  μ΄λŸ¬ν•œ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ `트리 쉐이킹`, `μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…`κ³Ό 같은 기법을 μ‚¬μš©ν•΄ λ²ˆλ“€ 파일 μš©λŸ‰μ„ 쀄일 수 μžˆλ‹€κ³  ν•œλ‹€.λ‚˜μ˜ κ²½μš°μ—λŠ” λ¦¬μ•‘νŠΈμ—μ„œ cssλ₯Ό μ •μ˜ν•  λ•Œ `styled-component`보닀 `CSS in CSS` 방식인 `CSS module` 방식을 더 μ„ ν˜Έν–ˆλ‹€. 개인적으둜 cssλŠ” css νŒŒμΌμ— μ •λ¦¬λ˜μ–΄ μžˆμ–΄μ•Ό λ­”κ°€ 마음이 νŽΈν•˜κ³  κ°€λ…μ„±λ©΄μ—μ„œλ„  λͺ¨λ“ˆ 방식이 더 μ’‹μ•˜λ˜ κ²½ν—˜μ΄ μžˆμ—ˆλ‹€. λ‚˜μ€‘μ— μ•Œκ²Œ λ˜μ—ˆμ§€λ§Œ μ΄λŸ¬ν•œ μŠ΅κ΄€μ΄ μ΅œμ ν™”μ— 도움이 되고 μžˆμ—ˆλ‹€.

 

  반면 `CSS in JS` 방식인 styled-componentκ°€ ꡉμž₯히 νŽΈλ¦¬ν•˜μ§€λ§Œ μ½”λ“œκ°€ κΈΈμ–΄μ§€κ³  λ³΅μž‘ν•΄μ§ˆμˆ˜λ‘ 가독성이 λ–¨μ–΄μ§„λ‹€κ³  λŠκΌˆμ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ 이유 말고도 `CSS module` λ°©μ‹μ˜ 경우 순수 css 파일이기 λ•Œλ¬Έμ— μ„±λŠ₯ λ©΄μ—μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ—μ„œ cssλ₯Ό μž‘μ„±ν•˜λŠ” `CSS in JS` 방식보닀 훨씬 μ’‹λ‹€κ³  ν•œλ‹€.

 

CSS in JS 단점 - μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 해석 과정인 재컴파일 λ˜μ–΄μ•Όν•˜λŠ” 점, 라이브러리 μ„€μΉ˜λ‘œ 인해 λ²ˆλ“€λ§ μš©λŸ‰ 증가, μƒˆλ‘œμš΄ μ˜μ‘΄μ„± 등이 μžˆλ‹€κ³  ν•œλ‹€.

 

2. 검색 μ—”μ§„ μ΅œμ ν™”(SEO)에 μ’‹μ§€ μ•Šλ‹€.

  κ΅¬κΈ€μ΄λ‚˜ 넀이버 같은 κ²€μƒ‰μ—”μ§„μ˜ 검색 λ‘œλ΄‡μ€ 자료λ₯Ό μˆ˜μ§‘ν•  λ•Œ μ›Ή νŽ˜μ΄μ§€μ˜ URL은 물둠이고 HTML λ¬Έμ„œ λ‚΄μ˜ 각쒅 νƒœκ·Έλ‚˜ 링크 등을 λΆ„μ„ν•œλ‹€. ν•˜μ§€λ§Œ SPAλŠ” HTML이 거의 λΉ„μ—ˆλ‹€ λ³΄λ‹ˆ 검색 λ‘œλ΄‡μ΄ μΆ©λΆ„ν•œ 자료λ₯Ό μˆ˜μ§‘ν•˜μ§€ λͺ»ν•΄ SEO μ΅œμ ν™”μ— μ’‹μ§€ λͺ»ν•˜λ‹€.

 

  λ”°λΌμ„œ 주둜 SPAλŠ” 둜그인이 λ°˜λ“œμ‹œ ν•„μš”ν•œ μ„œλΉ„μŠ€μ— 많이 μ‚¬μš©λ˜κ³€ ν–ˆλ‹€. ν•˜μ§€λ§Œ μš”μ¦˜ 검색 μ—”μ§„ μžμ²΄μ—μ„œ  SPAμ—μ„œλ„ SEO μ΅œμ ν™”μ— λŒ€μ‘ν•  수 μžˆλ„λ‘ 검색 엔진이 λ°œμ „ν•˜κ³  있으며 초기 λ Œλ”λ§μ΄ CSR보닀 λΉ λ₯Έ SSR의 μž₯점을 μ΄μš©ν•΄ Node.js 기반의 SSR을 λ„μž…ν•΄ CSR + SSR ν˜•νƒœ(λ¦¬μ•‘νŠΈμ˜ 경우 Next.js / Vue의 경우 Nuxt.js)둜 κ°œλ°œν•˜λŠ” 방식을 많이 μ‚¬μš©ν•΄ 각 λ°©μ‹μ˜ λ¬Έμ œμ μ„ μ„œλ‘œμ˜ μž₯점으둜 상쇄해 μ–΄λŠ 정도 단점을 보완할 수 μžˆλ‹€.

 

css in css vs css in js μ„±λŠ₯ 비ꡐ에 λŒ€ν•œ 포슀트 κΈ€

 

JSX도 ν‘œν˜„μ‹μ΄λ‹€. 즉 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체이닀.

 

  λ¦¬μ•‘νŠΈ κ°œλ°œμ„ ν•˜λ©΄μ„œ `{}` μ•ˆμ— JSX 문법을 μ‚¬μš©ν•˜λŠ” 것에 크게 신경을 쓰지도 μ•Šμ•˜κ³  ꡳ이 κΆκΈˆν•˜μ§€λ„ μ•Šμ•˜μ—ˆλ‹€. 였늘 λΆ€νŠΈμΊ ν”„μ—μ„œ ν•œ μˆ˜κ°•μƒ λΆ„κ»˜μ„œ `{}` μ•ˆμ—λŠ” JSX λ¬Έλ²•μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ 것인데 μ™œ μ»΄ν¬λ„ŒνŠΈκ°€ λ“€μ–΄κ°€λŠ”μ§€? μ»΄ν¬λ„ŒνŠΈλŠ” JSX의 문법이지 μ•Šλ‚˜?λΌλŠ” μ§ˆλ¬Έμ„ μ£Όμ…¨λ‹€... μˆœκ°„ λ‚˜λ„ κΆκΈˆν•΄μ„œ React λ¬Έμ„œλ₯Ό μ°Ύμ•„λ΄€κ³  ν•΄λ‹Ή μ§ˆλ¬Έμ— λŒ€ν•œ 닡이 μžˆμ—ˆλ‹€.

 

JSX도 ν‘œν˜„μ‹μ΄λ©°, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체라고 ν•œλ‹€. 즉 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ½”λ“œμ΄λ‹€.

 

React λ¬Έμ„œ - JSX

λ°˜μ‘ν˜•