Skip to content

gkkary3/miniBlog-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

96 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Boolog

🌐 라이브 데λͺ¨

이 ν”„λ‘œμ νŠΈλŠ” 개인적인 기둝을 λͺ©μ μœΌλ‘œ μ‹œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ²˜μŒμ—λŠ” μ†Œμ†Œν•œ 기둝 μš©λ„λ‘œ μ‹œμž‘ν–ˆμ§€λ§Œ, 점차 λ‹€λ₯Έ μ‚¬μš©μžλ“€λ„ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλŠ” λΈ”λ‘œκ·Έ ν”Œλž«νΌμœΌλ‘œ λ°œμ „μ‹œν‚€κ³ μž κ³ λ„ν™”ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ§ˆν¬λ‹€μš΄μœΌλ‘œ 글을 μž‘μ„±ν•˜κ³ , 이λ₯Ό κ³΅μœ ν•˜λ©° μ†Œν†΅ν•  수 μžˆλŠ” λΈ”λ‘œκ·Έ ν”Œλž«νΌ Boologμž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ μŠ€ν¬λ¦°μƒ·

메인 νŽ˜μ΄μ§€

λ©”μΈνŽ˜μ΄μ§€
κΈ€ μž‘μ„± μ‚¬μš©μž λΈ”λ‘œκ·Έ 둜그인
κΈ€μž‘μ„± μ‚¬μš©μžλΈ”λ‘œκ·Έ 둜그인
λŒ“κΈ€ μ‹œμŠ€ν…œ κ²Œμ‹œκΈ€ 상세보기 νšŒμ›κ°€μž…
λŒ“κΈ€ κ²Œμ‹œκΈ€μƒμ„Έ νšŒμ›κ°€μž…

μ£Όμš” κΈ°λŠ₯

인증 μ‹œμŠ€ν…œ

  • 일반 νšŒμ›κ°€μž…/둜그인
  • OAuth μ†Œμ…œ 둜그인 (Google, Kakao)
  • JWT 토큰 기반 인증 및 μžλ™ κ°±μ‹ 
  • 둜그인 μƒνƒœ 지속성 보μž₯

λΈ”λ‘œκ·Έ 핡심 κΈ°λŠ₯

  • λ§ˆν¬λ‹€μš΄ 에디터λ₯Ό ν™œμš©ν•œ κΈ€ μž‘μ„±/μˆ˜μ •
  • μΉ΄ν…Œκ³ λ¦¬λ³„ κΈ€ λΆ„λ₯˜ 및 필터링
  • μ‹€μ‹œκ°„ λŒ“κΈ€ μ‹œμŠ€ν…œ
  • μ‚¬μš©μžλ³„ 개인 λΈ”λ‘œκ·Έ νŽ˜μ΄μ§€
  • λ¬΄ν•œ 슀크둀 λ°©μ‹μ˜ κΈ€ λͺ©λ‘
  • λ°˜μ‘ν˜• UI/UX

μ‚¬μš©μž κ²½ν—˜

  • λ‘œλ”© μƒνƒœλ₯Ό μœ„ν•œ μŠ€μΌˆλ ˆν†€ UI
  • μ—λŸ¬ 핸듀링 및 μ‚¬μš©μž ν”Όλ“œλ°±
  • λͺ¨λ°”일 μ΅œμ ν™” μΈν„°νŽ˜μ΄μŠ€

기술 μŠ€νƒ

Frontend

  • Next.js 15 - React 기반 ν’€μŠ€νƒ ν”„λ ˆμž„μ›Œν¬
  • TypeScript - νƒ€μž… μ•ˆμ •μ„± 보μž₯
  • TailwindCSS - μœ ν‹Έλ¦¬ν‹° 기반 μŠ€νƒ€μΌλ§
  • Zustand - κ²½λŸ‰ μƒνƒœ 관리
  • React Query - μ„œλ²„ μƒνƒœ 관리 및 캐싱
  • React Markdown - λ§ˆν¬λ‹€μš΄ λ Œλ”λ§

개발 도ꡬ

  • ESLint - μ½”λ“œ ν’ˆμ§ˆ 관리
  • TypeScript - 정적 νƒ€μž… 검사

ν”„λ‘œμ νŠΈ ꡬ쑰

src/
β”œβ”€β”€ app/                    # Next.js App Router νŽ˜μ΄μ§€λ“€
β”‚   β”œβ”€β”€ auth/              # 인증 κ΄€λ ¨ νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ posts/             # λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€ νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ login/             # 둜그인 νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ register/          # νšŒμ›κ°€μž… νŽ˜μ΄μ§€
β”‚   └── write/             # κΈ€ μž‘μ„± νŽ˜μ΄μ§€
β”œβ”€β”€ components/            # μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ“€
β”‚   β”œβ”€β”€ Comments/          # λŒ“κΈ€ μ‹œμŠ€ν…œ μ»΄ν¬λ„ŒνŠΈ
β”‚   └── UserBlog/          # μ‚¬μš©μž λΈ”λ‘œκ·Έ μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ hooks/                 # μ»€μŠ€ν…€ React ν›…λ“€
β”œβ”€β”€ lib/                   # API 톡신 둜직
β”œβ”€β”€ stores/                # Zustand μƒνƒœ 관리 μŠ€ν† μ–΄
└── types/                 # TypeScript νƒ€μž… μ •μ˜

핡심 κ΅¬ν˜„ 사항

1. 인증 μ‹œμŠ€ν…œ κ΅¬ν˜„

// JWT 토큰 μžλ™ κ°±μ‹  및 API μš”μ²­ 래퍼
authenticatedFetch: async (url: string, options: RequestInit = {}) => {
  // Access Token 만료 μ‹œ μžλ™μœΌλ‘œ Refresh Token으둜 κ°±μ‹ 
  // 401 μ—λŸ¬ 처리 및 μž¬μš”μ²­ 둜직 κ΅¬ν˜„
};

2. λ¬΄ν•œ 슀크둀 κ΅¬ν˜„

  • React Query의 useInfiniteQueryλ₯Ό ν™œμš©ν•œ 효율적인 데이터 페칭
  • μ‚¬μš©μž κ²½ν—˜ μ΅œμ ν™”λ₯Ό μœ„ν•œ μŠ€μΌˆλ ˆν†€ λ‘œλ”©

3. μƒνƒœ 관리 μ•„ν‚€ν…μ²˜

  • Zustandλ₯Ό ν†΅ν•œ μ „μ—­ μƒνƒœ 관리 (인증 μƒνƒœ, μ‚¬μš©μž 정보)
  • React Queryλ₯Ό ν†΅ν•œ μ„œλ²„ μƒνƒœ 캐싱 및 동기화
  • localStorage 연동을 ν†΅ν•œ μƒνƒœ 지속성

4. TypeScript ν™œμš©

  • μ—„κ²©ν•œ νƒ€μž… μ •μ˜λ‘œ λŸ°νƒ€μž„ μ—λŸ¬ λ°©μ§€
  • API 응닡 데이터 νƒ€μž… μ•ˆμ •μ„± 보μž₯
  • μ»΄ν¬λ„ŒνŠΈ Props νƒ€μž… μ •μ˜

API 연동

λ°±μ—”λ“œ APIμ™€μ˜ RESTful 톡신을 톡해 λ‹€μŒ κΈ°λŠ₯듀을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€:

  • 인증: /auth/login, /auth/signup, /auth/refresh
  • OAuth: /auth/google, /auth/kakao
  • κ²Œμ‹œκΈ€: /posts (CRUD)
  • λŒ“κΈ€: /comments (CRUD)
  • μ‚¬μš©μž: /users (ν”„λ‘œν•„ 쑰회)

μ£Όμš” ν•™μŠ΅ 포인트

  • Next.js App Routerλ₯Ό ν™œμš©ν•œ λͺ¨λ˜ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발
  • JWT 토큰 기반 인증 μ‹œμŠ€ν…œ κ΅¬ν˜„ 및 λ³΄μ•ˆ 고렀사항
  • React Queryλ₯Ό ν™œμš©ν•œ 효율적인 μ„œλ²„ μƒνƒœ 관리
  • TypeScriptλ₯Ό ν™œμš©ν•œ λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ νƒ€μž… μ•ˆμ •μ„± 확보
  • μ‚¬μš©μž κ²½ν—˜μ„ κ³ λ €ν•œ λ°˜μ‘ν˜• μ›Ή λ””μžμΈ κ΅¬ν˜„

ν–₯ν›„ κ°œμ„ μ‚¬ν•­

  • μ‹€μ‹œκ°„ μ•Œλ¦Ό μ‹œμŠ€ν…œ (WebSocket)

Releases

Packages

Contributors

Languages