์ธ๊ณ๋ฐ์ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๋ ์ค ์ฌ๋ฐ๋ ์ํฉ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ก๊ทธ์ธ ํ ํ ํ๋ฉด์์ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด, ๋ค์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ๋ ๋ฌธ์ ์์ต๋๋ค. ์๋จ์ GNB(๊ธ๋ก๋ฒ ๋ค๋น๊ฒ์ด์ ๋ฐ)๋ฅผ ๋ณด๋ฉด, ๋ก๊ทธ์ธ ์ํ์์ด ๋ถ๋ช ํ๋ฐ, ์ฝํ ์ธ ์์ญ์์ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ํ์๋๋ ๋ถ์์ฐ์ค๋ฌ์ด ์ํฉ์ด์์ต๋๋ค.
์๊ฐํด๋ณด๋ฉด, ๋ก๊ทธ์ธ ์ํ์์๋ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฌ๋ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ํ์๋์ง ์๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด ํ๋ฆ์ผํ ๋ฐ, ์ด ์ํฉ์ UX์ ๋ณด์ ์ธก๋ฉด์์ ์ ์์ ์ธ ์๋น์ค ํ๋ก์ฐ๋ ์๋๋ผ๊ณ ํ๋จํ์ฌ ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฌ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ ์ ์๋๋ก ๋ก๊ทธ์ธ ํ์ด์ง ์ ๊ทผ ์ ํ์ ๊ตฌํํ๊ธฐ๋ก ํ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฒ์์๋ ํ ํฐ ์ ๋ฌด๋ฅผ ํ์ธํด ๋ฆฌ๋ค์ด๋ ํธ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ์ต๋๋ค.
์ด์ ํ๋ก์ ํธ์์๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ถํ ๋ณ ์ ๊ทผ ์ ํ์ ๊ตฌํํ์๊ธฐ์, ์ต์ํ ๋ฐฉ์์ผ๋ก ์๊ฐํ๋ ๊ฒ์ด์ฃ .
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๋ณต์กํ ์์ ์์ด ๋จ ํ ์ค๋ก ํด๊ฒฐ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
๋ฐ๋ก router.push ๋์ router.replace๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์์ต๋๋ค.
//๊ธฐ์กด ์ฝ๋
router.push('/home');
//์์ ํ ์ฝ๋
router.replace('/home');
์ฝ๋ ํ ์ค๋ง ๋ฐ๊ฟจ์ ๋ฟ์ธ๋ฐ, ์ด์ ํ ํ๋ฉด์์ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฌ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ ์ ์๊ฒ ๋์์ต๋๋ค.
router.push์ router.replace์ ์ฐจ์ด
Next.js์์ router.push์ router.replace๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ค๋น๊ฒ์ด์ ์ ์ํ ๋ฉ์๋์ ๋๋ค. ํ์ง๋ง ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ ์คํ๊ณผ ๊ด๋ จํด ์ค์ํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
ํ์คํ ๋ฆฌ ์คํ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง ํ์ ๊ธฐ๋ก์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ ํ์ด์ง๋ฅผ ์์๋๋ฉฐ, ๋ค๋ก๊ฐ๊ธฐ/์์ผ๋ก๊ฐ๊ธฐ ๋ฑ์ผ๋ก ์ด์ ๊ธฐ๋ก์ผ๋ก ๋์๊ฐ ์ ์๊ฒ ํฉ๋๋ค.
router.push
router.push๋ ํ์ฌ ํ์คํ ๋ฆฌ ์คํ์ ์๋ก์ด ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ์ด์ ํ์ด์ง๋ก ์ ๊ทผ ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ํ์ด์ง ์ด๋์ ์ ํฉํ ๋ค๋น๊ฒ์ด์ ๋ฐฉ์์ ๋๋ค.
router.replace
router.replace๋ ํ์ฌ ํ์คํ ๋ฆฌ ์คํ์ ๋ฎ์ด์๋๋ค. push์ฒ๋ผ ์คํ์ ์ถ๊ฐํ๋๊ฒ ์๋์ด์ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฌ๋ ์ด์ ํ์ด์ง๋ก ๋์๊ฐ์ง ์๊ณ , ์ด์ ํ์ด์ง์ ์ด์ ํ์ด์ง๋ก ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค. ๋ณด์ ๋๋ UX ๊ด์ ์์ ์ด์ ํ์ด์ง๋ก ๋์๊ฐ๋ฉด ์ ๋๋ ์ํฉ์ ์ ํฉํฉ๋๋ค.
์ง์ ํ์คํ ๋ฆฌ ์คํ์ ๋น๊ตํด๋ณด๋ฉด์ ํ์ธํด๋ด ์๋ค. ํ์คํ ๋ฆฌ ์คํ ๊ธธ์ด๋ window.history๋ก ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
"use client";
import { useRouter } from "next/navigation";
import { useEffect } from "react";
export default function Home() {
const router = useRouter();
useEffect(() => {
console.log(`ํ์คํ ๋ฆฌ ์คํ: ${window.history.length}`);
}, []);
return (
<div>
<h1>๋ก๊ทธ์ธ ํ์ด์ง</h1>
<div>router.push ํ์คํ ๋ฆฌ ์คํ</div>
<button
className="bg-red-400"
type="button"
onClick={() => router.push("/main")}>
๋ก๊ทธ์ธ
</button>
</div>
);
}
router.push๋ฅผ ์ฌ์ฉํ๋ ๋ก๊ทธ์ธ ํ์ด์ง์ ํ์คํ ๋ฆฌ ์คํ ์ถ๋ ฅ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์์ต๋๋ค. ์ ์ฝ๋๋ฅผ ์คํํ๊ณ , ํ์คํ ๋ฆฌ ์คํ์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. router.push ํ ์คํธ
๊ฒฝ๋ก: ๋ธ๋ผ์ฐ์ ์ ํญ -> localhost:3000 -> localhost:3000/main-> [๋ค๋ก๊ฐ๊ธฐ] -> localhost:3000
- ์ ํญ์ ๋์ฐ๊ณ , localhost:3000์ผ๋ก ์ ๊ทผํ๋ฉด ํ์คํ ๋ฆฌ ์คํ์ 2์ ๋๋ค.
- ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ์ฌ /main์ผ๋ก ์ด๋ํ๋ฉด ํ์คํ ๋ฆฌ ์คํ์ด 3์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
- ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ๋ค์ localhost:3000์ผ๋ก ๋์๊ฐ๋ฉฐ, ํ์คํ ๋ฆฌ ์คํ์ 3์ ์ ์งํฉ๋๋ค.



๋ค์์ผ๋ก๋ router.replace์ ํ์คํ ๋ฆฌ ์คํ์ ๋๋ค. ์์ ์ฝ๋์์ router.push๋ฅผ router.replace๋ก ๋ณ๊ฒฝํ๊ณ ์คํํด๋ด ์๋ค.
2. router.replace ํ ์คํธ
๊ฒฝ๋ก: ๋ธ๋ผ์ฐ์ ์ ํญ -> localhost:3000 -> localhost:3000/main-> [๋ค๋ก๊ฐ๊ธฐ] -> ์ ํญ
- ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฌ๋ ํ์คํ ๋ฆฌ ์คํ์ด ์ฆ๊ฐํ์ง ์๊ณ 2 ์ ์ง
- ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฌ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ์ง ์๊ณ ํญ ์ด๊ธฐ ์ํ๋ก ์ด๋



replace๋ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๊ฒ์ด ์๋๋ผ, ํ์ฌ ํ์ด์ง๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๊ฐ๋ (ํ์คํ ๋ฆฌ๋ฅผ ๋ฎ์ด์)์ผ๋ก ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
router.replace๋ฅผ ํตํด ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ๋ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
์ด๋ฒ ๊ฒฝํ์ ํตํด ์์ ์ฝ๋ ์์ ํ๋๊ฐ ์๋น์ค ํ๋ฆ์ ์ผ๋ง๋ ํฌ๊ฒ ๊ฐ์ ํ ์ ์๋์ง ๊ฒฝํํ์ต๋๋ค.. ํญ์ ์ต๊ด์ ์ผ๋ก router.push๋ถํฐ ์น๊ณ ๋ดค๋๋ฐ, ์์ผ๋ก๋ ํ์ด์ง ํ๋ฆ์ ๋งค๋๋ฝ๊ฒ ๋ง๋๋ ๋ํ ์ผ์ ๊ณ ๋ฏผํ์ฌ ์ฝ๋๋ฅผ ์์ฑํด์ผ๊ฒ ์ต๋๋ค.
'๐ฅ๏ธdevelop > Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Electron] Vibeํ๊ฒ ์ผ๋ ํธ๋ก ์์ํ๊ธฐ (2) | 2025.03.30 |
---|---|
[FE] PWA์ A to Z (0) | 2025.02.16 |
[Three.js] Three.js๋ฅผ ์์ํด๋ณด์ (0) | 2024.10.27 |