โœ๐Ÿป [Code Camp_TIL] 5์ผ์ฐจ: Static Routing, Dynamic Routing

code_Jยท2023๋…„ 3์›” 20์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
6/41
post-thumbnail

ํŽ˜์ด์ง€ ์ด๋™: ๋ผ์šฐํŒ…(routing)


๋ผ์šฐํŒ…์€ ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ์ด๋‹ค. ๋งŒ์•ฝ a ํŽ˜์ด์ง€์—์„œ b ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค๋ฉด, "b ํŽ˜์ด์ง€๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค"๋ผ๊ณ  ๋งํ•œ๋‹ค.

๋ผ์šฐํŒ…์€ React ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋ถ„์•ผ์—์„œ ์“ฐ์ด๋Š” ๊ฐœ๋…์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ผ์šฐํŒ…์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•ด๋ณด๋ ค๋ฉด "๋ฆฌ์•กํŠธ ๋ผ์šฐํŒ…"์ด๋ผ๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋ผ์šฐํ„ฐ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const router = useRouter()
router.push("์ด๋™ํ•  ํŽ˜์ด์ง€")

router.push๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

import { useRouter } from "next/router"; //next.js์—์„œ router ์ œ๊ณต

export default function StaticRoutingPage() {
  const router = useRouter();

  //์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜
  const onClickMove = () => {
    router.push("/section05/05-01-static-routing-moved");
  };

  return <button onClick={onClickMove}>ํŽ˜์ด์ง€ ์ด๋™ํ•˜๊ธฐ!!!</button>;
}

Router๋Š” push์™ธ์— ๋‹ค๋ฅธ ๋งค์„œ๋“œ๋„ ๋งŽ์ด ์žˆ๋‹ค.

Router method: https://nextjs.org/docs/api-reference/next/router

๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ ์‹ค์Šต์„ ํ•˜๋ฉด์„œ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•ด์„œ ๋“ฑ๋กํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค. ์ด์ œ routing์„ ํ™œ์šฉํ•ด์„œ ๋“ฑ๋กํ•œ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋“ฑ๋ก ํŽ˜์ด์ง€์—์„œ ์กฐํšŒ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค!! ์ด๋ฅผ ์œ„ํ•ด์„œ ๋„ฃ์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const {data} = useQuery(FETCH_BOARD)

useQuery๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ data์— ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.



์ •์ ๋ผ์šฐํŒ…๊ณผ ๋™์ ๋ผ์šฐํŒ…

์ •์ ๋ผ์šฐํŒ…(static routing): ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์ฒ˜๋Ÿผ ๋ˆ„๊ฐ€ ์–ธ์ œ ์ ‘์†ํ•ด๋„ ํ•ญ์ƒ ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€๋กœ์˜ ์ด๋™
๋™์ ๋ผ์šฐํŒ…(dynamic routing): ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ์ผ์„ ์ฒ˜๋ฆฌ

์•ž์„œ ์–ด๋– ํ•œ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด, ๊ทธ ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒŒ์‹œ๊ธ€์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์ด๊ฒƒ๋“ค์„ ์ผ์ผ์ด ์กฐํšŒํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฒƒ๋“ค์„ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋ฐ”๋กœ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•˜๋ฉด ๋œ๋‹ค! next.js ์—์„œ๋Š” ๋™์ ๋ผ์šฐํŒ…์„ ์ œ๊ณตํ•˜๊ณ , ๋™์  ๋ผ์šฐํŒ…์„ ์ด์šฉํ•ด์„œ ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๋“ค์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์œ„์˜ ํด๋” ๊ตฌ์กฐ์™€ ๊ฐ™์ด ํด๋” ์ด๋ฆ„์˜ ํ•˜์œ„ ํด๋”๋กœ [boardId] ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ด ์•ˆ์— jsํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋™์  ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€๊ด„ํ˜ธ๋ฅผ ๋ถ™์ด๋ฉด ๋Œ€๊ด„ํ˜ธ ์•ˆ์˜ ๋‚ด์šฉ์„ ์ฃผ์†Œ๋กœ ๋ณด์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋กœ ๋ณด๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋‹ค!

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋‚˜ ๊ฒŒ์‹œ๊ธ€ ๋ฒˆํ˜ธ๊ฐ€ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์“ฐ์ธ ๋ณ€์ˆ˜๋ช…์— ๋‹ด๊ฒจ์ ธ ๊ทธ ๋ณ€์ˆ˜ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ๋กœ router.query = { boardID: 1 } ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด์„œ ์ž๋™์œผ๋กœ ๊ฒŒ์‹œ๊ธ€ ๋ฒˆํ˜ธ๋ฅผ ๊บผ๋‚ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

const router = useRouter()
	router.query = {
    	boardID: 1
    }


profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€