Client-Side Routing & Server-Side Routing

Client-Side Routing (ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…)

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ νŽ˜μ΄μ§€ μ „ν™˜μ„ μ²˜λ¦¬ν•˜λŠ” 방법 쀑 ν•˜λ‚˜λ‘œ 주둜 SPAμ—μ„œ μ‚¬μš©λœλ‹€.

전톡적인 μ„œλ²„ μ‚¬μ΄λ“œ λΌμš°νŒ…κ³ΌλŠ” λ‹€λ₯΄κ²Œ, λΈŒλΌμš°μ €μ—μ„œ JSλ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό μ „ν™˜ν•œλ‹€. 이λ₯Ό 톡해 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ“œν•˜μ§€ μ•Šκ³ λ„ URL을 λ³€κ²½ν•˜κ³ , ν•„μš”ν•œ μ½˜ν…μΈ λ₯Ό λ™μ μœΌλ‘œ λ‘œλ“œ ν•  수 μžˆλ‹€.

νŠΉμ§• 및 μž₯점

  • URL λ³€κ²½ 관리

    • λΈŒλΌμš°μ €μ˜ μ£Όμ†Œμ°½μ— URL이 λ³€κ²½λ˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•˜μ§€ μ•ŠλŠ”λ‹€.

    • μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 톡해 URL 변경을 κ°μ§€ν•˜κ³ , ν•΄λ‹Ή URL에 λ§žλŠ” μ½˜ν…μΈ λ₯Ό λ™μ μœΌλ‘œ λ‘œλ“œν•œλ‹€.

  • λΉ λ₯Έ νŽ˜μ΄μ§€ μ „ν™˜

    νŽ˜μ΄μ§€ κ°„ 이동 μ‹œ μ„œλ²„μ— μƒˆλ‘œμš΄ HTML을 μš”μ²­ν•˜μ§€ μ•Šκ³ , μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ ν•„μš”ν•œ 데이터λ₯Ό λΉ„λ™κΈ°μ μœΌλ‘œ 가져와 ν˜„μž¬ νŽ˜μ΄μ§€μ˜ μΌλΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈν•œλ‹€. β†’ 전체 νŽ˜μ΄μ§€κ°€ μƒˆλ‘œκ³ μΉ¨λ˜μ§€ μ•Šμ•„ μ „ν™˜μ΄ λΉ λ₯΄κ³  λΆ€λ“œλŸ½λ‹€.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ μœ μ§€ νŽ˜μ΄μ§€ μ „ν™˜ μ‹œμ—λ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœ μœ μ§€ κ°€λŠ₯.

단점

  • κΈ΄ 초기 λ‘œλ“œ μ‹œκ°„

    초기 λ‘œλ“œ μ‹œ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ„ λͺ¨λ‘ 받아와야 ν•˜λ―€λ‘œ, 초기 λ‘œλ“œ μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 수 μžˆλ‹€.

    BUT, 초기 λ‘œλ“œκ°€ λλ‚œ ν›„μ—λŠ” μ‚¬μš©μž κ²½ν—˜μ΄ 맀우 λΆ€λ“œλŸ½κ³  λΉ λ₯΄λ‹€.

  • SEO 문제

    초기 HTML에 μ½˜ν…μΈ κ°€ μ—†κ³ , μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 톡해 λ™μ μœΌλ‘œ μ½˜ν…μΈ λ₯Ό λ‘œλ“œν•˜λ―€λ‘œ 검색 엔진이 μ½˜ν…μΈ λ₯Ό ν¬λ‘€λ§ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλ‹€. β‡’ 검색 μ—”μ§„ μ΅œμ ν™”(SEO)κ°€ μ–΄λ €μšΈ 수 μžˆλ‹€.

μ‚¬μš© 사둀

주둜 SPA(Single Page Application)μ—μ„œ μ‚¬μš©. 예) React, Vue.js, Angular 같은 ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ‚¬μš©


Server-Side Routing (μ„œλ²„ μ‚¬μ΄λ“œ λΌμš°νŒ…)

μ„œλ²„μ—μ„œ 각 νŽ˜μ΄μ§€ μš”μ²­μ— λŒ€ν•΄ λ³„λ„μ˜ HTML νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬ν•˜λŠ” 방식이닀.

μž‘λ™ 방식

  • URL μš”μ²­ 처리

    • μ‚¬μš©μžκ°€ URL을 톡해 νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•  λ•Œλ§ˆλ‹€, μ„œλ²„λŠ” ν•΄λ‹Ή κ²½λ‘œμ— λ§žλŠ” HTML νŒŒμΌμ„ μƒμ„±ν•˜κ±°λ‚˜ 미리 μ€€λΉ„λœ HTML νŒŒμΌμ„ λ°˜ν™˜ν•œλ‹€.

    • νŽ˜μ΄μ§€ μ „ν™˜ μ‹œ λΈŒλΌμš°μ €λŠ” μ„œλ²„μ—μ„œ 전체 HTML νŽ˜μ΄μ§€λ₯Ό 받아와 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ“œν•œλ‹€.

단점) μ™„μ „νžˆ νŽ˜μ΄μ§€ μƒˆλ‘œκ³ μΉ¨ β†’ νŽ˜μ΄μ§€ μ „ν™˜μ΄ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…μ— λΉ„ν•΄ 느릴 수 μžˆλ‹€.

μž₯점

  • λΉ λ₯Έ 초기 λ‘œλ“œ

    • μ„œλ²„μ—μ„œ 미리 μƒμ„±λœ HTML을 μ „λ‹¬ν•˜λ―€λ‘œ, 초기 λ‘œλ“œ μ‹œκ°„μ΄ λΉ λ₯΄λ‹€.

    • 초기 λ‘œλ“œ μ‹œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λͺ¨λ‘ λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•  ν•„μš”κ°€ μ—†λ‹€.

  • SEO μΉœν™”μ 

    • μ„œλ²„μ—μ„œ μ™„μ„±λœ HTML을 μ œκ³΅ν•˜λ―€λ‘œ, 검색 엔진이 μ½˜ν…μΈ λ₯Ό μ‰½κ²Œ 크둀링할 수 μžˆλ‹€.

    • SEOκ°€ μš©μ΄ν•˜λ‹€.

μ‚¬μš© 사둀

전톡적인 MPA(Multi-Page Application)μ—μ„œ μ‚¬μš©. 예) μ„œλ²„ λ Œλ”λ§μ„ μ‚¬μš©ν•˜λŠ” μ›Ή ν”„λ ˆμž„μ›Œν¬(Django, Ruby on Rails, ASP.NET λ“±)와 Next.jsμ—μ„œ SSR(Server-Side Rendering)을 μ‚¬μš©ν•˜λŠ” 경우


비ꡐ μš”μ•½

Client-Side Routing
Server-Side Routing

λΈŒλΌμš°μ €μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ URL λ³€κ²½ 관리

μ„œλ²„μ—μ„œ 각 νŽ˜μ΄μ§€ μš”μ²­μ— λŒ€ν•΄ HTML νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ 제곡

μΌλΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈ

μ™„μ „ν•œ νŽ˜μ΄μ§€ μƒˆλ‘œκ³ μΉ¨

초기 λ‘œλ“œ μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 수 있음

초기 λ‘œλ“œ μ‹œκ°„μ΄ 빠름

SEO에 λΆˆλ¦¬ν•¨

SEO에 μœ λ¦¬ν•¨

주둜 SPAμ—μ„œ μ‚¬μš©

주둜 MPAμ—μ„œ μ‚¬μš©

Last updated