2.Routes

๋ผ์šฐํ„ฐ๋ž€?

์›น ๊ฐœ๋ฐœ ๋งฅ๋ฝ์—์„œ ๋ผ์šฐํ„ฐ๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๊ธฐ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ํŠน์ • ์ž‘์—…์ด๋‚˜ ๊ธฐ๋Šฅ์— ์„œ๋กœ ๋‹ค๋ฅธ URL ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋””๋ ‰ํ„ฐ ์—ญํ• ์„ ํ•œ๋‹ค.

  1. URL ๋ผ์šฐํŒ…: ๋ผ์šฐํ„ฐ์˜ ์ฃผ์š” ์ฑ…์ž„์€ URL ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ํŠน์ • ์ž‘์—… ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • URL์„ ์š”์ฒญํ•˜๋ฉด ๋ผ์šฐํ„ฐ๋Š” URL์„ ๊ฒ€์‚ฌํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ์ ์ด๊ณ  ์กฐ์ง์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  2. ์ฒ˜๋ฆฌ๊ธฐ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๋งคํ•‘: ๋ผ์šฐํ„ฐ๋Š” URL๊ณผ ํ•ด๋‹น URL์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ๋‹ค. ํŠน์ • URL ๋˜๋Š” ํŒจํ„ด์„ ํ•ด๋‹น ์ฒ˜๋ฆฌ๊ธฐ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ธฐ๋Šฅ๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ทœ์น™ ๋˜๋Š” ๋งคํ•‘์„ ์ •์˜ํ•œ๋‹ค. ์š”์ฒญ์ด ์ •์˜๋œ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜๋ฉด ๊ด€๋ จ ์ฒ˜๋ฆฌ๊ธฐ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ ์ ˆํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค.

  3. ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜: ๋ผ์šฐํ„ฐ๋Š” URL์˜ ๋™์  ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ•ธ๋“ค๋Ÿฌ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ธฐ๋Šฅ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ๋…์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ธ”๋กœ๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ "/posts/:id"์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋Š” ์ œ๊ณต๋œ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์™€ ํ‘œ์‹œํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์— ๋งคํ•‘๋  ์ˆ˜ ์žˆ๋‹ค.

  4. HTTP ๋ฐฉ๋ฒ•: ๋ผ์šฐํ„ฐ๋Š” ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” HTTP ๋ฐฉ๋ฒ•(์˜ˆ: GET, POST, PUT, DELETE)์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๊ธฐ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ URL์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์•ก์…˜์„ ์„œ๋กœ ๋‹ค๋ฅธ HTTP ๋ฉ”์„œ๋“œ์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "/users"์— ๋Œ€ํ•œ GET ์š”์ฒญ์€ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด ๋™์ผํ•œ URL์— ๋Œ€ํ•œ POST ์š”์ฒญ์€ ์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  5. ๋ฏธ๋“ค์›จ์–ด ํ†ตํ•ฉ: ๋ผ์šฐํ„ฐ๋Š” ์ข…์ข… ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค. ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ์€ ๋ฉ”์ธ ํ•ธ๋“ค๋Ÿฌ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ธฐ๋Šฅ ์ „ํ›„์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ๊ธฐ๋Šฅ์ด๋‹ค. ์ธ์ฆ, ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋กœ๊น… ๋˜๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ์ˆœ์„œ๋กœ ์‹คํ–‰๋˜๋„๋ก ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  6. ์ค‘์ฒฉ ๋ผ์šฐํŒ…: ๋ผ์šฐํ„ฐ๋Š” ์ค‘์ฒฉ ๋˜๋Š” ๊ณ„์ธต์  ๋ผ์šฐํŒ…์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฝ๋กœ ๋‚ด์—์„œ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ, ๋ชจ๋“ˆ ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ์ค‘์ฒฉ๋œ ๋ผ์šฐํŒ…์„ ํ†ตํ•ด ๋” ๋‚˜์€ ์ฝ”๋“œ ๊ตฌ์„ฑ๊ณผ ๋ฌธ์ œ ๋ถ„๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ๋‹ค.

  7. ํ”„๋ ˆ์ž„์›Œํฌ ํ†ตํ•ฉ: ๋ผ์šฐํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ URL ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. Node.js์šฉ Express.js, Python์šฉ Django ๋˜๋Š” Ruby on Rails์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฒฝ๋กœ ์ •์˜ ๋ฐ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋‚ด์žฅ ๋ผ์šฐํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ข…์ข… ๊ฒฝ๋กœ ๊ทธ๋ฃนํ™”, ๊ฒฝ๋กœ ์ด๋ฆ„ ์ง€์ • ๋ฐ ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ „๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํ„ฐ๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ •์˜๋œ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ์ ˆํ•œ ์ฝ”๋“œ ํ•ธ๋“ค๋Ÿฌ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ณด๋‚ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. ๋‹ค์–‘ํ•œ URL ๋ฐ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ ์ด๊ณ  ์œ ์—ฐํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์กฐ์งํ™”๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

React Router

React Router๋Š” React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์–‘ํ•œ URL์„ ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ๋ณด๊ธฐ์— ๋งคํ•‘ํ•˜์—ฌ ๋™์ ์ด๊ณ  ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ง‘ํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค. React Router๋Š” ์†Œ๊ทœ๋ชจ ๋ฐ ๋Œ€๊ทœ๋ชจ React ํ”„๋กœ์ ํŠธ ๋ชจ๋‘์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค.

๋‹ค์Œ์€ React Router์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๊ธฐ๋Šฅ์ด๋‹ค.

  1. BrowserRouter: ์ด ๊ตฌ์„ฑ ์š”์†Œ๋Š” HTML5 ํžˆ์Šคํ† ๋ฆฌ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. URL์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ •์˜๋œ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ์ ˆํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ตœ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  2. Route: ๊ฒฝ๋กœ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๊ฐœ๋ณ„ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ฒฝ๋กœ์™€ ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•  ๋•Œ ๋ Œ๋”๋งํ•  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <Route path="/home" element={<Home />} />์€ URL์ด "/home"๊ณผ ์ผ์น˜ํ•  ๋•Œ ํ™ˆ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

  3. Link ๋ฐ NavLink: ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ ์‚ฌ์ด๋ฅผ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งํฌ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์•ต์ปค ํƒœ๊ทธ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜์ง€ ์•Š๊ณ  URL ๋ณ€๊ฒฝ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. NavLink ๊ตฌ์„ฑ ์š”์†Œ๋Š” Link์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ˜„์žฌ ํ™œ์„ฑ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํƒ€์ผ ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  4. Routes: Routes ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋…์ ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ๋™์‹œ์— ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๋งŒ ์ผ์น˜ํ•˜๊ณ  ๋ Œ๋”๋ง๋˜๋„๋ก ํ•˜๋ ค๋ฉด ๊ฒฝ๋กœ๋ฅผ Routes ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ž˜ํ•‘ํ•ด์•ผ ํ•œ๋‹ค.

  5. Route Parameters: React Router๋Š” ๋™์  ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜(Dynamic Route Parameters)๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€๋ณ€ ์„ธ๊ทธ๋จผํŠธ๋กœ URL ํŒจํ„ด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ฒฝ๋กœ ๊ฒฝ๋กœ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋’ค์— ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <Route path="/users/:id" element={<User />} />๋Š” "/users/123"๊ณผ ๊ฐ™์€ ๋ชจ๋“  URL๊ณผ ์ผ์น˜ํ•˜๊ณ  "123" ๊ฐ’์„ ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ ์š”์†Œ์— ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.

  6. ์ค‘์ฒฉ ๋ผ์šฐํŒ…(Nested Routing): React Router๋Š” ์„œ๋กœ์˜ ์ค‘์ฒฉ ๊ฒฝ๋กœ๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•œ ๋ผ์šฐํŒ… ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ค‘์ฒฉ ๊ฒฝ๋กœ๋Š” <Route> ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค๋ฅธ <Route> ๊ตฌ์„ฑ ์š”์†Œ ์•ˆ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค๋ฅธ ์„น์…˜ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  7. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ํƒ์ƒ‰: React Router๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ํƒ์ƒ‰์„ ํ—ˆ์šฉํ•˜๋Š” ํ›„ํฌ์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. useNavigate ํ›„ํฌ๋Š” navigate('/') ๋˜๋Š” navigate(-1)์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ก ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  8. ๋ฃจํŠธ ๊ฐ€๋“œ(Route Guards): React Router๋Š” ๋ฃจํŠธ ๊ฐ€๋“œ ๋˜๋Š” ์ธ์ฆ ํ™•์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋„ ์ œ๊ณตํ•œ๋‹ค. ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ฒฝ๋กœ๋ฅผ ๋ž˜ํ•‘ํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์ธ์ฆ ์ƒํƒœ ๋˜๋Š” ๊ธฐํƒ€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํŠน์ • ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

interface NavigateFunction {
  (
    to: To,
    options?: {
      replace?: boolean;
      state?: any;
      relative?: RelativeRoutingType;
    }
  ): void;
  (delta: number): void;
}

Browser Router

<BrowserRouter>๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์— ๊นจ๋—ํ•œ URL์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋œ ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ƒ‰ํ•œ๋‹ค.

<BrowserRouter>์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ๋ฌธ์„œ์˜ ๊ธฐ๋ณธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด <iframe>์—์„œ ๋‹ค๋ฅธ ์ฐฝ์˜ URL์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Route

๋ผ์šฐํŠธ๋Š” ์•„๋งˆ๋„ React ๋ผ์šฐํ„ฐ ์•ฑ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ผ ๊ฒƒ์ด๋‹ค. URL ์„ธ๊ทธ๋จผํŠธ์™€ ์ปดํฌ๋„ŒํŠธ, ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณ€ํ˜•์„ ์—ฐ๊ฒฐํ•œ๋‹ค. ๊ฒฝ๋กœ ์ค‘์ฒฉ์„ ํ†ตํ•ด ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์•„์›ƒ๊ณผ ๋ฐ์ดํ„ฐ ์ข…์†์„ฑ์„ ๋‹จ์ˆœํ•˜๊ณ  ์„ ์–ธ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

Memory Router

MemoryRouter๋Š” React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ผ์šฐํŒ…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” React Router์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ URL ๋ฐ ๊ธฐ๋ก API๋ฅผ ํ™œ์šฉํ•˜๋Š” BrowserRouter ๋˜๋Š” HashRouter์™€ ๋‹ฌ๋ฆฌ MemoryRouter๋Š” ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € URL์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ผ์šฐํŒ… ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค.

  1. ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ผ์šฐํŒ…(In-Memory Routin): MemoryRouter๋Š” ์ฃผ๋กœ ํ…Œ์ŠคํŠธ ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ URL์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ผ์šฐํŒ… ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์— ์‚ฌ์šฉ๋œ๋‹ค. URL์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์ด ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ผ์šฐํŒ… ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

  2. ๋ธŒ๋ผ์šฐ์ € ์ข…์†์„ฑ ์—†์Œ(No Browser Dependency): MemoryRouter๋Š” <BrowserHistory> ๋ฐ <HashHistory>์™€ ๋‹ฌ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €์˜ ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ๊ณผ ๊ฐ™์€ ์™ธ๋ถ€ ์†Œ์Šค์™€ ๋…๋ฆฝ์ ์ด๋‹ค. ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ €์˜ URL์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ๋ผ์šฐํŒ… ๊ตฌ์„ฑ(Routing Configuration): ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ MemoryRouter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด <Route> ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ๋กœ์™€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ MemoryRouter ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ž์‹์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

  4. ๊ฒฝ๋กœ ๋ Œ๋”๋ง(Route Rendering): MemoryRouter๋Š” ์ •์˜๋œ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ๋กœ์™€ ๊ด€๋ จ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. ๊ฒฝ๋กœ ๊ฒฝ๋กœ๊ฐ€ ํ˜„์žฌ URL(๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋Œ€๋กœ)๊ณผ ์ผ์น˜ํ•˜๋ฉด ์—ฐ๊ฒฐ๋œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค. MemoryRouter๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ URL์ด๋‚˜ ํƒ์ƒ‰ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋‹ค.

  5. ํžˆ์Šคํ† ๋ฆฌ ๊ฐ์ฒด(History Object): MemoryRouter๋Š” BrowserRouter ๋˜๋Š” HashRouter์™€ ์œ ์‚ฌํ•œ ํžˆ์Šคํ† ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ธฐ๋ก ๊ฐœ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์œผ๋ฉฐ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ก์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋“ฃ๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋ผ์šฐํŒ… ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  6. ์œ„์น˜ ๊ฐ์ฒด(Location Object): MemoryRouter๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—์„œ ํ˜„์žฌ URL์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ„์น˜ ๊ฐ์ฒด๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ˜„์žฌ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ๋กœ ์ด๋ฆ„, ๊ฒ€์ƒ‰, ํ•ด์‹œ ๋ฐ ์ƒํƒœ์™€ ๊ฐ™์€ ์†์„ฑ์ด ํฌํ•จ๋œ๋‹ค.

MemoryRouter๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ URL์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋ผ์šฐํŒ…์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์œ ์šฉํ•œ ๋„๊ตฌ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ผ์šฐํŒ…์„ ํ—ˆ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ์œ ์‚ฌํ•œ API๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ ๊ตฌํ˜„ ๊ฐ„์— ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated