Routing

๋ผ์šฐํŒ…์ด๋ž€?

์š”์ฒญํ•œ ๊ฒฝ๋กœ(URL)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŽ˜์ด์ง€(์ปดํฌ๋„ŒํŠธ)๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

SPA Routing

์ง€์ •๋œ URL์— ๋”ฐ๋ผ ๋ณด์—ฌ์ค„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

SPA(Single Page Application)๋Š” ์ดˆ๊ธฐ์— ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€(HTML)๋ฅผ ๋ฐ›์•„์˜ค๊ณ , ์ดํ›„์— ๋ธŒ๋ผ์šฐ์ €์˜ History API๋ฅผ ์ด์šฉํ•˜์—ฌ URL์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ํ•ด๋‹น URL์— ๋งค์นญ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€ ์ „ํ™˜ ์—†์ด URL์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋ Œ๋”๋ง ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

Web APIs

๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” API๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. (DOM ์ œ์–ด, ๋ธŒ๋ผ์šฐ์ € ํƒ์ƒ‰ ๊ธฐ๋ก, ์‚ฌ์šฉ์ž ์œ„์น˜์ •๋ณด, URL ์ •๋ณด ๋“ฑ)

Window.history

๋ธŒ๋ผ์šฐ์ €์˜ ํƒ์ƒ‰ ๊ธฐ๋ก์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” API

์ฃผ์†Œ ํ‘œ์‹œ์ค„, ๋’ค๋กœ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ๋“ฑ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๋ฅผ ์ œ์–ดํ•œ๋‹ค.

Methods

Methods
Arguments
Explain

.pushState(state, title, url)

  • state โ†’ ์ƒˆ๋กœ์šด History ํ•ญ๋ชฉ์— ์—ฐ๊ฒฐํ•  ์ƒํƒœ ๊ฐ์ฒด, ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค popstate ์ด๋ฒคํŠธ ํ˜ธ์ถœ

  • title โ†’ ์•„์ง ์“ฐ์ด์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ, ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด "" ๋ผ๋„ ์„ค์ •ํ•˜๋ผ๊ณ  ๊ถŒ๊ณ ํ•œ๋‹ค.

  • url โ†’ ์ด๋™ํ•  URL, ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” pushState ํ›„์— ํ•ด๋‹น URL๋กœ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Œ, ์ฆ‰ url๋งŒ ์ˆ˜์ •

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์„ธ์…˜ History Stack์— ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€

  • ํ•ด๋‹น URL๋กœ ์ด๋™

.replaceState(state, title, url)

  • ํ˜„์žฌ History๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด

  • ํ•ด๋‹น URL๋กœ ์ด๋™.

.back()

  • ์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™

.forward()

  • ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ์ด๋™

.go(num)

  • num โ†’ ์ƒ๋Œ€์ ์ธ page index

  • ์ง€์ •ํ•œ ํŽ˜์ด์ง€๋งŒํผ ์ด๋™

popstate event

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋’ค/์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜, ๋ธŒ๋ผ์šฐ์ €์˜ ์„ธ์…˜ ๊ธฐ๋ก์„ ์กฐ์ž‘ํ•˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.

  • popstate ์ด๋ฒคํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ด๋ฅผ ์ด์šฉํ•ด์„œ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ์‹œํ‚จ๋‹ค.

const routes = {
  '/': homePage,
  '/dashboard': dashboardPage,
  '/order': orderPage,
};

window.onpopstate = () => {
  root.innerHTML = routes[window.location.pathname];
}

Window.location

ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ฃผ์†Œ(URL)์— ๋Œ€ํ•œ ์ •๋ณด์™€ ์ƒˆ๋กœ๊ณ ์นจ, ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ์ฒด

window.location์€ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํ•ด๋‹น ๊ฐ์ฒด๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • window.location

  • window.document.location

  • document.location

  • location

Properties

origin์„ ์ œ์™ธํ•œ ํ”„๋กœํผํ‹ฐ๋Š” ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜๋‹ค.

property๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํŽ˜์ด์ง€ ์ด๋™์ด ์ผ์–ด๋‚œ๋‹ค.

URL: https://devload.com/routing?filter=routing#window.location

window.location Property
Explain

.origin

  • Base URL์— ๋Œ€ํ•œ ์ •๋ณด

  • protocol + host name + port number

  • https;//devload.com

.protocol

  • ํ”„ํ† ํ† ์ฝœ (http:, https:)

  • https:

.host

  • ํ˜ธ์ŠคํŠธ ๋ช… (๋„๋ฉ”์ธ ๋ช… + ํฌํŠธ ๋ฒˆํ˜ธ)

  • devload.com

.hostname

  • ๋„๋ฉ”์ธ ๋ช…

  • devload.com

.port

  • ํฌํŠธ ๋ฒˆํ˜ธ

  • ''

.pathname

  • / ๋‹ค์Œ์— ์˜ค๋Š” ๊ฒฝ๋กœ

  • /routing

.search

  • ? ๋‹ค์Œ์— ์˜ค๋Š” query string

  • ?filter-routing

.hash

  • # ๋’ค์— ์˜ค๋Š” Fragment Ideintifier

  • #window.location

.href

  • URL ์ „์ฒด ๊ฐ’

  • https://devload.com/routing?filter=routing#window.location

Query String์ด๋ž€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด(์ฃผ๋กœ GET ์š”์ฒญ) ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ ? ๋’ค์— key:value ์Œ์œผ๋กœ ๊ตฌ๋ถ„์ง€์–ด ๋‚˜์—ดํ•œ๋‹ค.

Fragment Identifier๋ž€ URI ๋‚ด์—์„œ ํŠน์ • ๋ฆฌ์†Œ์Šค ์กฐ๊ฐ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž์ด๋‹ค. HTML ๋‚ด์—์„œ ํŠน์ • ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋จ

Methods

Methods

.assign()

  • ์ง€์ •๋œ URL๋กœ ์ด๋™ ํ•œ๋‹ค

.replace()

  • ์ง€์ •๋œ URL๋กœ ์ด๋™ ํ•œ๋‹ค

  • ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ํƒ์ƒ‰ ๊ธฐ๋ก์—์„œ ์ง€์šด๋‹ค

.reload()

  • ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ

.toString()

  • URL ๋ฐ˜ํ™˜

  • window.location.href<readonly>

Last updated