Skip to content

๐ŸŽธ ์•ฐํ”„ ํด๋ผ ๋ ˆํฌ

Notifications You must be signed in to change notification settings

TEAM-DECIBEL/AMP-CLIENT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

162 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽธ AMP

1 36 37 Portfolio_33 Portfolio_34 Portfolio_35 36_66 38 160 78

๐ŸŽง TEAM-DECIBEL

image
์†Œํ˜„
image
์ง€์ˆ˜
image
์ง„์„
image
๋‚˜์€

๐Ÿš€ Tech Stack

์นดํ…Œ๊ณ ๋ฆฌ ๊ธฐ์ˆ  ์Šคํƒ
Library React
Server State Management TanStack Query
Language TypeScript
Build Tool Vite
Styling Vanilla Extract
Repository Management Monorepo
Build System Turborepo
Package Manager Pnpm
CI/CD GitHub Actions


๐Ÿ—‚๏ธ Convention

๐ŸชพGit Flow

๐ŸŒฟ ๋ธŒ๋žœ์น˜ ์ „๋žต

๋ธŒ๋žœ์น˜ ์—ญํ•  ์„ค๋ช…
main Production ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ •๋œ ์ƒํƒœ์˜ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
develop Development ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
Feature Feature ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•œ ๊ฐœ๋ณ„ ์ž‘์—… ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
๐Ÿš€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค
  1. ์ด์Šˆ ๊ธฐ๋ฐ˜ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

    • ๋ชจ๋“  ์ž‘์—… ์‹œ์ž‘ ์ „ GitHub Issue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ develop ๋ธŒ๋žœ์น˜์—์„œ ๊ธฐ๋Šฅ ๋ณ„ ์ด์Šˆ ๋ธŒ๋žœ์น˜๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค. (feat/๊ธฐ๋Šฅ๋ช…/#issue-number)
  2. ์ž‘์—… ๋ฐ PR ์ƒ์„ฑ

    • ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ํŒ€์› ์ค‘ 2๋ช… ์ด์ƒ์˜ Approve์ด ์žˆ์„ ๋•Œ, develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

    • develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ ํ›„, ์‚ฌ์šฉ์ด ๋๋‚œ ์ด์Šˆ ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ“ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜
  • init: ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€

Prefix

์œ ํ˜• ์˜๋ฏธ ์ƒ์„ธ ๋‚ด์šฉ
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„
fix ๋ฒ„๊ทธ ์ˆ˜์ • ์˜ค๋ฅ˜ ์ˆ˜์ •
hotfix ๊ธด๊ธ‰ ์ˆ˜์ • ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ ์ฆ‰์‹œ ์ˆ˜์ •
refactor ๋ฆฌํŒฉํ† ๋ง ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„  (๊ธฐ๋Šฅ ๋ณ€ํ™” X)
style ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ์Šคํƒ€์ผ ์ฝ”๋“œ ๋ฐ ํฌ๋งทํŒ… ๋ณ€๊ฒฝ
docs ๋ฌธ์„œ ์ˆ˜์ • ๋ฌธ์„œ ์ž‘์„ฑ ๋ฐ ์ˆ˜์ •
chore ๊ธฐํƒ€ ์ˆ˜์ • ๋นŒ๋“œ ์—…๋ฌด, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋“ฑ ์„ค์ • ๋ณ€๊ฒฝ
build ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋นŒ๋“œ ๋„๊ตฌ ๋ฐ ์ข…์†์„ฑ ๋ณ€๊ฒฝ
ci CI ์„ค์ • CI ์„ค์ • ํŒŒ์ผ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •
perf ์„ฑ๋Šฅ ๊ฐœ์„  ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ฝ”๋“œ
test ํ…Œ์ŠคํŠธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •
type ํƒ€์ž… ์ˆ˜์ • ํƒ€์ž… ์ •์˜ ์ˆ˜์ •
asset ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€ ๋””์ž์ธ ์—์…‹(svg, img) ์ถ”๊ฐ€
rename ์ด๋ฆ„/์œ„์น˜ ์ˆ˜์ • ํŒŒ์ผ๋ช… ์ˆ˜์ • ๋ฐ ํด๋” ์ด๋™
remove ํŒŒ์ผ ์‚ญ์ œ ๋ฏธ์‚ฌ์šฉ ํŒŒ์ผ ์‚ญ์ œ
revert ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ ์ด์ „ ์ปค๋ฐ‹ ๋ณต๊ตฌ
init ์ดˆ๊ธฐ ์„ธํŒ… ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ธํŒ…

๐Ÿ“„ Code Convention


โš›๏ธ ์ปดํฌ๋„ŒํŠธ
  • ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋งŒ PascalCase ์‚ฌ์šฉ

    • ์˜๋ฏธ ์—†๋Š” div ํƒœ๊ทธ ์‚ฌ์šฉ ์ง€์–‘
    • ์ตœ์ƒ๋‹จ fragment ์‚ฌ์šฉ
    • children์ด ๋ถˆํ•„์š”ํ•  ๋• selfClosing์‚ฌ์šฉํ•˜๊ธฐ <์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„/>

    const InfoText = () => {
      return (
        <>
          <h1>Welcome!</h1>
          <p>We are Team-Decibel!</p>
        </>
      );
    };
๐Ÿ“ ํด๋”๋ช…
  • ์ผ€๋ฐฅ ์ผ€์ด์Šค(kebab-case) ์‚ฌ์šฉ

    • ํด๋”๋ช…๊ณผ ํŒŒ์ผ๋ช… ๋ชจ๋‘ ์ผ€๋ฐฅ ์ผ€์ด์Šค๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • โŒ๏ธ๏ธ UserProfile/, loginForm.tsx
    • โœ… user-profile/, login-form.tsx
  • ๋ฌด์กฐ๊ฑด ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘

    • ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํด๋”๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • โŒ Main-header.tsx
    • โœ… main-header.tsx
๐Ÿงฉ ํƒ€์ž…
  • PascalCase ์‚ฌ์šฉ

    • ํƒ€์ž…๊ณผ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์€ PascalCase๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • interface ์‚ฌ์šฉ ์ง€ํ–ฅ

    • ๊ฐ์ฒด ๊ตฌ์กฐ ์ •์˜ ์‹œ type ๋Œ€์‹  interface๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Props ๋„ค์ด๋ฐ ๊ทœ์น™

    • ์ปดํฌ๋„ŒํŠธ์˜ Props ํƒ€์ž…์€ [์ปดํฌ๋„ŒํŠธ๋ช…] + Props ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
    • interface AmpProps { ... }
  • ์ผ๋ฐ˜ ํƒ€์ž… ๋„ค์ด๋ฐ ๊ทœ์น™

    • ๊ทธ ์™ธ ์ผ๋ฐ˜์ ์ธ ํƒ€์ž… ์ •์˜ ์‹œ์—๋Š” ์ด๋ฆ„ ๋’ค์— Types ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
    • interface UserTypes { ... }
๐Ÿ’ก ๋ณ€์ˆ˜
  • ๋ณ€์ˆ˜ ๋ฐ ์ƒ์ˆ˜ ์„ ์–ธ

    • const โ†’ let ์ˆœ์„œ๋กœ ์„ ์–ธ (var ๊ธˆ์ง€)
    • ์ƒ์ˆ˜๋Š” UPPER_SNAKE_CASE ์‚ฌ์šฉ (ex. API_KEY)
    • ์ค„์ž„๋ง ์ง€์–‘, ์˜๋ฏธ ์žˆ๋Š” ๋ณ€์ˆ˜๋ช… ์‚ฌ์šฉ (ex. userData)
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ํƒ€์ž…

    • ๋ณต์ˆ˜ ๋ฐ์ดํ„ฐ๋Š” ๋์— s ์‚ฌ์šฉ (ex. userLists)
    • Boolean์€ is ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ (ex. isActive)
    • ๋ฌธ์ž์—ด ์กฐํ•ฉ์€ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด(`) ์‚ฌ์šฉ
  • map ์‚ฌ์šฉ ์‹œ key์— index ์‚ฌ์šฉ ์ง€์–‘ (๊ณ ์œ  ID ๊ถŒ์žฅ)

๐Ÿ”‘ ํ•จ์ˆ˜
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(const) ์‚ฌ์šฉ์„ ์›์น™์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„ค์ด๋ฐ: [๋™์‚ฌ + ๋ช…์‚ฌ] ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • get: ๊ฐ’ ๋ฐ˜ํ™˜ | create: ์‹ ๊ทœ ์ƒ์„ฑ | check: ๋กœ์ง ํ™•์ธ
    • convert: ํ˜•ํƒœ ๋ณ€ํ™˜ | add/minus: ์ˆ˜์น˜ ์—ฐ์‚ฐ | filter: ๋ฐฐ์—ด ํ•„ํ„ฐ๋ง
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ: ์˜ค์ง ์ด๋ฒคํŠธ ๊ด€๋ จ ํ•จ์ˆ˜์—๋งŒ handle์„ ๋ถ™์ž…๋‹ˆ๋‹ค.

    • ๋™์ž‘์„ ์ƒ์„ธํžˆ ๊ธฐ๋ก (ex. handleResetClick, handleSubmitClick)
  • ์œ ํ‹ธ ํ•จ์ˆ˜: ๋ฐ˜ํ™˜๊ฐ’ ์ค‘์‹ฌ์œผ๋กœ ๋„ค์ด๋ฐํ•ฉ๋‹ˆ๋‹ค.

    • Boolean ๋ฐ˜ํ™˜ ์‹œ has ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ (ex. hasEmail)
๐Ÿ—๏ธ ๋ฐฐ์—ด & ๊ตฌ์กฐ ๋ถ„ํ•ด
  • ๋ฐฐ์—ด ๋ณต์‚ฌ: ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž(...) ์‚ฌ์šฉ
    • ex) const copys = [...originals]
  • ๋ฐ˜๋ณต๋ฌธ: for๋ฌธ ์ง€์–‘, forEach๋‚˜ map ์‚ฌ์šฉ ๊ถŒ์žฅ
  • ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น: ๊ฐ์ฒด/๋ฐฐ์—ด ์ถ”์ถœ ์‹œ ํ•„์ˆ˜ ์‚ฌ์šฉ (ํŠนํžˆ Props ๋ฐ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ)
// 1. Interface ๋„ค์ด๋ฐ (PascalCase + Types)
interface VoteAllInfoTypes {
  date: number;
  time: string;
}

interface UserDataTypes {
  userName: string;
  userBirth: string;
}

// 2. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์ ์šฉ ์˜ˆ์‹œ
const MonthVoting = ({ date, time }: VoteAllInfoTypes) => { ... }

const checkIsUser = ({ userName, userBirth }: UserDataTypes) => { ... }
๐ŸŽจ ์Šคํƒ€์ผ

๐Ÿ—๏ธ Markup Naming

  • ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๋Š” Wrapper๋Š” container๋กœ ๋ช…์นญ ํ†ต์ผ
  • ์Šคํƒ€์ผ ๋„ค์ด๋ฐ์€ ์š”์†Œ์˜ ์˜๋ฏธ๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋„๋ก ์ž‘์„ฑ (ex. user-list-container)

๐Ÿ’„ CSS Property Order (Mozilla Style)

์†์„ฑ ๊ธฐ์ˆ  ์‹œ ์•„๋ž˜์˜ ํ๋ฆ„(๋ฐ”๊นฅ์—์„œ ์•ˆ์ชฝ์œผ๋กœ)์„ ์ตœ๋Œ€ํ•œ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  1. Display & Layout: display, position, float, z-index
  2. Box Model: width, height, margin, padding
  3. Visual: border, background, opacity
  4. Typography: color, font, text-align, white-space
  5. Content: content (pseudo-elements)
CSS ์†์„ฑ ๊ธฐ์ˆ  ์ˆœ์„œ
  1. display -๊ฐ์ฒด์˜ ๋…ธ์ถœ์—ฌ๋ถ€/ํ‘œํ˜„๋ฐฉ์‹--
  2. list-style
  3. position -์œ„์น˜/์ขŒํ‘œ--
  4. float
  5. clear
  6. width / height -ํฌ๊ธฐ/์—ฌ๋ฐฑ--
  7. padding / margin
  8. border / background -์œค๊ณฝ/๋ฐฐ๊ฒฝ--
  9. color / font -๊ธ€์ž/์ •๋ ฌ--
  10. text-decoration
  11. text-align / vertical-align
  12. white-space
  13. other text
  14. content -๋‚ด์šฉ--

โ€ผ๏ธ Ground Rule


๐Ÿ™Œ ํ˜‘์—… ๊ทœ์น™
  • ๐Ÿ’ก ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ๋ถ€๋„๋Ÿฌ์›Œํ•˜์ง€ ์•Š๊ธฐ

  • ๐Ÿ™‹โ€โ™‚๏ธ ์งˆ๋ฌธ ๋งŽ์ด ํ•˜๊ธฐ

  • ๐ŸŒฑ ์„œ๋กœ ๋ฐฐ๋ คํ•˜๋ฉฐ ์†Œํ†ตํ•˜๊ธฐ

  • ๐Ÿง ๊นŠ์ด ์ƒ๊ฐํ•˜๊ณ  ๊ณ ๋ฏผํ•ด๋ณด๊ธฐ

  • โฐ ๋งค์ผ ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ ์ง€ํ‚ค๊ธฐ

๐Ÿ” ์ฝ”๋“œ๋ฆฌ๋ทฐ ๊ทœ์น™

1๏ธโƒฃ ๋‘ฅ๊ธ€๊ฒŒ ๋งํ•˜๊ธฐ

  • ๊ณต๊ฒฉ์ ์ด๊ฑฐ๋‚˜ ๋‹จ์ •์ ์ธ ํ‘œํ˜„์€ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๊ทผ๊ฑฐ ์žˆ๋Š” ๋ฆฌ๋ทฐ

  • ๊ฐœ์ธ์˜ ์ทจํ–ฅ์ด ์•„๋‹Œ ๊ฐ๊ด€์ ์ธ ์ด์œ ์™€ ๋งฅ๋ฝ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์žˆ๋‹ค๋ฉด ๊ด€๋ จ ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค(Reference) ๋งํฌ ์ฒจ๋ถ€๋ฅผ ์ ๊ทน ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์ฝ”๋“œ๋ž˜๋น—(AI)์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ

  • AI ๋ฆฌ๋ทฐ์–ด๋Š” ๋ณด์กฐ ๋„๊ตฌ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ž๋™ ๋ฆฌ๋ทฐ์— ์˜์กดํ•˜์—ฌ ๋Œ€์ถฉ ๋„˜๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ž‘์„ฑ์ž์˜ ๋กœ์ง, ์˜๋„, ๋น„์ฆˆ๋‹ˆ์Šค ๋งฅ๋ฝ์„ ์šฐ๋ฆฌ ์Šค์Šค๋กœ ๊ผผ๊ผผํžˆ ํ™•์ธํ•˜๊ณ  ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ๋น„ํŒ์  ์ˆ˜์šฉ

  • ๋ชจ๋“  ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ˆ˜์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ์˜๊ฒฌ์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์ ๊ทน์ ์œผ๋กœ ํ† ๋ก ํ•˜๋ฉฐ, ์˜๊ฒฌ์„ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

About

๐ŸŽธ ์•ฐํ”„ ํด๋ผ ๋ ˆํฌ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •  

Languages