TIL : route vs components

Ramiยท2026๋…„ 1์›” 5์ผ

TodayILearn

๋ชฉ๋ก ๋ณด๊ธฐ
58/61

ํ•œ ์ค„ ์š”์•ฝ

  • routes ๐Ÿ‘‰ โ€œURL์— ์ง์ ‘ ๋Œ€์‘๋˜๋Š” ํŽ˜์ด์ง€ ๋‹จ์œ„ ์ปดํฌ๋„ŒํŠธโ€
  • components ๐Ÿ‘‰ โ€œํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฐ๋“คโ€

1๏ธโƒฃ routes ํด๋”: โ€œํŽ˜์ด์ง€โ€๋ผ๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค

routes/
 โ”œโ”€ home.tsx
 โ”œโ”€ login.tsx
 โ”œโ”€ create-account.tsx
 โ””โ”€ profile.tsx

์ด ํŒŒ์ผ๋“ค์˜ ๊ณตํ†ต์ ์€ ๋ณดํ†ต ์ด๋Ÿฐ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค:

// routes/login.tsx
export default function Login() {
  return (
    <div>
      <h1>๋กœ๊ทธ์ธ</h1>
      {/* ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ์กฐํ•ฉ */}
    </div>
  );
}

routes์˜ ํŠน์ง•

  • URL๊ณผ 1:1 ๋Œ€์‘

    • /login โ†’ login.tsx
    • /profile โ†’ profile.tsx
  • ๋ณดํ†ต ๋ผ์šฐํ„ฐ์—์„œ ์ง์ ‘ import๋จ

  • ํ•œ ํ™”๋ฉด ์ „์ฒด๋ฅผ ์ฑ…์ž„์ง

  • ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Œ

๐Ÿ‘‰ ๊ทธ๋ž˜์„œ
โœ… โ€œ๋ผ์šฐํŠธ = ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€โ€
๋ผ๊ณ  ์ดํ•ดํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.


2๏ธโƒฃ components ํด๋”: โ€œ์žฌ๋ฃŒ / ๋ถ€ํ’ˆ / ๋ธ”๋กโ€

components/
 โ””โ”€ layout.tsx

components์˜ ํŠน์ง•

  • URL๊ณผ ์ง์ ‘์ ์ธ ๊ด€๊ณ„ ์—†์Œ
  • ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ
  • UI ์กฐ๊ฐ / ๋กœ์ง ๋‹จ์œ„

์˜ˆ๋ฅผ ๋“ค๋ฉด:

  • Header
  • Footer
  • Layout
  • Button
  • Input
  • Modal
  • Avatar
  • PostCard
// components/layout.tsx
export default function Layout({ children }) {
  return (
    <>
      <Header />
      <main>{children}</main>
      <Footer />
    </>
  );
}

๐Ÿ‘‰ ์ด Layout์€

  • home์—์„œ๋„
  • profile์—์„œ๋„
  • login์—์„œ๋„
    ํ•„์š”ํ•˜๋ฉด ์–ด๋””๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๊ทธ๋ž˜์„œ ๋ง์”€ํ•˜์‹  ํ‘œํ˜„ ์ค‘ ์ด ๋ถ€๋ถ„์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘‡

ํŽ˜์ด์ง€์— ์‚ฝ์ž…๋˜๋Š” ๊ตฌ์„ฑ์š”์†Œ
์–ด๋””์„œ๋“  ์›ํ•˜๋ฉด ํŽ˜์ด์ง€ ์–ด๋””๋“  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ

โœ”๏ธ ๋งž์Šต๋‹ˆ๋‹ค.


3๏ธโƒฃ App.tsx / main.tsx๊ฐ€ ํ•˜๋Š” ์—ญํ•  (์ค‘์š”)

๋ณดํ†ต ๊ตฌ์กฐ๋Š” ์ด๋ ‡๊ฒŒ ํ˜๋Ÿฌ๊ฐ‘๋‹ˆ๋‹ค:

main.tsx
 โ””โ”€ App.tsx
     โ””โ”€ Router
         โ””โ”€ routes/*
// App.tsx ์˜ˆ์‹œ
<BrowserRouter>
  <Layout>
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/login" element={<Login />} />
    </Routes>
  </Layout>
</BrowserRouter>

์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ:

  • routes โ†’ Router์— ๋“ฑ๋ก๋˜๋Š” ๋Œ€์ƒ
  • components โ†’ routes ์•ˆ์—์„œ ์กฐํ•ฉ๋˜๋Š” ๋Œ€์ƒ

4๏ธโƒฃ ๋น„์œ ๋กœ ํ•œ ๋ฒˆ์— ์ •๋ฆฌ

๐Ÿ  ์›น์‚ฌ์ดํŠธ = ๊ฑด๋ฌผ

  • routes = ๊ฐ ๋ฐฉ

    • ๊ฑฐ์‹ค(Home)
    • ์นจ์‹ค(Profile)
    • ํ˜„๊ด€(Login)
  • components = ๊ฐ€๊ตฌ

    • ์†ŒํŒŒ(Header)
    • ํ…Œ์ด๋ธ”(Button)
    • ์กฐ๋ช…(Layout)

๐Ÿ‘‰ ๋ฐฉ์€ ์ฃผ์†Œ(URL)๊ฐ€ ์žˆ์ง€๋งŒ
๐Ÿ‘‰ ๊ฐ€๊ตฌ๋Š” ์ฃผ์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค


5๏ธโƒฃ ์‹ค๋ฌด ๊ธฐ์ค€์œผ๋กœ ํด๋”๋ฅผ ๋‚˜๋ˆ„๋Š” ํŒ๋‹จ ๊ธฐ์ค€

โ“ ์ด ํŒŒ์ผ์€ ์–ด๋””์— ๋‘ฌ์•ผ ํ• ๊นŒ?

์•„๋ž˜ ์งˆ๋ฌธ์„ ํ•ด๋ณด์„ธ์š”

  1. URL๋กœ ์ง์ ‘ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋‚˜?

    • YES โ†’ routes
  2. ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ๋„ ์žฌ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‚˜?

    • YES โ†’ components
  3. Router์— ๋“ฑ๋ก๋ ๊นŒ?

    • YES โ†’ routes

์ง€๊ธˆ ๊ตฌ์กฐ๋Š” ์ข‹์€๊ฐ€?

โœ… ๋„ค, ์ง€๊ธˆ ๊ตฌ์กฐ๋Š” ์•„์ฃผ ๊ต๊ณผ์„œ์ ์ธ ์ดˆ๊ธฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
ํŠนํžˆ layout.tsx๋ฅผ components์— ๋‘” ๊ฒƒ๋„ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ํ”„๋กœ์ ํŠธ ์ปค์ง€๋ฉด ๋ณดํ†ต ์ด๋ ‡๊ฒŒ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค:

components/
 โ”œโ”€ layout/
 โ”œโ”€ ui/
 โ”œโ”€ auth/
 โ””โ”€ common/

routes/
 โ”œโ”€ home.tsx
 โ”œโ”€ login.tsx
 โ””โ”€ profile.tsx

๋งˆ์ง€๋ง‰ ์ •๋ฆฌ (์ง„์งœ ํ•ต์‹ฌ)

  • routes = ํŽ˜์ด์ง€
  • components = ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€ํ’ˆ
  • routes๋Š” components๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ
  • components๋Š” routes๋ฅผ ๋ชจ๋ฆ„
profile
YOLO

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