4.Navigation
Web APIs - History
์น ๊ฐ๋ฐ์์ History API๋ ๊ฐ๋ฐ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ก์ ์กฐ์ํ๊ณ ์ํธ ์์ฉํ ์ ์๋๋ก ์น ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ ๋ฉ์๋ ๋ฐ ์์ฑ ์งํฉ์ด๋ค. History API๋ ํ์ ๊ธฐ๋ก์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์๋ค๋ก ํ์ํ๊ณ URL์ ์์ ํ๊ณ ํ์ ์ด๋ฒคํธ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
History API์ ์ฃผ์ ๊ตฌ์ฑ ์์
๊ธฐ๋ก ๊ฐ์ฒด(The history Object): ๊ธฐ๋ก API์ ์ค์ฌ ๊ฐ์ฒด๋ ๋ธ๋ผ์ฐ์ ์ ์ธ์ ๊ธฐ๋ก์ ๋ํ๋ด๋ ๊ธฐ๋ก ๊ฐ์ฒด๋ค. window.history ์์ฑ์ ํตํด ์ก์ธ์คํ ์ ์๋ค. ๊ธฐ๋ก ๊ฐ์ฒด๋ ๊ฒ์ ๊ธฐ๋ก์ ํ์ํ๊ณ ์ํธ ์์ฉํ ์ ์๋ ๋ฉ์๋์ ์์ฑ์ ์ ๊ณตํ๋ค.
๊ธฐ๋ก ํ์(Navigating History): ๊ธฐ๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ๊ฒ์ ๊ธฐ๋ก์ ํ์ํ ์ ์๋ค.
์ฌ์ฉ๋ฒ
go(): ์ฃผ์ด์ง ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์คํ ๋ฆฌ์ ํน์ ์ง์ ์ผ๋ก ์ด๋ํ๋ค. ์์ ๊ฐ์ ์์ผ๋ก ์ด๋ํ๊ณ ์์ ๊ฐ์ ๋ค๋ก ์ด๋ํ๋ค. ์๋ฅผ ๋ค์ด history.go(-1)๋ ํ ํ์ด์ง ๋ค๋ก ์ด๋ํ๋ค.
back(): history.go(-1)์ ๋์ผํ๋ฉฐ ํ ํ์ด์ง ๋ค๋ก ์ด๋ํ๋ค.
forward(): history.go(1)์ ๋์ผํ๋ฉฐ ํ ํ์ด์ง ์์ผ๋ก ์ด๋ํ๋ค.
pushState(): ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ก ์คํ์ ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. state(์ ๊ธฐ๋ก ํญ๋ชฉ๊ณผ ๊ด๋ จ๋ ์ํ ๊ฐ์ฒด), unused(๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ํ์ฌ ๋ฌด์๋๋ ์ ํญ๋ชฉ์ ์ ๋ชฉ) ๋ฐ url(์ URL)์ ์ธ ๊ฐ์ง ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
replaceState(): ํ์ฌ ๊ธฐ๋ก ํญ๋ชฉ์ ์ ํญ๋ชฉ์ผ๋ก ๋ฐ๊ฟ๋๋ค. pushState()์ ๋์ผํ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ง๋ง ์ ํญ๋ชฉ์ ๋ง๋๋ ๋์ ํ์ฌ ํญ๋ชฉ์ ๋ฐ๊ฟ๋๋ค.
์ฝ๊ธฐ ๊ธฐ๋ก(Reading History): ๊ธฐ๋ก ๊ฐ์ฒด๋ ๊ฒ์ ๊ธฐ๋ก์ ๋ํ ์ ๋ณด์ ์ก์ธ์คํ ์ ์๋ ์์ฑ์ ์ ๊ณตํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ผ๋ถ ์์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
length: ํ์คํ ๋ฆฌ ์คํ์ ํญ๋ชฉ ์๋ฅผ ๋ฐํํ๋ค.
state: ํ์ฌ ๊ธฐ๋ก ํญ๋ชฉ๊ณผ ๊ด๋ จ๋ ์ํ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
๋ด๋น๊ฒ์ด์ ์ด๋ฒคํธ ์ฒ๋ฆฌ(Handling Navigation Events): History API๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ ํ์ด์ง๋ก ์ด๋ํ๊ฑฐ๋ URL์ด ๋ณ๊ฒฝ๋ ๋์ ๊ฐ์ ๋ด๋น๊ฒ์ด์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์๋ ์๋ค. PopStateEvent๋ ์ฌ์ฉ์๊ฐ go(), back() ๋๋ forward()์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ก์ ํ์ํ ๋ ํธ๋ฆฌ๊ฑฐ๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์์ ํ์ฌ ๊ทธ์ ๋ฐ๋ผ ์์ ์ ์ํํ๊ฑฐ๋ UI๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ค.
URL ์กฐ์(Manipulating URLs): History API๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ ํ์๋ URL์ ์์ ํ ์ ์๋ค. ์์์ ์ธ๊ธํ pushState() ๋ฐ replaceState() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ URL์ ๋ณ๊ฒฝํ๊ณ ๊ธฐ๋ก ํญ๋ชฉ์ ์ถ๊ฐ/์ ๋ฐ์ดํธํ ์ ์๋ค.
ํธํ์ฑ ๋ฐ ์ ํ(Compatibility and Limitations): History API๋ ์ต์ ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋ค. ๊ทธ๋ฌ๋ ๋ณด์ ๋ฌธ์ ๋ก ์ธํด ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์๋ค. ์๋ฅผ ๋ค์ด ๋ณด์์์ ์ด์ ๋ก ์ฃผ์ ํ์์ค์์ ์ ์ฒด URL์ ์ง์ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์๋ค. URL ๊ฒฝ๋ก, ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์ ๋ฐ ์กฐ๊ฐ๋ง ์์ ํ ์ ์๋ค.
React Router - NavLink, Link, Navigate, useNavigate
React Router์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ค๋น๊ฒ์ด์ ์ปดํฌ๋ํธ๋ค์ ์ ๊ณตํ๋ค
Link: HTML์ a ํ๊ทธ์ ์ ์ฌํ์ง๋ง ํ์ด์ง ์ ํ์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๋ค.
NavLink: Link์ ํน์ ๋ฒ์ ์ผ๋ก, ํน์ ๋งํฌ์ ์คํ์ผ์ ๋ฃ์ด์ค ์ ์๋ค.
Navigate: ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ํ์ด์ง๋ฅผ ์ด๋ํ ์ ์๊ฒ ํด์ฃผ๋ ์ปดํฌ๋ํธ์ด๋ค.
useNavigate: ํ์ด์ง ์ด๋์ ํ ์ ์๊ฒ ํด์ฃผ๋ ํ ์ด๋ค.
Link์ NavLink๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค:
Navigate์ useNavigate๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค
Last updated