
๋ค์ด๊ฐ๋ฉฐ
์ด์ ๋ Front ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ธ๊ฐ ๋์ด๋ฒ๋ฆฐ ๋ฉํ์ React.js์ ๋๋ค. ์ด๋ฏธ ์๋ง์ ์๋น์ค์์ React๋ฅผ ๋์ ํ๊ณ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ๊ณผ ๊ฐ๋ ฅํ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ ๊ฒฝ์ฐ๋ DOM์ ์ง์ ์กฐ์ํ๊ณ ๋ค๋ฃจ๋ javascript ๊ฐ๋ฐ ๋ฐฉ์๋ ๋ฌด๋ฆฌ๋ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋ณต์กํ๊ณ ํฐ ์ฌ์ฉ์ UI ํ๊ฒฝ์ ๊ฐ์ถ ํ๋ก์ ํธ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ปดํฌ๋ํธ ๊ธฐ๋ฐ UI ๊ฐ๋ฐ์ ์ง์ํ๋ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ(๋ผ์ด๋ธ๋ฌ๋ฆฌ)๊ฐ ํ์ํ๋ค๋ณด๋ React๊ฐ ๊ฝค๋ ์ฃผ๋ชฉ๋ฐ์์ ๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค.
React๋ง์ ํน์ง
1. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ
Ui๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐ์ ์์ฑํ๋ค๋ ๋ถ๋ถ์ด ํฐ ์ฅ์ ์ด ๋ฉ๋๋ค. ์ปดํฌ๋ํธ ๋จ์๋ก UI๋ฅผ ์กฐ์ํ๋ค๋ณด๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ ๊ฐ๋ฐ์์ ๊ธฐ์ ์ฒด์์ ์ด๋ฏธ ์ ๋ง๋ค์ด๋์ UI Component tool์ ์ ๊ณตํ๋ค๋ณด๋ ๋์ฑ React ๊ฐ๋ฐ์ด ํ์ฑํ๋๋ค๋ ์ ๋ ์์ต๋๋ค.
2. Virtual DOM
๋ฆฌ์กํธ๋ Virtual DOM์ ํตํด ์ฌ์ฌ์ฉ์ด ํ์ํ ๊ธฐ๋ฅ์ ์ธ์ ๋ ์ง ํ์ํ ๊ณณ์์ ํธ์ถํ์ฌ, ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ฑ ์์ด ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋๋ค. Virtual DOM์ ์ค์ DOM์ ์กฐ์ํ์ง ์๊ณ ๊ฐ์์ ํ๊ฒฝ์์ ๋จผ์ ์ํ ๋ณํ๋ฅผ ๋ฐ์ ํ ์ค์ DOM์ ์ต์ ๋ณ๊ฒฝ์ฌํญ๋ง ์ ์ฉํ๋ ๋ฐฉ์์
๋๋ค. ์ด๋ก์จ ๋ถํ์ํ DOm ์ฐ์ฐ์ด ๊ฐ์ํ๋ฉฐ ๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์ํฉ๋๋ค.
3. ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ(Declarative UI)
UI๋ฅผ ์ด๋ป๊ฒ ๋ณ๊ฒฝํ ์ง๊ฐ ์๋๋ผ ์ํ์ ๋ฐ๋ผ ์ด๋ค ๋ชจ์ต์ผ์ง๋ก ์ ์ํฉ๋๋ค. ์ด ๋ถ๋ถ์ ๊ธฐ์กด ๊ฐ์ฒด์งํฅ์ ์ต์ํ๋ ๊ฐ๋ฐ์๊ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ง๋ฌ์ ๋์ ์ ์ฌํฉ๋๋ค. ๊ฐ์ฒด์ ์์ฑ, ์ธ์คํด์ค๋ฅผ ํตํด ์ด๋ค ๋์์ ๊ตฌํํ๋ค๊ธฐ ๋ณด๋ค๋ ํ์ฌ ์ด๋ฃจ์ด์ง ์ปดํฌ๋ํธ์ ์ํ(State)๋ฅผ ๊ด๋ฆฌํ๋ฉด React๊ฐ ์์์ ํ๋ฉด์ ์ ๋ฐ์ดํธํด์ฃผ๋ ๋ฐฉ์์ ๋๋ค. ์ง์ DOM์ ์กฐ์ํ๋ ๋ฐฉ๋ฒ์ UI๋ฅผ ์ด๋ป๊ฒ ๋ณ๊ฒฝํ ์ง ๊ณ ๋ฏผํ๋ ์ผ๋ฐ์ ์ธ ์ฌ๊ณ ๋ฐฉ์์ด๋ผ๋ฉด, React์์๋ ์ํ๋ฅผ ์ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํฉ๋๋ค. ์ด ๋ถ๋ถ์ด React๋ฅผ ์ฒ์ ์ ํ๋ ๋ถ๋ค์๊ฒ ๋์ด์ผ๋ ์ฐ์ด ๋ ์๋ ์๊ฒ ๋ค์.
4. ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
๋ถ๋ชจ์์ ์์ ์ปดํฌ๋ํธ๋ก๋ง ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๋ ํน์ง์ด ์์ต๋๋ค. ์ด๋ฅผ props๋ผ๋ ์ธ์๋ฅผ ํตํด ์ ๋ฌํ์ฃ . ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ๋ฐฉ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ์ด ๋ช ํํด์ง๊ณ ๋๋ฒ๊น ์ด ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
SPA
SPA(Single Page Application)์ ์๋ฒ์์ HTML์ ์์ฑํ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์ถ๋ ฅํ๊ธฐ๋ง ํ๋ ์ ํต์ ์ธ ํํ๊ฐ ์๋๋ผ, ์๋ฒ๊ฐ ํ๋ ๋๋ถ๋ถ์ ํ๋ฉด ๊ตฌ์ฑ ์์
์ ๋ธ๋ผ์ฐ์ ์์ ์ฒ๋ฆฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๋ฐฉ๋ฒ์
๋๋ค. ์ฆ, SPA์์๋ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ HTML ์์ฑ๋ถํฐ ๋ด๋น๊ฒ์ด์
์ฒ๋ฆฌ, ์ฌ์ฉ์ ์ธ์ฆ์ ๋ฐ๋ฅธ ๋ถ๊ธฐ์ฒ๋ฆฌ, ๊ฒ์ ๋ฑ์ JavaScript(๋๋ WebAssembly)๋ก ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
SPA๋ก ์์ฑ๋ ์๋น์ค์ ์ฒ์ ์ ์ํ๋ฉด ๋ฐฉ๋ํ ์์ JavaScript๋ฅผ ๋ด๋ ค๋ฐ๊ฒ ๋๋ฉฐ, ์ดํ์๋ JavaScript๊ฐ ํ์ํ ์นํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ์ฌ ์ต์ํ์ ์ ๋ณด๋ง ๋ฐํํฉ๋๋ค. React๋ ๋ํ์ ์ธ SPA ๊ฐ๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
JSX & TSX
JSX๋ 'JavaScript XML'์ ์ฝ์๋ก, ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript) ์ฝ๋ ์์ HTML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ UI๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ JavaScript์ ํ์ฅ ๋ฌธ๋ฒ์ ๋๋ค. React์์ UI๋ฅผ ์ง๊ด์ ์ด๊ณ ์ ์ธ์ ์ผ๋ก ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์คํํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ฒจ(Babel)๊ณผ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ๋ฅผ ํตํด ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋์ด ์คํ๋ฉ๋๋ค. TSX๋ 'TypeScript XML'์ ์ฝ์๋ก, ๋๋ถ๋ถ์ ๋ชจ๋ ๋ฆฌ์กํธ๋ TSX๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ React Component๋ฅผ ๋ด๋ ํ์ผ๋ค์ OOOO.tsx ํ์ฅ์๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
function App() {
return (
<div>
<h1>Hello React</h1>
<p>React ์์ํ๊ธฐ</p>
</div>
);
}
HTML๋ก ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ JS์ ๋๋ค. return(...)์์ JSX๋ React.createElement๋ก ๋ณํ๋ฉ๋๋ค. ์ค๊ดํธ {}์์๋ JS ํํ์์ด ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
function Header() {
return <h1>My Blog</h1>;
}
function Content() {
return <p>์ค๋์ React๋ฅผ ๋ฐฐ์๋ด
์๋ค.</p>;
}
function App() {
return (
<div>
<Header />
<Content />
</div>
);
}
React ์ฝ๋๋ฅผ ๋ณผ ๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๋ฉด ์ข์ต๋๋ค.
1. ์ปดํฌ๋ํธ ํจ์ ์ด๋ฆ → ์ด๋ค UI ์กฐ๊ฐ์ธ์ง ํ์ธ
2. JSX ๊ตฌ์กฐ → ์ด๋ค HTML ํ๊ทธ๋ก ๋ ๋๋ง๋๋์ง ํ์ธ
3. state → ๊ฐ์ด ๋ณํ๋ฉด ์ด๋ค ๋ถ๋ถ์ด ๋ค์ ๊ทธ๋ ค์ง๋์ง ์ถ์
4. props → ๋ถ๋ชจ์์ ์ด๋ค ๊ฐ์ด ๋ด๋ ค์ค๋์ง ํ์ธ
5. ์ด๋ฒคํธ(onClick, onChange ๋ฑ) → ์ํ ๋ณํ๋ฅผ ์ด๋ป๊ฒ ์ผ์ผํค๋์ง ํ์ธ
๊ฐ๋ฐํ๊ฒฝ ์คํ
1. CRA(Create React App)
CRA๋ ๋ฆฌ์กํธ์์ ์ง์ํ๋ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ ๋๋ค.
npx create-react-app my-app
cd my-app
npm start
2. Vite
Vite๋ ๋น ๋ฅธ ๋น๋ ๋๊ตฌ๋ก ์ต๊ทผ ๋ง์ด ์ฐ์ด๋ฉฐ, ์ค๋ฌด Production ํ๊ฒฝ์์ ์์ฃผ ๋น๋ ๋ฐ ์ด์๋ฉ๋๋ค.
npm create vite@latest my-app
cd my-app
npm install
npm run dev
React์ ์ฐ๊ด๋๋ ํ๋ ์์ํฌ or UI Tool
React๋ฅผ ๊ผญ ์ฌ์ฉํด์ผํ๋ ๊ฒ์ ์๋๋๋ค. ํ์ง๋ง React๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ์ด๋์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ง์ ์ฌ๋๋ค์ด UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก React๋ฅผ ์ ํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ React๋ฅผ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ํ๋ ์์ํฌ๋ก Vercel์ Next.js๊ฐ ์์ผ๋ฉฐ ์คํ์์ค์ธ Remix๊ฐ ์์ต๋๋ค. ์ด๋ฐ ํ๋ ์์ํฌ๋ ํ์คํ ํ๋ ์์ํฌ๋ฅผ ์งํฅํ๋ฉฐ SSR(์๋ฒ ์ฌ์ด๋ ๋๋๋ง) ๋ฐฉ์๋ ๊ฐ์ด ์ง์ํฉ๋๋ค. ์ ์๊ฐ์๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก React๋ ํ์์ด๋ฉฐ ํ๋ ์์ํฌ๋ ์ฌ์ฉ ๋ชฉ์ ์ ๋ง๊ฒ ์ ํ(or ์ ํ์ํจ)ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
UI Tool์ ๋ํ์ ์ผ๋ก Material UI๊ฐ ์์ผ๋ฉฐ ์์ฆ์๋ shadcn ui๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. UI Tool์ ๋ชจ๋ํ ์คํ์ผ๋ก ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ Component๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ง์ CSS๋ฅผ ๋ง์ ธ์ ์คํ์ผ๋งํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ์ ๋ UI Tool์ ์ฌ์ฉํ๋ ค๊ณ ๋ณด๋๊น React๋ ํ์๋ผ์ React๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต๋ถํ๋ฉด์ ํฌ์คํ ํ๊ฒ ๋์์ต๋๋ค. ๋ค์์๊ฐ์๋ ์ข ๋ ๊น๊ฒ ๋ค์ด๊ฐ์ฃ . React์ State Hook๊ณผ ์ด๋ฒคํธ ํธ๋ค๋ง, ๊ทธ๋ฆฌ๊ณ ์ค์ ์์ ๊น์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค!
'ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > React & NextJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฆฌ์กํธ State Hook๊ณผ ์ํ, ์๋ช ์ฃผ๊ธฐ (2) | 2025.09.10 |
|---|