Skip to content
Β 
Β 

Repository files navigation

πŸ“Έ PICDAY β€” Frontend

λ‚˜μ—κ²Œ λ”± λ§žλŠ” 사진관을 μ°Ύμ•„μ£ΌλŠ” μ„œλΉ„μŠ€, PICDAY의 ν”„λ‘ νŠΈμ—”λ“œ λ ˆν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€.


πŸ“Œ ν”„λ‘œμ νŠΈ μ†Œκ°œ

PICDAYλŠ” μ‚¬μš©μžκ°€ 촬영 λͺ©μ , λ‚ μ§œ, μ§€μ—­ λ“±μ˜ 쑰건으둜 사진관을 κ²€μƒ‰ν•˜κ³  μ˜ˆμ•½ν•  수 μžˆλŠ” μ›Ή μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.


πŸ‘₯ νŒ€μ› 및 μ—­ν•  λΆ„λ‹΄

이름 μ—­ν•  λ‹΄λ‹Ή νŽ˜μ΄μ§€
김이쀀 (νŒ€μž₯) FE A. 둜그인/νšŒμ›κ°€μž…, B. 검색, G. μœ„μ‹œλ¦¬μŠ€νŠΈ
λ‚¨ν˜„μ€€ FE C. 사진관 탐색/상세
μ „μ§€ν˜œ FE D. 비ꡐ, E. μ˜ˆμ•½
μ‹ μŠΉμ—° FE F. λ§ˆμ΄νŽ˜μ΄μ§€, 리뷰

πŸ›  기술 μŠ€νƒ

μ—­ν•  기술
λ²ˆλ“€λŸ¬ Vite
UI React + TypeScript
μŠ€νƒ€μΌλ§ Tailwind CSS v4
λΌμš°ν„° React Router v8
μ „μ—­ μƒνƒœ Zustand v5
μ„œλ²„ μƒνƒœ TanStack Query v5
HTTP ν΄λΌμ΄μ–ΈνŠΈ axios
지도 react-kakao-maps-sdk

πŸ“ 폴더 ꡬ쑰

src/
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ common/       # 곡톡 UI μ»΄ν¬λ„ŒνŠΈ (Button, Card, Chip λ“±)
β”‚   β”œβ”€β”€ layout/       # λ ˆμ΄μ•„μ›ƒ μ»΄ν¬λ„ŒνŠΈ (NavigationBar, AppTabBar λ“±)
β”‚   └── icons/        # μ•„μ΄μ½˜ μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ pages/
β”‚   β”œβ”€β”€ auth/         # A - 둜그인/νšŒμ›κ°€μž…
β”‚   β”œβ”€β”€ home/         # A-1/B-1 - ν™ˆ
β”‚   β”œβ”€β”€ search/       # B - 검색
β”‚   β”œβ”€β”€ studio/       # C - 사진관 λͺ©λ‘/상세
β”‚   β”œβ”€β”€ compare/      # D - 사진관 비ꡐ
β”‚   β”œβ”€β”€ reservation/  # E - μ˜ˆμ•½
β”‚   β”œβ”€β”€ mypage/       # F - λ§ˆμ΄νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ wishlist/     # G-1 μœ„μ‹œλ¦¬μŠ€νŠΈ
β”‚   └── common/       # μ•½κ΄€ 상세 λ“± 곡용 ν™”λ©΄
β”œβ”€β”€ hooks/            # μ»€μŠ€ν…€ ν›…
β”œβ”€β”€ stores/           # Zustand μ „μ—­ μƒνƒœ
β”œβ”€β”€ services/         # API 호좜 ν•¨μˆ˜ (axios ν΄λΌμ΄μ–ΈνŠΈ + 도메인별 ν•¨μˆ˜)
β”œβ”€β”€ types/            # TypeScript νƒ€μž…/μΈν„°νŽ˜μ΄μŠ€
β”œβ”€β”€ constants/        # 곡용 μƒμˆ˜ (μ•½κ΄€ λͺ©λ‘ λ“±)
β”œβ”€β”€ styles/           # λ””μžμΈ 토큰, νƒ€μ΄ν¬κ·Έλž˜ν”Ό CSS
β”œβ”€β”€ assets/           # 이미지, 폰트 λ“± 정적 파일
β”œβ”€β”€ App.tsx           # 라우트 μ„€μ •
└── main.tsx          # μ•± μ§„μž…μ 

✍️ μ½”λ“œ μŠ€νƒ€μΌ

  • λ”°μ˜΄ν‘œΒ·μ„Έλ―Έμ½œλ‘ : μƒˆλ‘œ μž‘μ„±ν•˜λŠ” μ½”λ“œλŠ” μž‘μ€λ”°μ˜΄ν‘œ(') + μ„Έλ―Έμ½œλ‘  μ—†μŒμ„ 기본으둜 ν•©λ‹ˆλ‹€. components/common/ μ΄ˆλ°˜μ— λ§Œλ“€μ–΄μ§„ 일뢀 μ»΄ν¬λ„ŒνŠΈ(예: InputField.tsx, SearchField.tsx, Calendar.tsx λ“±)λŠ” ν°λ”°μ˜΄ν‘œ+μ„Έλ―Έμ½œλ‘  μŠ€νƒ€μΌλ‘œ λ‚¨μ•„μžˆλŠ”λ°, νŒ€ ν•©μ˜λ‘œ κΈ°μ‘΄ νŒŒμΌμ€ ꡳ이 ν†΅μΌν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ λ‘” κ²ƒμž…λ‹ˆλ‹€ β€” νŒŒμΌλ§ˆλ‹€ μŠ€νƒ€μΌμ΄ μ„žμΈ 게 μ•„λ‹ˆλΌ "이전에 λ§Œλ“  파일 vs 이후에 λ§Œλ“  파일" κΈ°μ€€μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€.
  • 이 μ €μž₯μ†Œμ—” λ³„λ„μ˜ ESLint 섀정이 μ—†κ³  oxlint(npm run lint)만 μ‚¬μš©ν•©λ‹ˆλ‹€.

🌿 브랜치 μ»¨λ²€μ…˜

브랜치 ꡬ성

브랜치 μ„€λͺ…
main μ‹€μ œ μ„œλΉ„μŠ€μ— λ°°ν¬λ˜λŠ” 브랜치
develop λͺ¨λ“  κΈ°λŠ₯ λΈŒλžœμΉ˜κ°€ λ³‘ν•©λ˜λŠ” κΈ°λ³Έ 개발 브랜치
feature/* κΈ°λŠ₯ 개발 (developμ—μ„œ λΆ„κΈ°)
bugfix/* 버그 μˆ˜μ • (developμ—μ„œ λΆ„κΈ°)
hotfix/* 운영 쀑 κΈ΄κΈ‰ μˆ˜μ • (mainμ—μ„œ λΆ„κΈ°)
design/* λ””μžμΈ 반영 (developμ—μ„œ λΆ„κΈ°)
fix/* 버그 μˆ˜μ • (developμ—μ„œ λΆ„κΈ°, bugfix/*와 λ™μΌν•˜κ²Œ μ‚¬μš©)
refactor/* λ¦¬νŒ©ν† λ§ (developμ—μ„œ λΆ„κΈ°)
docs/* λ¬Έμ„œ μž‘μ—… (developμ—μ„œ λΆ„κΈ°)
test/* ν…ŒμŠ€νŠΈ (developμ—μ„œ λΆ„κΈ°)
chore/* 기타 μž‘μ—… (developμ—μ„œ λΆ„κΈ°)

브랜치 넀이밍

<type>/<issue-number>-<κ°„λ‹¨ν•œμ„€λͺ…>
feature/12-login-form
bugfix/45-missing-data-sync
hotfix/73-server-crash-on-boot
design/21-studio-detail-ui
refactor/34-search-hook
docs/5-readme-update

병합 흐름

단계 μ„€λͺ…
feature/, bugfix/ developμ—μ„œ λΆ„κΈ°ν•˜κ³  λ‹€μ‹œ develop으둜 병합
develop β†’ main μ •κΈ° 릴리즈 λ˜λŠ” QA μ™„λ£Œ μ‹œμ μ— 병합
hotfix/ mainμ—μ„œ 직접 λΆ„κΈ°ν•˜μ—¬ 운영 κΈ΄κΈ‰ μˆ˜μ •λ§Œ 처리
main β†’ develop hotfix 이후 develop과의 μƒνƒœ 동기화

✏️ 컀밋 μ»¨λ²€μ…˜

ν˜•μ‹

<Gitmoji> <Type>. <μš”μ•½ μ„€λͺ…>

Why: λ³€κ²½ 이유
How: λ³€κ²½ 방법 (각 쀄 72자 이내)

Tag: #ν‚€μ›Œλ“œ #기술 #νŒ¨ν„΄
See: 링크 λ˜λŠ” 이슈 번호

Gitmoji λͺ©λ‘

Gitmoji Type μ„€λͺ…
🎨 Style μ½”λ“œ 포맷, ꡬ쑰 κ°œμ„ 
⚑ Perf μ„±λŠ₯ κ°œμ„ 
πŸ”₯ Remove λΆˆν•„μš”ν•œ μ½”λ“œ/파일 μ‚­μ œ
πŸ› Fix 버그 μˆ˜μ •
πŸš‘ Hotfix κΈ΄κΈ‰ μˆ˜μ •
✨ Feat μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
πŸ“ Docs λ¬Έμ„œ μž‘μ„± 및 μˆ˜μ •
πŸš€ Deploy 배포 κ΄€λ ¨ μž‘μ—…
🚨 UI UI/μŠ€νƒ€μΌ λ³€κ²½
βœ… Test ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€ 및 μˆ˜μ •
πŸ”’ Security λ³΄μ•ˆ 이슈 ν•΄κ²°
♻️ Refac λ¦¬νŒ©ν† λ§
πŸ”§ Config μ„€μ • 파일 μˆ˜μ •
πŸ”¨ Script λΉŒλ“œ/개발 슀크립트
πŸ’‘ Comment 주석 μΆ”κ°€/μˆ˜μ •
🚚 Move λ¦¬μ†ŒμŠ€ 이동/리넀이밍
πŸ“± Mobile λ°˜μ‘ν˜•/λ””λ°”μ΄μŠ€ λŒ€μ‘
🩹 Patch κ°„λ‹¨ν•œ μˆ˜μ •
✏️ Typo μ˜€νƒ€ μˆ˜μ •
βͺ Revert 이전 컀밋 λ‘€λ°±
πŸ™ˆ Ignore .gitignore κ΄€λ ¨ μž‘μ—…

μ˜ˆμ‹œ

✨ Feat. 사진관 검색 ν•„ν„° κΈ°λŠ₯ κ΅¬ν˜„

Why: μ‚¬μš©μžκ°€ λͺ©μ /λ‚ μ§œ/μ§€μ—­ 쑰건으둜 사진관을 필터링할 수 μžˆμ–΄μ•Ό 함

How: FilterPage에 쑰건 μƒνƒœ 관리 μΆ”κ°€,
     TanStack Query둜 ν•„ν„° νŒŒλΌλ―Έν„° API 연동

Tag: #feat #filter #react-query
See: #21

πŸ”€ PR μ»¨λ²€μ…˜

## κ΄€λ ¨ 이슈
- Closes #이슈번호

## μ£Όμš” λ³€κ²½ λ‚΄μš©
-

## μŠ€ν¬λ¦°μƒ· (선택)

## ν…ŒμŠ€νŠΈ 체크리슀트
- [ ] 정상 λ™μž‘ 확인
- [ ] λΈŒλΌμš°μ € ν˜Έν™˜μ„± 확인

## 기타 곡유 사항

πŸ–₯ μ‹€ν–‰ 방법

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# ν™˜κ²½λ³€μˆ˜ μ„€μ • (.env.example을 볡사해 κ°’ μ±„μš°κΈ°)
cp .env.example .env

# 개발 μ„œλ²„ μ‹€ν–‰ (배포된 λ°±μ—”λ“œλ‘œ 뢙일 땐 λ°˜λ“œμ‹œ 3000번 포트둜 β€” μ•„λž˜ μ°Έκ³ )
npm run dev -- --port 3000

.env에 ν•„μš”ν•œ κ°’:

λ³€μˆ˜ μ„€λͺ…
VITE_API_BASE_URL λ°±μ—”λ“œ API Base URL (μ˜€λ¦¬μ§„λ§Œ, 예: http://localhost:8080)
VITE_KAKAO_MAP_KEY 카카였맡 JavaScript ν‚€. Kakao Developersμ—μ„œ λ°œκΈ‰, ν”Œλž«νΌμ— http://localhost:3000 등둝 ν•„μš”

⚠️ CORS 주의: 배포된 λ°±μ—”λ“œλŠ” localhost:3000만 CORS ν—ˆμš© λͺ©λ‘μ— λ“±λ‘λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Vite κΈ°λ³Έ 포트(5173)둜 μ‹€ν–‰ν•˜λ©΄ VITE_API_BASE_URL을 배포 λ°±μ—”λ“œλ‘œ μ„€μ •ν–ˆμ„ λ•Œ CORS μ—λŸ¬κ°€ λ‚©λ‹ˆλ‹€. λ°˜λ“œμ‹œ npm run dev -- --port 3000으둜 μ‹€ν–‰ν•˜μ„Έμš”. (둜컬 λ°±μ—”λ“œλ₯Ό 직접 λ„μ›Œμ„œ λΆ™μ΄λŠ” κ²½μš°λŠ” ν•΄λ‹Ή μ—†μŒ)

λͺ¨λ°”일 UI 확인은 Chrome DevToolsμ—μ„œ Cmd + Shift + M (λ””λ°”μ΄μŠ€ λͺ¨λ“œ) μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.


πŸš€ 배포

  • ν”„λ‘œλ•μ…˜: picday-fe.vercel.app β€” main λΈŒλžœμΉ˜μ— pushν•˜λ©΄ Vercel(GitHub 연동)이 μžλ™μœΌλ‘œ λ°°ν¬ν•©λ‹ˆλ‹€.
  • ν™˜κ²½λ³€μˆ˜λŠ” Vercel ν”„λ‘œμ νŠΈ μ„€μ •(Production/Preview)μ—μ„œ λ³„λ„λ‘œ κ΄€λ¦¬ν•˜λ©°, 둜컬 .envμ™€λŠ” λ…λ¦½μ μž…λ‹ˆλ‹€.

πŸ“± ν™”λ©΄ λͺ©λ‘ 및 ν”Œλ‘œμš°

A. 둜그인/νšŒμ›κ°€μž… Β· ν™ˆ

ν™”λ©΄ μ„€λͺ…
A-1 λΉ„λ‘œκ·ΈμΈ ν™ˆ κ²€μƒ‰μ°½Β·μΊλŸ¬μ…€Β·μ‚¬μ§„κ΄€ 리슀트 (Guest νƒ­λ°”)
B-1 둜그인 ν›„ ν™ˆ A-1κ³Ό 동일 μ½˜ν…μΈ , User νƒ­λ°”
A-2 둜그인 아이디/λΉ„λ°€λ²ˆν˜Έ 둜그인, μ†Œμ…œ 둜그인
A-2 μ†Œμ…œ 인증 처리 쀑 카카였/ꡬ글 인증 콜백 λŒ€κΈ° ν™”λ©΄
A-3 자체 νšŒμ›κ°€μž… 이름/아이디/λΉ„λ°€λ²ˆν˜Έ/이메일/μ „ν™”λ²ˆν˜Έ + μ•½κ΄€λ™μ˜
A-4 νšŒμ›κ°€μž… μ™„λ£Œ κ°€μž… μ™„λ£Œ μ•ˆλ‚΄, 둜그인 ν™”λ©΄μœΌλ‘œ 이동
A-5 μ†Œμ…œ μ‹ κ·œνšŒμ› μ•½κ΄€λ™μ˜ μ†Œμ…œ 졜초 둜그인 μ‹œ μ•½κ΄€λ™μ˜λ§Œ λ°›λŠ” ν™”λ©΄

B. 검색

ν™”λ©΄ μ„€λͺ…
B-2 톡합검색 ν‚€μ›Œλ“œ 검색 메인 ν™”λ©΄
B-2 μžλ™μ™„μ„± λ…ΈμΆœ 검색어 μžλ™μ™„μ„±
B-3 λ‚ μ§œ 선택 촬영 λ‚ μ§œ 선택
B-4 λͺ©μ  선택 촬영 λͺ©μ  선택

C. 사진관

ν™”λ©΄ μ„€λͺ…
C-1 지도+리슀트 지도와 리슀트 톡합 λ·°
C-2 지도 전체뷰 지도 전체 ν™”λ©΄
C-3 κ²°κ³Ό μ—†μŒ 검색 κ²°κ³Ό μ—†μŒ
C-3 리슀트 전체뷰 리슀트 전체 ν™”λ©΄
C-4 ν•„ν„° ν•„ν„° μ„€μ • (가격, μŠ€νƒ€μΌ λ“±)
C-5 사진관 상세 사진관 상세 정보
C-6 리뷰 상세 리뷰 λͺ©λ‘ 및 상세
C-7 컨셉 λͺ©λ‘ 촬영 컨셉 λͺ©λ‘
C-8 컨셉 사진 상세 컨셉 사진 상세

D. 비ꡐ

ν™”λ©΄ μ„€λͺ…
D-1 비ꡐ할 촬영 λͺ©μ  선택 비ꡐ λͺ©μ  선택
D-2 비ꡐ 2개 사진관 2개 비ꡐ
D-3 비ꡐ 3개 사진관 3개 비ꡐ

E. μ˜ˆμ•½

ν™”λ©΄ μ„€λͺ…
E-1 μ˜ˆμ•½ μ˜ˆμ•½ 정보 μž…λ ₯
E-1 μ œνœ΄μƒ΅ 선택 헀어메이크업 μ œνœ΄μƒ΅ 선택
E-3 μ˜ˆμ•½ μ™„λ£Œ μ˜ˆμ•½ μ™„λ£Œ 확인

F. λ§ˆμ΄νŽ˜μ΄μ§€

ν™”λ©΄ μ„€λͺ…
F-1 μ˜ˆμ•½ λͺ©λ‘ 전체/μ˜ˆμ•½μ™„λ£Œ/μ΄¬μ˜μ™„λ£Œ/μ·¨μ†Œ 탭별 μ˜ˆμ•½ λ‚΄μ—­
F-1D μ˜ˆμ•½ 상세 μ˜ˆμ•½ 상세 λ‚΄μ—­, μƒνƒœλ³„(μ˜ˆμ•½μ™„λ£Œ/μ΄¬μ˜μ™„λ£Œ/μ·¨μ†Œ) ν™”λ©΄ λΆ„κΈ°
F-1C μ˜ˆμ•½ μ·¨μ†Œ μ˜ˆμ•½ λ‚΄μ—­Β·ν™˜λΆˆ μ•ˆλ‚΄ 확인 ν›„ μ·¨μ†Œ μ§„ν–‰
F-1C μ·¨μ†Œ μ™„λ£Œ μ·¨μ†Œ μ™„λ£Œ μ•ˆλ‚΄, λ§ˆμ΄νŽ˜μ΄μ§€/ν™ˆ 이동
F-1R 리뷰 μž‘μ„± 촬영 μ™„λ£Œ 건에 λŒ€ν•œ λ³„μ Β·νƒœκ·ΈΒ·ν›„κΈ°Β·μ‚¬μ§„ 첨뢀
F-1R 리뷰 등둝 μ™„λ£Œ 리뷰 등둝 μ™„λ£Œ μ•ˆλ‚΄, λ§ˆμ΄νŽ˜μ΄μ§€ 이동
λ‚΄ 리뷰 상세/μˆ˜μ • μž‘μ„±ν•œ 리뷰 μ‘°νšŒΒ·μˆ˜μ •Β·μ‚­μ œ (/mypage/reviews/:reviewId)
F-3 ν”„λ‘œν•„ μ„€μ • λ‹‰λ„€μž„Β·μ•Œλ¦Ό μ„€μ • νŽΈμ§‘, μ—°κ²° 계정 확인
F-3 νšŒμ›νƒˆν‡΄ νƒˆν‡΄ 확인 νŒμ—… ν”Œλ‘œμš°
F-3 νƒˆν‡΄ μ™„λ£Œ νƒˆν‡΄ μ™„λ£Œ μ•ˆλ‚΄, ν™ˆμœΌλ‘œ 이동

G. 기타

ν™”λ©΄ μ„€λͺ…
G-1 μœ„μ‹œλ¦¬μŠ€νŠΈ μ°œν•œ 사진관 λͺ©λ‘

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages