[๐ŸŽ์ฝ”๋”ฉ์• ํ”Œ ๊ฐ•์˜์š”์•ฝ]Bootstrap ์‚ฌ์šฉํ•˜๊ธฐ ๐Ÿš€

๐ŸŒˆ KJยท2025๋…„ 6์›” 3์ผ

codingapple

๋ชฉ๋ก ๋ณด๊ธฐ
15/23
post-thumbnail

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ & Bootstrap ์‚ฌ์šฉํ•˜๊ธฐ ๐Ÿš€

์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ ๐Ÿ›๏ธ

์˜ค๋Š˜๋ถ€ํ„ฐ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค! CSS ์ž‘์„ฑ์ด ๊ท€์ฐฎ์œผ๋‹ˆ React-Bootstrap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ ˆ์ด์•„์›ƒ์„ ์‰ฝ๊ฒŒ ๋ณต์‚ฌ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๐Ÿ“

1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๐Ÿ”ง

  1. ์ž‘์—…ํด๋”์—์„œ Shift + ์šฐํด๋ฆญ โ†’ PowerShell/ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ
  2. ํ„ฐ๋ฏธ๋„์— ๋ช…๋ น์–ด ์ž…๋ ฅ:
    npm create vite@latest
  3. ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ VSCode๋กœ ์—ด๊ธฐ
  4. ์ดˆ๊ธฐ ์„ค์ •:
    • CSS ํŒŒ์ผ๋“ค ๋‚ด์šฉ ์ง€์šฐ๊ธฐ
    • App.js์—์„œ ๋ถˆํ•„์š”ํ•œ HTML ์ œ๊ฑฐ
  5. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์‹คํ–‰: npm run dev

React-Bootstrap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ์„ค์ • ๐ŸŽจ

Bootstrap์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ๐Ÿ’ก

  • ๋ฒ„ํŠผ, ๋ฉ”๋‰ด ๋“ฑ์„ HTML/CSS๋กœ ์ง์ ‘ ๋””์ž์ธํ•  ํ•„์š” ์—†์Œ
  • ์˜ˆ์ œ ์ฝ”๋“œ ๋ณต์‚ฌ๋ถ™์—ฌ๋„ฃ๊ธฐ๋งŒ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • Bootstrap์„ React์— ๋งž๊ฒŒ ๋ณ€ํ˜•ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์„ค์น˜ ๋ฐฉ๋ฒ• ๐Ÿ“ฆ

1๋‹จ๊ณ„: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

npm install react-bootstrap bootstrap

2๋‹จ๊ณ„: CSS ํŒŒ์ผ ์—ฐ๊ฒฐ

  • index.html์˜ <head> ํƒœ๊ทธ ์•ˆ์— Bootstrap CSS ์ถ”๊ฐ€
  • ๋˜๋Š” App.js์— ๋‹ค์Œ ์ฝ”๋“œ ์ถ”๊ฐ€:
import 'bootstrap/dist/css/bootstrap.min.css';

React-Bootstrap ์‚ฌ์šฉ๋ฒ• ๐Ÿ› ๏ธ

๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ ๐Ÿ”˜

import {Button} from 'react-bootstrap'

function App(){
  return (
    <div>
      <Button variant="primary">Primary</Button>
    </div>
  )
}

์ƒ๋‹จ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๋งŒ๋“ค๊ธฐ ๐Ÿงญ

import {Button, Navbar, Container, Nav} from 'react-bootstrap'

function App(){
  return (
    <div>
      <Navbar bg="dark" variant="dark">
        <Container>
        <Navbar.Brand href="#home">Navbar</Navbar.Brand>
        <Nav className="me-auto">
          <Nav.Link href="#home">Home</Nav.Link>
          <Nav.Link href="#features">Features</Nav.Link>
          <Nav.Link href="#pricing">Pricing</Nav.Link>
        </Nav>
        </Container>
      </Navbar>
    </div>
  )
}

์ค‘์š”ํ•œ ๊ทœ์น™ โš ๏ธ

  • ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ์ƒ๋‹จ์— import ํ•ด์•ผ ํ•จ
  • className ๋ถ€์—ฌํ•ด์„œ CSS ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ

๋ณด์ถฉ ์„ค๋ช… ๐Ÿ’ก

Vite vs Create React App ๐Ÿ”„

  • Vite: ์ตœ์‹  ๋นŒ๋“œ ๋„๊ตฌ, ๋น ๋ฅธ ๊ฐœ๋ฐœ ์„œ๋ฒ„์™€ HMR(Hot Module Replacement) ์ œ๊ณต
  • Create React App: ๊ธฐ์กด React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋„๊ตฌ
  • Vite๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์›Œ์„œ ์ตœ๊ทผ ๋งŽ์ด ์‚ฌ์šฉ๋จ

Bootstrap ๋ฒ„์ „๋ณ„ ์ฐจ์ด์  ๐Ÿ“Š

  • Bootstrap 5: ์ตœ์‹  ๋ฒ„์ „, jQuery ์˜์กด์„ฑ ์ œ๊ฑฐ
  • React-Bootstrap: React ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์–ด ๋” React๋‹ต๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๊ธฐ์กด Bootstrap: CDN์ด๋‚˜ ์ง์ ‘ ์„ค์น˜ํ•˜์—ฌ ํด๋ž˜์Šค๋ช…์œผ๋กœ ์‚ฌ์šฉ

๋‹ค๋ฅธ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ต์…˜ ๐ŸŽฏ

  • Material-UI (MUI): Google์˜ Material Design ๊ธฐ๋ฐ˜
  • Ant Design: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Chakra UI: ์‹ฌํ”Œํ•˜๊ณ  ๋ชจ๋“ˆ์‹ ๊ตฌ์กฐ
  • Tailwind CSS: ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ตœ์ ํ™” ํŒ ๐Ÿ“

src/
โ”œโ”€โ”€ components/     # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ pages/         # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ styles/        # CSS ํŒŒ์ผ๋“ค
โ”œโ”€โ”€ utils/         # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋“ค
โ””โ”€โ”€ assets/        # ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ ์ •์  ํŒŒ์ผ

์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ณ ๋ ค์‚ฌํ•ญ โšก

  • Tree Shaking: ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋งŒ importํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์†Œํ™”
  • Code Splitting: ๋ผ์šฐํŠธ๋ณ„๋กœ ์ฝ”๋“œ ๋ถ„ํ• ํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„ 
  • CSS-in-JS vs CSS Modules: ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋”ฐ๋ฅธ ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹ ์„ ํƒ

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