Skip to content

frontend guide

BEENY edited this page Jun 10, 2025 · 3 revisions

๐Ÿ› ๏ธ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐ€์ด๋“œ & ๋ฐฐํฌ

โœ๏ธ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

  • Prettier

    • ์„ธ๋ฏธ์ฝœ๋ก : ์‚ฌ์šฉ
    • ๋”ฐ์˜ดํ‘œ: '
    • ํƒญ ๋„ˆ๋น„: 2
    • ์ค„๋ฐ”๊ฟˆ: LF
  • ESLint

    • eslint, eslint-plugin-react-hooks, eslint-plugin-react-refresh
    • typescript-eslint ํฌํ•จ
  • ๋„ค์ด๋ฐ ๊ทœ์น™

    • ์ปดํฌ๋„ŒํŠธ/ํŽ˜์ด์ง€: PascalCase
    • ๋ณ€์ˆ˜/ํ•จ์ˆ˜: camelCase
    • ํด๋”: kebab-case

๐ŸŒ ๋ผ์šฐํŒ… ๊ตฌ์กฐ

<Routes>
    <Route path="/" element={<Home />} />
    <Route path="/login" element={<LoginPage />} />
    <Route path="/oauth/kakao/callback" element={<KakaoCallback />} />
    <Route path="/diary/:diaryId" element={<DiaryDetail />} />
    <Route path="/setChatting" element={<SettingPage />} />
    <Route path="/chat/:chatId/:character" element={<ChatPage />} />
    <Route path="/writing" element={<WritingPage />} />
    <Route path="/edit/:chatId" element={<EditPage />} />
    <Route path="/comments" element={<Comments />} />
    <Route path="/hashtags" element={<Hashtags />} />
    <Route path="/hashtag/:id" element={<HashtagDetail />} />
    <Route path="/test" element={<Testpage />} />
</Routes>

๐ŸŽจ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ

styled-components ์‚ฌ์šฉ

์ „๋ฐ˜์ ์ธ ๊ตฌ์กฐ ์›์น™

  • ์ตœ๋Œ€ ๋„ˆ๋น„ ์ œํ•œ: ๋ชจ๋ฐ”์ผ ์šฐ์„  ์ „๋žต์— ๋”ฐ๋ผ max-width: 600px ๋“ฑ์˜ ์ œํ•œ์„ ์ฃผ์–ด ์ค‘์•™ ์ •๋ ฌ
  • ๊ณ ์ • ์š”์†Œ ์œ„์น˜: position: fixed๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‹จ ๊ณ ์ • ์ž…๋ ฅ์ฐฝ์ด๋‚˜ ๋ฒ„ํŠผ UI ๊ตฌ์„ฑ
  • ๋ ˆ์ด์•„์›ƒ ์ •๋ ฌ: display: flex์™€ flex-direction, gap ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์—ฐํ•œ ๋ฐฐ์น˜ ์ง€์›

ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ

  • font-size: ์ œ๋ชฉ์€ 2rem ์ด์ƒ, ๋ณธ๋ฌธ์€ 1rem ๋‚ด์™ธ ์‚ฌ์šฉ
  • font-family: "Gowun Dodum" ๋“ฑ ์‚ฌ์šฉ์ž ์ •์˜ ํฐํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • font-weight: ์ œ๋ชฉ์€ bold, ๋ณธ๋ฌธ์€ normal ๋˜๋Š” 500 ๊ถŒ์žฅ

์ƒ‰์ƒ ๊ฐ€์ด๋“œ

  • ๋ฐฐ๊ฒฝ์ƒ‰: #FFF8F8, #FAFAFA, #FEF2F2
  • ํ…์ŠคํŠธ ์ƒ‰์ƒ: #364B76, #6A7282, #1E2A52
  • ๊ฐ•์กฐ์ƒ‰ ๋˜๋Š” ํฌ์ธํŠธ ์ƒ‰: #3B82F6, #9FACBA, #FCE4EC, #E0F7FA ๋“ฑ

์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง ์˜ˆ์‹œ

  • ๊ณตํ†ต Wrapper
const Wrapper = styled.div`
  width: 100%;
  max-width: 600px;
  margin: 0 auto;
`;
  • ๋ฒ„ํŠผ
const Button = styled.button`
  background-color: #fafafa;
  color: #6a7282;
  border: none;
  cursor: pointer;
`;

์Šคํฌ๋กค & ๋งˆ์Šคํ‚น

  • ์ฑ„ํŒ…์ฐฝ, ๋ฆฌ์ŠคํŠธ์—์„œ overflow-y: auto ๋ฐ ์Šคํฌ๋กค ๋งˆ์Šคํ‚น ์‚ฌ์šฉ
  • ํฌ๋กœ์Šค๋ธŒ๋ผ์šฐ์ง• ๊ณ ๋ คํ•œ ์Šคํฌ๋กค ์ œ๊ฑฐ ์ฒ˜๋ฆฌ
&::-webkit-scrollbar { display: none; }
scrollbar-width: none;
-ms-overflow-style: none;

์ ‘๊ทผ์„ฑ ๊ณ ๋ ค

  • ๋ฒ„ํŠผ์€ cursor: pointer ์ง€์ • ํ•„์ˆ˜
  • img์—๋Š” alt ์†์„ฑ ์ถ”๊ฐ€
  • ์ƒ‰์ƒ ๋Œ€๋น„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ ค

ํฐํŠธ: Gowun Dodum

(์‹œ์Šคํ…œ์— ์ด ํฐํŠธ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ sans-serif)

โš™๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…๋ฒ•

  • Node.js v18 ์ด์ƒ ๊ถŒ์žฅ
  • Vite + SWC ์‚ฌ์šฉ
  • ์‹คํ–‰ ๋ฐฉ๋ฒ•:
    git clone https://github.com/OpenKetchupSource/Web.git
    cd Web
    npm install
    npm run dev

๐Ÿš€ ๋ฐฐํฌ ๋ฐฉ๋ฒ•

  • Netlify + _redirects SPA ๋ผ์šฐํŒ… ๋Œ€์‘
  • GitHub Actions๋กœ ๋ฆฐํŠธ/๋นŒ๋“œ ์ž๋™ํ™”