โ๐ป ํ๊ณ
ํ๋ก์ ํธ๋ฅผ ํผ์ ์งํํ๋ค๋ ๊ฑด ์๊ฐ๋ณด๋ค ์ฝ์ง ์๋ค.
์ธ๊ฐ์ ๋ฃ๊ณ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๊ฑฐ๋, ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ด๋ ต๊ฒ ๋๊ปด์ง๋ค.
ํ ๋จ์ ํ๋ก์ ํธ๋ ์ผ์ ๋ ์๊ณ , ์ญํ ๋ถ๋ด๋ ๋ช ํํด์ ์ด๋ ์ ๋ ์ฒด๊ณ๋ฅผ ๊ฐ์ถ๊ฒ ๋๋ค.
ํ์ง๋ง ๊ฐ์ธ ํ๋ก์ ํธ๋ ์์๋ถํฐ ๋ฐฉํฅ ์ค์ ๊น์ง ์ ๋ถ ํผ์ ๊ฒฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์
์กฐ๊ธ๋ง ๋ฐฉ์ฌํ๋ฉด ๊ธ๋ฐฉ ๋ํํด์ง๋ ๋๋์ด๋ค.
๊ฐ๋ฐ์๋ผ๋ฉด ์์ผ๋ก ํ์ ํ์ตํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ๋์์์ด ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค์ด๋ด์ผ ํ๋ค.
๊ทธ๋์ ๋๋ ํ์ค์ ์ผ๋ก ์งํฌ ์ ์๋ ๋ชฉํ๋ฅผ ์ธ์ฐ๊ธฐ๋ก ํ๋ค.
ํ๋ฃจ 30๋ถ, ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์งง๊ฒ๋ผ๋ ํ๊ณ ๋ฅผ ๋จ๊ธด๋ค.
์์ง๋ง ๊พธ์คํ ์ค์ฒํ ์ ์๋ ๋ฃจํด์ ๋ง๋ค์ด๋ณด๋ ค ํ๋ค.
์ฐ์ ๋ด GitHub ๋ ํฌ์งํ ๋ฆฌ์ What2Wear๋ผ๋ ํ๋ก์ ํธ๊ฐ ํ๋ ์๋ค.
๋ ์ง์ ์ง์ญ์ ์ ๋ ฅํ๋ฉด ๋ ์จ ์ ๋ณด๋ฅผ ๋ฐ์์, AI์๊ฒ ์ท ์ถ์ฒ์ ๋ฐ๋ ์๋น์ค๋ค.
(์ฌ์ค… ๊ทธ๋ฅ API ์ฐ๋ ์ฐ์ต ๊ฒธ ๋ง๋ ๊ฑฐ๋ผ ์์ง์ ๋ญ๊ฐ ์๋ค.)
ํ์ง๋ง ์ด ๋ ํฌ๋ถํฐ ์์ํ๋ ค๊ณ ํ๋ค.
๋งค์ผ 30๋ถ, ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ํ๊ณ ๋ฅผ ๋จ๊ธด๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ํ๋์ฉ ์ถ๊ฐํด๊ฐ๋ฉฐ, ํ๋ก์ ํธ์ ๋ชธ์ง์ ์ฒ์ฒํ ๋ถ๋ ค๋ณผ ๊ณํ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ค๋ฉด ๋จ์ํ ๊ธฐ๋ฅ ๋ช ๊ฐ๋ก๋ ๋ถ์กฑํ๋ค.
์กฐ๊ธ ๋ ๋์ ‘์ธ๊ณ๊ด?’?์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ์๊ฐํ๊ณ ,
์ค๋์ ์ฌ์ด๋๋ฐ๋ฅผ ๋ง๋ค์ด ํ์ด์ง๋ฅผ ๋ถ๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ๋์ ํ๊ธฐ๋ก ํ๋ค.
๋ฑ ์ธ์คํ๊ทธ๋จ์ฒ๋ผ, ๋ฉ๋ด๋ฅผ ๋๋ฅด๋ฉด ๋ค๋ฅธ ํ๋ฉด์ด ์์ฐ์ค๋ฝ๊ฒ ๋จ๋ ๊ทธ๋ฐ ๋๋.

(์์ฆ “ํญ์น ์์์๋ค”์ ๋น ์ ธ์ ์์ธ ๋ฅผ ๋๋ฌด ๋ง์ด ๋ณด๊ณ ์๋ค.
๋ํ๋ฏผ ์ค๋ ...
๊ท ํ๋ ์์, ๋ธ๋ํค๋ ๋ฝ๋ ์์์ ์์งํ ๋ง์ด ๋ณด์ง ์์๋๋ฐ…
์ด์ํ๊ฒ ์๊ณ ๋ฆฌ์ฆ์ด ๊ณ์ ๋์ ธ์ค๋ค...)
์ด์จ๋ ์ค๋์ ๋ชฉํ๋ ์ธ์คํ๊ทธ๋จ์ฒ๋ผ ์ฌ์ด๋๋ฐ๋ฅผ ํตํด ํ๋ฉด์ด ์ ํ๋๋ ๊ตฌ์กฐ,
๊ทธ๋ฌ๋๊น CSR(Client Side Rendering) ๋ฐฉ์์ผ๋ก ํ์ด์ง๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
๋ถ๋ถ ๋ ๋๋ง? ๋ผ์ฐํ ์ ํตํ ์ปดํฌ๋ํธ ๊ต์ฒด? ๋ญ ๊ทธ๋ฐ ๊ฑฐ.
๋ฒ์จ 5๋ถ์ด ์ง๋ฌ๋ค.
์๊ฐ๋ง ํ๋ค ์๊ฐ ๋ค ๋ณด๋ด์ง ๋ง๊ณ , ๋น ๋ฅด๊ฒ ์์ ์ ๋ค์ด๊ฐ์.
์์ ์ ์์ํ๋ ค๋๋ฐ, ๋ฌธ๋ ์ด๋ฐ ์๋ฌธ์ด ๋ค์๋ค.
“Header ์ปดํฌ๋ํธ๋ ์ด๋์ importํ๋ ๊ฒ ๋ง์๊น?”
- App.jsx์์ ๊ณตํต์ผ๋ก importํด์ ์ ์ฒด์ ํญ์ ๋ณด์ฌ์ฃผ๊ฒ ํ ๊น?
- ์๋๋ฉด ๊ฐ ํ์ด์ง ์ปดํฌ๋ํธ์์ ๊ฐ๋ณ์ ์ผ๋ก ๋ถ๋ฌ์์ผ ํ ๊น?
์ด๊ฑด ํ๋ก์ ํธ ๊ตฌ์กฐ, ๊ท๋ชจ, ๊ทธ๋ฆฌ๊ณ ๋ผ์ฐํ ๋ฐฉ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
ํ์ง๋ง ๋๋ถ๋ถ์ ๋ฆฌ์กํธ ์ฑ์์๋ ๋ณดํต App.jsx ๋๋ Layout.jsx์์ importํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๊ทธ ์ด์ ๋ ๋จ์ํ๋ค.
- ํค๋๋ ๋ชจ๋ ํ์ด์ง์์ ๊ณตํต์ผ๋ก ๋ณด์ฌ์ผ ํ๋ ์ปดํฌ๋ํธ์ด๊ธฐ ๋๋ฌธ์ด๊ณ ,
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ ํ์ด์ง๋ง๋ค ์ค๋ณตํด์ importํ๋ ๊ฑด ๋นํจ์จ์ ์ด๊ณ , ์ ์ง๋ณด์์๋ ์ข์ง ์๋ค.
๋๋ถ๋ถ์ ๊ณตํต ๋ ์ด์์ ์ปดํฌ๋ํธ์ Header, Sidebar ๊ฐ์ ์์๋ฅผ ํฌํจ์ํจ ๋ค์,
๊ทธ ์๋์ <Outlet />์ด๋ <Routes>๋ก ๋ผ์ฐํ ๋๋ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
์ฌ์ค ๋๋ฌด ๋น์ฐํ ๋ฐฉ์์ด๋ค.
์ค๋ณต์ ์ค์ด๊ณ , ๊ณตํต ๊ตฌ์กฐ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ค.
๊ทผ๋ฐ ์ต๊ทผ์ ์ด๋์ ๊ฐ ํ์ด์ง ์ปดํฌ๋ํธ์์ Header๋ฅผ ์ง์ importํด์ ์ฐ๋ ์ฝ๋๋ฅผ ๋ณธ ์ ์ด ์๋ค.
๊ทธ๊ฑธ ๋ณด๊ณ ์ ๊น ์๋ฌธ์ด ์๊ฒผ๋ค.
“์ด? ์ด๋ ๊ฒ ํด๋ ๋๋…? ์คํ๋ ค ์ด๊ฒ ๋ ์ ์ฐํ ๋ฐฉ์์ธ๊ฐ?” ํ๊ณ ...(์ง์ง์)
๊ฒฐ๊ตญ ๋ด ๊ฒฐ๋ก ์ ์ด๋ ๋ค:
“์๋์ ์ผ๋ก ํ์ ๋ ํ์ด์ง์๋ง Header๋ฅผ ๋ณด์ด๊ฒ ํ๋ ค๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํ์ด์ง๋ณ๋ก importํ ์๋ ์๊ฒ ์ง๋ง,
๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ App ๋๋ Layout ์ปดํฌ๋ํธ์์ ๊ณตํต์ผ๋ก ๋ถ๋ฌ์ค๋ ๊ฒ ๋ง๋ค.”
์ค๋ 30๋ถ ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ๋ค์ ์ ๋ฆฌํด๋ณด๋ฉด ์ข๊ฒ ๋ค๊ณ ๋๋ ์ฃผ์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
๐ ์ ๋ฆฌ
์๋งจํฑ ํ๊ทธ(Sementic HTML)
์๋ฏธ(semantic)๋ฅผ ๊ฐ์ง HTML ํ๊ทธ๋ก,
ํ๊ทธ ์์ฒด๋ง์ผ๋ก ์ด ์์ญ์ด ์ด๋ค ์ญํ ์ ํ๋์ง ๋ช ํํ๊ฒ ํํํ๋ ํ๊ทธ
์์ ์๋ <div>, <span>๋ง ์จ์ ๋ชจ๋ ๋ ์ด์์์ ๊ตฌ์ฑํ์ง๋ง,
HTML5๋ถํฐ๋ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ๋ช ํํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ์๋งจํฑ ํ๊ทธ๊ฐ ๋์
์๋งจํฑ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ์ด์
| ๋ชฉ์ | ์ค๋ช |
| ์๋ฏธ ์๋ ๊ตฌ์กฐ ์ ๊ณต | ํ๊ทธ๋ง ๋ณด๊ณ ๋ ์ฝํ ์ธ ์ ์ญํ ์ ์ ์ ์์ |
| ๊ฒ์ ์์ง ์ต์ ํ (SEO) | ๊ฒ์ ์์ง์ด ํ์ด์ง ๊ตฌ์กฐ๋ฅผ ๋ ์ ํ์ ํจ |
| ์ ๊ทผ์ฑ ํฅ์ | ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ์ฝํ ์ธ ์ ๊ตฌ์กฐ๋ฅผ ์ ํํ ์ธ์ |
| ์ ์ง๋ณด์ ์ฉ์ด | ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ข์์ง๊ณ ํ์ ์ ์ ๋ฆฌํจ |
๋ํ์ ์ธ ์๋งจํฑ ํ๊ทธ
| ํ๊ทธ | ์ญํ ๋ฐ ์๋ฏธ | ์์ |
| <header> | ํ์ด์ง๋ ์น์ ์ ๋จธ๋ฆฌ๋ง | ๋ก๊ณ , ๋ค๋น๊ฒ์ด์ ๋ฉ๋ด ๋ฑ |
| <nav> | ์ฌ์ดํธ ๋ด ์ฃผ์ ํ์ ๋งํฌ ์์ญ | ์ฌ์ด๋๋ฐ, ์๋จ ๋ฉ๋ด ๋ฑ |
| <main> | ๋ณธ๋ฌธ์ ํต์ฌ ์ฝํ ์ธ ์์ญ | ์ค๋ณต ์์ด ํ ํ์ด์ง์ ํ ๋ฒ๋ง ์ฌ์ฉ |
| <section> | ์ฃผ์ ๋ณ ๊ตฌํ | ๋ด์ค ๋ชฉ๋ก, ์๋น์ค ์๊ฐ ๋ฑ |
| <article> | ๋ ๋ฆฝ์ ์ธ ์ฝํ ์ธ ๋ฌถ์ | ๋ธ๋ก๊ทธ ๊ธ, ๊ฒ์๊ธ ๋ฑ |
| <aside> | ๋ณด์กฐ ์ฝํ ์ธ | ๊ด๊ณ , ์ถ์ฒ ๊ธ, ์ฌ์ด๋ ์ฝํ ์ธ |
| <footer> | ๊ผฌ๋ฆฌ๋ง ์์ญ | ์ฐ๋ฝ์ฒ, ์ ์๊ถ, ์ฌ์ดํธ ์ ๋ณด ๋ฑ |
์์
<body>
<header>
<h1>๋ก๊ณ </h1>
<nav>
<ul>
<li><a href="/">ํ</a></li>
<li><a href="/about">์๊ฐ</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h2>์ค๋์ ๋ด์ค</h2>
<article>
<h3>๋ด์ค ์ ๋ชฉ</h3>
<p>๋ด์ค ๋ณธ๋ฌธ...</p>
</article>
</section>
<aside>
<h3>๊ด๊ณ </h3>
</aside>
</main>
<footer>
<p>© 2025 ๋์ ์น์๋น์ค</p>
</footer>
</body>
- <main>์ ํ์ด์ง๋น ํ ๋ฒ๋ง ์ฌ์ฉํด์ผ ํจ
- <article>์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝํ ์ธ ์ผ ๋ ์ฌ์ฉ (๋๊ธ์ X, ๋ธ๋ก๊ทธ ๊ธ์ O)
- <section>์ ์ ๋ชฉ(<h2>, <h3>)์ด ์์ด์ผ ์์ฐ์ค๋ฌ์
- ์๋งจํฑ ํ๊ทธ ์์ <div>๋ฅผ ํจ๊ป ์จ๋ ๋จ → ๊ตฌ์กฐ ์ก๋ ์ฉ๋
์ ๋ฆฌ
- ์๋งจํฑ ํ๊ทธ๋ HTML์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ํ๊ทธ์ด๋ฉฐ, SEO, ์ ๊ทผ์ฑ, ์ ์ง๋ณด์ ์ธก๋ฉด์์ ๊ผญ ์์์ผ ํ ํต์ฌ ์์
react-router-dom
๋ฆฌ์กํธ์์ ํ์ด์ง ์ ํ, ์ฃผ์(URL)์ ๋ฐ๋ฅธ ์ปดํฌ๋ํธ ์ ํ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ฆ, ๋ฆฌ์กํธ ์ฑ์์ ๋ผ์ฐํ (Routing)์ ๋ด๋นํ๋ ํต์ฌ ๋๊ตฌ
ํ์ ์ด์
๋ฆฌ์กํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก SPA(Single Page Application)
ํ ๋ฒ๋ง HTML์ ๋ก๋ฉํ๊ณ , ํ์ด์ง๊ฐ ๋ฐ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ปดํฌ๋ํธ๋ง ๋ฐ๋.
์ด๊ฑธ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ ๋ฐ๋ก react-router-dom
- ์ฌ์ฉ์๊ฐ URL์ ๋ฐ๊พธ๋ฉด
- ๊ทธ์ ๋ง๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ธฐ๋ณธ ์ฌ์ฉ ๊ตฌ์กฐ (React Router v6 ๊ธฐ์ค)
1. ์ต์๋จ์์ <BrowserRouter>๋ก ๊ฐ์ธ๊ธฐ
// main.jsx or main.tsx
import { BrowserRouter } from 'react-router-dom';
import App from './App';
<BrowserRouter>
<App />
</BrowserRouter>
( ์ค๋ ํ๋ก์ ํธํ๋ฉด์ ์ด๊ฑธ ๊น๋จน๋ ๋ฐ๋์ ํ๋์ ๋น ํ๋ฉด๋ง ๋์๋ค… )
2. App.jsx์์ ๋ผ์ฐํ ์ ์ํ๊ธฐ
// App.jsx
import { Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
function App() {
return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
);
}
3. Link ์ปดํฌ๋ํธ๋ก ์ด๋ํ๊ธฐ (์๋ก๊ณ ์นจ ์์ด)
import { Link } from 'react-router-dom';
<Link to="/">ํ</Link>
<Link to="/about">์๊ฐ</Link>
ํต์ฌ ๊ฐ๋
| ๊ตฌ์ฑ์์ | ์ค๋ช |
| <BrowserRouter> | ๋ผ์ฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ๋ฃจํธ |
| <Routes> | ์ฌ๋ฌ Route๋ฅผ ๊ฐ์ธ๋ ์ปจํ ์ด๋ |
| <Route path="..." element={...} /> | URL์ ๋ฐ๋ผ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ ์ ์ |
| <Link to="..."> | ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์ด๋ |
| useNavigate() | JS ์ฝ๋์์ ๊ฒฝ๋ก ์ด๋ |
| <Outlet> | ์์ Route๊ฐ ๋ ๋๋ง๋ ์์น ์ง์ (Nested Routing) |
์ ๋ฆฌ
- react-router-dom์ SPA ํ๊ฒฝ์์ ๋ผ์ฐํ ์ ๊ตฌํํ๋ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ , ํ์ด์ง ์ ํ์ ์ํด <Routes>, <Route>, <Link> ๋ฑ์ ์ ์ ํ ์กฐํฉํด์ ์ฌ์ฉ
'๐ Project > [30๋ถ] 1์ผ 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โฐ [Ver2] 30๋ถ? ๊ฐ๋ฐ ๋ฐ ํ๊ณ - ์์ด์ดํ๋ ์ ์ด์ ์์ฑ (0) | 2025.04.27 |
|---|---|
| โฐ [Ver2] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - ํ๋ก์ ํธ ๊ธฐํ ๋ฐฉํฅ (0) | 2025.04.24 |
| โฐ [Ver1] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - ์กฐ๊ฑด๋ถ ๋ ๋๋ง (0) | 2025.04.09 |
| โฐ [Ver1] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - Firebase, Supabase (0) | 2025.04.03 |
| โฐ [Ver1] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - FlexBox (0) | 2025.04.02 |