Eternal Victory Frontend Wiki - hyein07100/eternal-victory-frontend GitHub Wiki

πŸ›  ν”„λ‘œμ νŠΈ 생성 λͺ…λ Ήμ–΄

npx create-next-app@latest ev-frontend --typescript

βœ… 선택사항 ESLint: βœ…

Tailwind: βœ…

src 디렉토리: βœ…

App Router: βœ…

import alias: ❌

πŸ’¬ μ»¨λ²€μ…˜

πŸ’» μ½”λ“œ μ»¨λ²€μ…˜

λ³€μˆ˜ : μΉ΄λ©œμΌ€μ΄μŠ€+숫자 (예 : productData, selectedOption)

γ„΄ λ³€μˆ˜ 할당값이 boolrean일 경우: isλ₯Ό μ ‘λ‘μ‚¬λ‘œ (const isLoading = false;)

μƒμˆ˜ : λŒ€λ¬Έμž, 단어 ν•©μ„±μ‹œ μ–Έλ”μŠ€μ½”μ–΄

const BASE_URL = "http://localhost:3000/"

ν•¨μˆ˜ : ν™”μ‚΄ν‘œ ν•¨μˆ˜ μž‘μ„±

const page = () => {}

πŸ“ 폴더

  • 폴더λͺ… : μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜κΈ° μ΄μ–΄μ§€λŠ” 단어 - μ˜ˆμ‹œ) : user-id

  • 파일λͺ… : ν•¨μˆ˜λͺ…μ΄λž‘ λ™μΌν•˜κ²Œ μž‘μ„±ν•˜κΈ°

    μ»΄ν¬λ„ŒνŠΈ 파일 : 파슀칼 μΌ€μ΄μŠ€ (예: ProductDetail.tsx, Header.tsx)

    μŠ€νƒ€μΌ μ‹œνŠΈ 파일 : μŠ€νƒ€μΌ μ μš©ν•  파일λͺ…+.styled (예 : ProductDetail.styled.tsx, Header.styled.tsx)

πŸ“Œ 컀밋 μ»¨λ²€μ…˜

[νƒ€μž…] λ‚ μ§œ ID 제λͺ© #이슈번호

"[νƒ€μž…] <λ‚ μ§œ> 제λͺ© #이슈번호" 의 ν˜•μ‹μœΌλ‘œ 제λͺ© μž‘μ„±

제λͺ©μ€ 20자 이내 / 변경사항이 "무엇"인지 λͺ…ν™•νžˆ μž‘μ„± / 끝에 λ§ˆμΉ¨ν‘œ κΈˆμ§€

예)
git commit -m "컀밋 νƒœκ·Έ: 컀밋 λ‚΄μš© (#이슈번호)"
[Feat] 01/21 초기 ν”„λ‘œμ νŠΈ 생성

  • init: 처음 λΉŒλ“œ
  • feat: μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
  • fix: 버그, 였λ₯˜ ν•΄κ²°
  • docs: READMEλ‚˜ WIKI λ“±μ˜ λ¬Έμ„œ μˆ˜μ •
  • remove: 폴더 λ˜λŠ” 파일 μ‚­μ œ, μ“Έλͺ¨μ—†λŠ” μ½”λ“œ μ‚­μ œ
  • rename: 파일 이름 λ³€κ²½ λ˜λŠ” 파일 이동
  • refactor: κΈ°λŠ₯ μΆ”κ°€λ‚˜ 버그 μˆ˜μ •μ΄ μ—†λŠ” μ½”λ“œ λ³€κ²½ (μ½”λ“œ ꡬ쑰 λ³€κ²½ λ“±μ˜ λ¦¬νŒ©ν† λ§)
  • style: μ½”λ“œ formatting, μ„Έλ―Έμ½œλ‘  λˆ„λ½ λ“± μ½”λ“œ 자체의 변경이 μ—†λŠ” 경우
  • design: CSS λ“± μ‚¬μš©μž UI λ””μžμΈ λ³€κ²½
  • test: ν…ŒμŠ€νŠΈ μ½”λ“œ, λ¦¬νŒ©ν† λ§ ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
  • chore: src λ˜λŠ” test νŒŒμΌμ„ μˆ˜μ •ν•˜μ§€ μ•ŠλŠ” 기타 λ³€κ²½ 사항 (λΉŒλ“œ/νŒ¨ν‚€μ§€ λ§€λ‹ˆμ € μ„€μ • λ³€κ²½ λ“±)
  • merge: merge ν•˜λŠ” 경우
  • !BREAKING CHANGE: μ»€λ‹€λž€ API λ³€κ²½μ˜ 경우
  • !HOTFIX: κΈ‰ν•˜κ²Œ 치λͺ…적인 버그λ₯Ό 고쳐야 ν•˜λŠ” 경우

α›˜ 브랜치 μ»¨λ²€μ…˜

main : 배포용

develop : 개발용

feat/이슈번호-κΈ°λŠ₯ feat/22-login

git push origin feat/22-login 푸쉬 ν›„ github νŽ˜μ΄μ§€μ—μ„œ devleop으둜 PR, merge ν•˜κΈ°

πŸ“ 폴더 ꡬ쑰

κΈ°λŠ₯ 뢄리와 관심사 뢄리λ₯Ό κ³ λ €ν•œ Next.js + Spring API 연동 ν”„λ‘œμ νŠΈ κ΅¬μ‘°μž…λ‹ˆλ‹€.

/src
β”œβ”€β”€ app/                  # Next.js App Router (page.tsx λ“±)
β”‚   └── api/              # App Router의 API route (Next.js μ„œλ²„)
β”‚
β”œβ”€β”€ components/           # Dumb μ»΄ν¬λ„ŒνŠΈ (UI μ „μš©)
β”‚
β”œβ”€β”€ constants/            # μƒμˆ˜κ°’ μ •μ˜ (api endpoint, enums λ“±)
β”‚
β”œβ”€β”€ domain/              
β”‚   └── repositories/     # 좔상 μΈν„°νŽ˜μ΄μŠ€ (ex. DiaryRepository.ts)
β”‚   └── models/           # (선택) 도메인 λͺ¨λΈ μ •μ˜ (Diary.ts λ“±)
β”‚
β”œβ”€β”€ application/
β”‚   └── usecases/         # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (μ„œλΉ„μŠ€ 쀑심 계측)
β”‚       └── diary/
β”‚           └── dto/      # 데이터 전달 객체 (ex. CreateDiaryDTO.ts)
β”‚           β”œβ”€β”€ createDiary.ts              
β”‚
β”œβ”€β”€ infrastructure/
β”‚   └── repositories/     # μ‹€μ œ API κ΅¬ν˜„μ²΄ (ex. DiaryHttpRepository.ts)
β”‚
└── utils/                # λ²”μš© μœ ν‹Έ ν•¨μˆ˜


βœ… 섀계 μ² ν•™

  • app/: Next.js App Router μ „μš© 디렉토리, λΌμš°νŒ…λ§Œ λ‹΄λ‹Ή
  • features/: κΈ°λŠ₯ λ‹¨μœ„λ‘œ ν›…, UI, μ„œλΉ„μŠ€κ°€ λͺ¨μ—¬ μžˆλŠ” κ³  cohesion ꡬ쑰
  • domain/: μˆœμˆ˜ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈ μ •μ˜, μ™ΈλΆ€ 의쑴 μ—†μŒ
  • repositories/: κΈ°λŠ₯ μš”κ΅¬λ₯Ό μΆ”μƒν™”ν•œ interface
  • infra/: μ‹€μ œ API κ΅¬ν˜„ (fetch/axios λ“±)
  • components/: Dumb UI만 λ‹΄λ‹Ήν•˜λŠ” μž¬μ‚¬μš© μ»΄ν¬λ„ŒνŠΈ
  • constants/: API baseURL, μƒνƒœ κ°’, routes λ“± κ³ μ •κ°’
  • utils/: 포맷터, λ³€ν™˜κΈ° λ“± λΉ„μ¦ˆλ‹ˆμŠ€μ™€ λ¬΄κ΄€ν•œ μœ ν‹Έ ν•¨μˆ˜

🧠 μ‚½μ§ˆ 기둝

λ‚ μ§œ λ‚΄μš© 원인 ν•΄κ²°
2025-05-28 dev 브랜치 push 좩돌 GitHub dev λΈŒλžœμΉ˜μ— README 컀밋 쑴재 git push -f origin dev둜 κ°•μ œ ν‘Έμ‹œ

πŸ” 회고

  • Git μΆ©λŒμ€ 항상 둜컬 vs 원격 이λ ₯ 차이 λ•Œλ¬Έ β†’ push μ „ pull 확인 μŠ΅κ΄€ν™”

πŸš€ 배포 νžˆμŠ€ν† λ¦¬

Vercel μ„€μ •

ν•­λͺ© κ°’
ν”„λ‘œμ νŠΈ 이름 eternal-victory-frontend
배포 도ꡬ Vercel
연동 브랜치 main only (Preview 브랜치 λ―Έμ‚¬μš©)

배포 이λ ₯

λ‚ μ§œ 브랜치 배포 λ‚΄μš©
2025-05-28 main ν…ŒμŠ€νŠΈ νŽ˜μ΄μ§€ 졜초 배포