project

๐Ÿ“Œ [1ํŽธ] BOOTH ๋งˆ์ผ“ ๊ตฌ์กฐ ๋ถ„์„ ๋ฐ React ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •

octo54 2025. 4. 2. 13:32
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ [1ํŽธ] BOOTH ๋งˆ์ผ“ ๊ตฌ์กฐ ๋ถ„์„ ๋ฐ React ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •

BOOTH(https://booth.pm)๋Š” ํฌ๋ฆฌ์—์ดํ„ฐ๋“ค์ด ์ž์‹ ๋งŒ์˜ ์ฐฝ์ž‘๋ฌผ์„ ๋””์ง€ํ„ธ ์ƒํ’ˆ์œผ๋กœ ํŒ๋งคํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋งˆ์ผ“ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ์ด BOOTH ๋งˆ์ผ“์˜ UI/UX ๊ตฌ์กฐ๋ฅผ ํด๋ก ํ•˜๋ฉด์„œ, ๊ฒ€์ƒ‰ ์ค‘์‹ฌ์˜ ๋งˆ์ผ“ํ˜• ์›น์•ฑ์„ React๋กœ ์‹ค์ „ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์ด๋ฒˆ ์ฒซ ๊ธ€์—์„œ๋Š” ์ „์ฒด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„์„ํ•˜๊ณ , **React ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(Vite ๊ธฐ๋ฐ˜)**์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ” 1. BOOTH ๋งˆ์ผ“์˜ UI ๊ตฌ์กฐ ๋ถ„์„

์‚ฌ์ดํŠธ: https://booth.pm/ja/search

โœ… ์ฃผ์š” ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…

๊ฒ€์ƒ‰ ์ž…๋ ฅ์ฐฝ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ œ๊ณต (debounce ๊ธฐ๋ฐ˜ ์ž…๋ ฅ UX)
์ƒํ’ˆ ์นด๋“œ ๋ฆฌ์ŠคํŠธ ์ธ๋„ค์ผ, ์ œ๋ชฉ, ๊ฐ€๊ฒฉ, ํƒœ๊ทธ๋กœ ๊ตฌ์„ฑ๋œ ์นด๋“œ
ํƒœ๊ทธ ํ•„ํ„ฐ ์ธ๊ธฐ ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ ์„ ํƒ ๊ฐ€๋Šฅ
์ƒํ’ˆ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ชจ๋‹ฌ ํด๋ฆญ ์‹œ ์ƒ์„ธ ์ •๋ณด ํŒ์—…
URL ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ƒ‰ ์ƒํƒœ๊ฐ€ URL์— ๋ฐ˜์˜๋จ
๋ฌดํ•œ ์Šคํฌ๋กค ํ•˜๋‹จ์œผ๋กœ ๋‚ด๋ ค๊ฐˆ์ˆ˜๋ก ๋” ๋งŽ์€ ์ƒํ’ˆ ๋กœ๋“œ

๐Ÿ“Œ ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ:

์ด ๋ชจ๋“  ๊ธฐ๋Šฅ์„ React + Tailwind CSS ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋‚˜์”ฉ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด์„œ, ์‹ค๋ฌด์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋งˆ์ผ“ UI๋ฅผ ์ตํžˆ๋Š” ๊ฒƒ!


๐Ÿ›  2. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •

โœ… 1) ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (Vite + React)

npm create vite@latest booth-clone --template react
cd booth-clone
npm install
npm run dev

โœ… 2) ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์„ค๊ณ„

๐Ÿ“‚ booth-clone/
 โ”ฃ ๐Ÿ“‚ src/
 โ”ƒ โ”ฃ ๐Ÿ“‚ components/
 โ”ƒ โ”ฃ ๐Ÿ“‚ pages/
 โ”ƒ โ”ฃ ๐Ÿ“‚ hooks/
 โ”ƒ โ”ฃ ๐Ÿ“‚ utils/
 โ”ƒ โ”ฃ ๐Ÿ“‚ data/
 โ”ƒ โ”— App.jsx
 โ”ฃ index.html
 โ”ฃ tailwind.config.js

โœ… 3) Tailwind CSS ์ ์šฉ

๋ฐ˜์‘ํ˜•
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

๐Ÿ“Œ tailwind.config.js

module.exports = {
  content: ["./index.html", "./src/**/*.{js,jsx}"],
  theme: {
    extend: {},
  },
  plugins: [],
}

๐Ÿ“Œ src/index.css

@tailwind base;
@tailwind components;
@tailwind utilities;

๐Ÿ“Œ main.jsx

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import './index.css';

ReactDOM.createRoot(document.getElementById('root')).render(<App />);

โœจ 3. ๊ธฐ๋ณธ App ๋ ˆ์ด์•„์›ƒ ์„ค๊ณ„

๐Ÿ“Œ src/App.jsx

function App() {
  return (
    <div className="min-h-screen bg-gray-100">
      <header className="text-center py-4 bg-white shadow">
        <h1 className="text-2xl font-bold">BOOTH Clone ๋งˆ์ผ“</h1>
      </header>
      <main className="p-4">
        <p>์—ฌ๊ธฐ์— ์ƒํ’ˆ ๊ฒ€์ƒ‰ UI๊ฐ€ ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.</p>
      </main>
    </div>
  );
}

export default App;

๐Ÿ“Œ npm run dev ๋กœ ์‹คํ–‰ ์‹œ ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์ด ์ž˜ ์ ์šฉ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ 4. ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : ์ƒํ’ˆ ์นด๋“œ ๋ฆฌ์ŠคํŠธ UI ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ๊ธ€์—์„œ๋Š” data/products.json์— ๊ฐ€์ƒ์˜ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ ,
๋ฐ˜์‘ํ˜• Grid ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์นด๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” UI๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


 

React ๋งˆ์ผ“ UI,BOOTH ํด๋ก ,React ๊ฒ€์ƒ‰ UI,React Tailwind ํ”„๋กœ์ ํŠธ,์ƒํ’ˆ ์นด๋“œ ๋ ˆ์ด์•„์›ƒ,React ๋ฌดํ•œ์Šคํฌ๋กค,React ๋ชจ๋‹ฌ,React ํ•„ํ„ฐ ๊ตฌํ˜„,React Vite ์‹œ์ž‘ํ•˜๊ธฐ,React ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ