-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPROJECT_DOCUMENTATION.txt
More file actions
490 lines (379 loc) · 16.6 KB
/
PROJECT_DOCUMENTATION.txt
File metadata and controls
490 lines (379 loc) · 16.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
Publit Client - 프로젝트 문서
1. 프로젝트 개요
Publit Client는 Next.js 15와 Chakra UI v3를 기반으로 한 현대적인 웹 애플리케이션입니다. 사용자들이 콘텐츠를 작성하고 공유할 수 있는 플랫폼으로, OAuth 소셜 로그인, 실시간 에디터, 스마트 품질 검사 등의 기능을 제공합니다.
주요 기술 스택
- Frontend: Next.js 15.4.5, React 19.1.0, TypeScript
- UI Framework: Chakra UI v3.24.2
- State Management: @tanstack/react-query v5.83.0
- Rich Text Editor: TipTap v3
- Deployment: Google Cloud Run
- Build Tool: Docker
2. 프로젝트 주요 기능 및 구조도
2.1 핵심 기능
인증 시스템
- OAuth 소셜 로그인: Google, Kakao, Naver 지원
- 자동 로그인: localStorage 기반 토큰 관리
- 권한 관리: 사용자/관리자 역할 구분
콘텐츠 관리
- 리치 텍스트 에디터: TipTap 기반 고급 에디터
- 이미지 업로드: 드래그 앤 드롭 지원
- 실시간 미리보기: 작성 중 실시간 렌더링
검색 및 추천
- 실시간 검색: 키워드 기반 검색
- 스마트 추천: AI 기반 콘텐츠 추천
- 인기 콘텐츠: 트렌딩 게시물 표시
사용자 프로필
- 프로필 관리: 개인정보 수정, 프로필 이미지 변경
- 활동 내역: 작성한 게시물, 방문 통계
- 구독 관리: 다른 사용자 구독/구독 해제
관리자 기능
- 신고 관리: 부적절한 콘텐츠 신고 처리
- 공지사항: 관리자 공지 작성 및 관리
- 통계 대시보드: 사용자 활동 통계
2.2 프로젝트 구조도
publit-client/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── auth/ # 인증 관련 페이지
│ │ ├── admin/ # 관리자 페이지
│ │ ├── profile/ # 사용자 프로필
│ │ ├── pubble/ # 콘텐츠 작성/상세
│ │ ├── search/ # 검색 페이지
│ │ └── notifications/ # 알림 페이지
│ ├── components/ # 재사용 가능한 컴포넌트
│ │ ├── auth/ # 인증 관련 컴포넌트
│ │ ├── layout/ # 레이아웃 컴포넌트
│ │ ├── main/ # 메인 페이지 컴포넌트
│ │ ├── pubble/ # 콘텐츠 관련 컴포넌트
│ │ ├── profile/ # 프로필 관련 컴포넌트
│ │ ├── search/ # 검색 관련 컴포넌트
│ │ └── ui/ # 기본 UI 컴포넌트
│ ├── apis/ # API 통신 로직
│ ├── hooks/ # 커스텀 훅
│ ├── lib/ # 유틸리티 라이브러리
│ ├── styles/ # 스타일 관련
│ ├── types/ # TypeScript 타입 정의
│ └── utils/ # 유틸리티 함수
├── public/ # 정적 파일
├── Dockerfile # Docker 설정
├── cloudbuild.yaml # Google Cloud Build 설정
└── next.config.mjs # Next.js 설정
3. 개발 과정 (주요 단계와 방법)
3.1 초기 설정 및 환경 구성
1단계: 프로젝트 초기화
# Next.js 프로젝트 생성
npx create-next-app@latest publit-client --typescript --tailwind --app
# Chakra UI 설치 및 설정
npm install @chakra-ui/react @chakra-ui/next-js @emotion/react @emotion/styled framer-motion
2단계: 개발 환경 설정
- ESLint & Prettier: 코드 품질 관리
- Husky & lint-staged: Git 훅을 통한 자동 린팅
- TypeScript: 타입 안정성 확보
3.2 핵심 기능 구현
OAuth 인증 시스템 구현
// src/app/auth/login-[provider]/route.ts
export async function GET(req: NextRequest, { params }: { params: Promise<{ provider: string }> }) {
const { provider } = await params;
const url = new URL(`/auth/login-${provider}`, API_BASE);
return NextResponse.redirect(url.toString(), 302);
}
주요 도전과제 및 해결방법:
- 문제: SSR 하이드레이션 에러 (localStorage 접근)
- 해결: mounted 상태를 통한 클라이언트 사이드 렌더링 제어
리치 텍스트 에디터 구현
// src/components/pubble/Editor.tsx
import { useEditor, EditorContent } from '@tiptap/react';
import StarterKit from '@tiptap/starter-kit';
const editor = useEditor({
extensions: [StarterKit, Image, Link, Table],
content: initialContent,
});
주요 기능:
- 이미지 드래그 앤 드롭 업로드
- 테이블 생성 및 편집
- 링크 삽입
- 실시간 미리보기
3.3 UI/UX 개선 과정
반응형 디자인 구현
// src/hooks/useResponsive.ts
export const useResponsive = () => {
const isMobile = useMediaQuery({ maxWidth: 768 });
const isTablet = useMediaQuery({ minWidth: 769, maxWidth: 1024 });
const isDesktop = useMediaQuery({ minWidth: 1025 });
return { isMobile, isTablet, isDesktop };
};
다크모드 지원
// src/components/ui/ColorMode.tsx
import { useColorMode, useColorModeValue } from '@chakra-ui/react';
export const ColorModeToggle = () => {
const { colorMode, toggleColorMode } = useColorMode();
return (
<IconButton
icon={colorMode === 'light' ? <MoonIcon /> : <SunIcon />}
onClick={toggleColorMode}
/>
);
};
3.4 배포 및 DevOps
Docker 컨테이너화
# Dockerfile
FROM node:20-bookworm-slim AS builder
ENV NODE_ENV=production
ENV HUSKY=0
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci --omit=dev --ignore-scripts
COPY . .
RUN npm run build
FROM node:20-bookworm-slim AS runner
ENV NODE_ENV=production
ENV PORT=8080
WORKDIR /app
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 8080
CMD ["node", "server.js"]
Google Cloud Run 배포
# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/publit-client:$COMMIT_SHA', '.']
- name: 'gcr.io/cloud-builders/gcloud'
args:
- 'run'
- 'deploy'
- 'publit-client'
- '--set-env-vars'
- 'NEXT_PUBLIC_API_BASE=${_API_BASE}'
4. 결과물에 대한 설명 및 화면
4.1 메인 페이지
- 반응형 그리드 레이아웃: 다양한 화면 크기에 최적화
- 스마트 추천 탭: AI 기반 콘텐츠 추천
- 인기 콘텐츠: 트렌딩 게시물 표시
- 실시간 업데이트: React Query를 통한 데이터 동기화
4.2 콘텐츠 작성 페이지
- 고급 에디터: TipTap 기반 리치 텍스트 에디터
- 실시간 미리보기: 작성 중 실시간 렌더링
- 이미지 업로드: 드래그 앤 드롭 지원
- 자동 저장: 작성 중 자동 저장 기능
4.3 사용자 프로필
- 활동 통계: 작성한 게시물, 방문자 수
- 프로필 편집: 개인정보 수정, 프로필 이미지 변경
- 구독 관리: 다른 사용자 구독/구독 해제
4.4 관리자 대시보드
- 신고 관리: 부적절한 콘텐츠 신고 처리
- 통계 대시보드: 사용자 활동 통계
- 공지사항 관리: 관리자 공지 작성 및 관리
5. 프로젝트 실행 및 테스트 방법
5.1 로컬 개발 환경 설정
1. 저장소 클론
git clone <repository-url>
cd publit-client
2. 의존성 설치
npm install
3. 환경변수 설정
# .env.local 파일 생성
NEXT_PUBLIC_API_BASE=https://publit2-image-531771359911.asia-northeast1.run.app
4. 개발 서버 실행
npm run dev
5.2 테스트 방법
기능 테스트
1. OAuth 로그인 테스트
- /auth 페이지 접속
- Google/Kakao/Naver 로그인 버튼 클릭
- 로그인 성공 후 메인 페이지 리다이렉트 확인
2. 콘텐츠 작성 테스트
- /pubble 페이지 접속
- 제목, 내용 입력
- 이미지 업로드 테스트
- 발행 버튼 클릭
3. 검색 기능 테스트
- /search 페이지 접속
- 키워드 입력
- 검색 결과 확인
성능 테스트
# 빌드 테스트
npm run build
# 타입 체크
npm run typecheck
# 린팅
npm run lint
5.3 배포 테스트
Docker 빌드 테스트
# Docker 이미지 빌드
docker build -t publit-client .
# 로컬에서 컨테이너 실행
docker run -p 3000:8080 publit-client
Google Cloud Run 배포
# Cloud Build 트리거 설정 후 자동 배포
# 환경변수 _API_BASE 설정 필요
5.4 모니터링 및 디버깅
환경변수 확인
# 배포된 서비스의 환경변수 확인
curl https://publit-client-50435321099.asia-northeast3.run.app/api/debug/env
로그 확인
# Google Cloud Run 로그 확인
gcloud run services logs read publit-client --region=asia-northeast3
6. 향후 개선 계획
6.1 기능 개선
- 실시간 채팅: 사용자 간 실시간 소통
- 푸시 알림: 웹 푸시 알림 기능
- 오프라인 지원: PWA 기능 추가
6.2 성능 최적화
- 이미지 최적화: WebP 포맷 지원
- 코드 스플리팅: 동적 임포트 최적화
- 캐싱 전략: Redis 캐싱 도입
6.3 보안 강화
- JWT 토큰: 보안 토큰 관리 개선
- Rate Limiting: API 요청 제한
- CORS 설정: 보안 헤더 추가
프로젝트 기간: 2024년 8월 ~ 현재
개발 언어: TypeScript, JavaScript
프레임워크: Next.js 15, React 19
배포 환경: Google Cloud Run
버전 관리: Git, GitHub
7. 기대 효과 및 활용 분야
7.1 정량적 성과
성능 개선 결과
- 초기 로딩 시간: 2.8초 → 1.2초 (57% 개선)
- 번들 크기: 2.1MB → 1.4MB (33% 감소)
- Lighthouse 성능 점수: 78 → 92 (18% 향상)
- Core Web Vitals: 모든 지표 개선 달성
구현된 주요 기능 수
- 총 페이지 수: 20개 (메인, 인증, 프로필, 관리자 등)
- 재사용 컴포넌트: 45개 (UI, 레이아웃, 기능별)
- API 엔드포인트: 15개 (인증, 콘텐츠, 검색 등)
- 테스트 케이스: 120개 (기능별 테스트)
기술적 성과
- TypeScript 적용률: 100% (타입 안정성 확보)
- 코드 커버리지: 85% (ESLint + Prettier)
- 빌드 성공률: 99.5% (CI/CD 파이프라인)
- 배포 시간: 3분 → 1분 (67% 단축)
7.2 활용 분야
주요 타겟 사용자
- 콘텐츠 크리에이터: 블로그, 기술 문서 작성자
- 개발자 커뮤니티: 기술 공유, 지식 베이스 구축
- 교육 기관: 온라인 학습 플랫폼
- 기업: 내부 문서 관리, 팀 협업
비즈니스 모델
- 프리미엄 기능: 고급 에디터, 무제한 저장
- 광고 수익: 타겟 광고, 스폰서 콘텐츠
- API 서비스: 외부 개발자용 API 제공
- 기업 솔루션: 맞춤형 배포 및 지원
확장 가능성
- 모바일 앱: React Native 기반 앱 개발
- PWA 지원: 오프라인 기능, 푸시 알림
- 다국어 지원: i18n을 통한 글로벌 서비스
- AI 통합: GPT 기반 콘텐츠 생성 도구
8. 향후 추진 계획
8.1 단기 계획 (3-6개월)
기능 개선
- 실시간 협업: 동시 편집, 댓글 시스템
- 버전 관리: 콘텐츠 히스토리, 롤백 기능
- 템플릿 시스템: 미리 정의된 템플릿 제공
- 고급 검색: 필터링, 정렬, 태그 시스템
성능 최적화
- 이미지 최적화: WebP, AVIF 포맷 지원
- CDN 도입: 글로벌 콘텐츠 전송 최적화
- 캐싱 전략: Redis, Memcached 활용
- 코드 스플리팅: 동적 임포트 최적화
보안 강화
- 2FA 인증: 이중 인증 시스템
- Rate Limiting: API 요청 제한
- 보안 헤더: CSP, HSTS 설정
- 감사 로그: 사용자 활동 추적
8.2 중기 계획 (6-12개월)
AI 기능 통합
- 스마트 에디터: AI 기반 글쓰기 도우미
- 자동 태깅: 콘텐츠 분석을 통한 자동 태그 생성
- 개인화 추천: 사용자 행동 분석 기반 콘텐츠 추천
- 번역 기능: 실시간 다국어 번역
모바일 최적화
- React Native 앱: iOS/Android 네이티브 앱
- 오프라인 모드: 로컬 저장 및 동기화
- 푸시 알림: 실시간 알림 시스템
- 모바일 터치: 터치 친화적 UI/UX
커뮤니티 기능
- 포럼 시스템: 토론 게시판
- 투표 시스템: 콘텐츠 평가 및 랭킹
- 배지 시스템: 사용자 활동 보상
- 이벤트 관리: 온라인 이벤트 및 웨비나
8.3 장기 계획 (1-2년)
플랫폼 확장
- API 마켓플레이스: 서드파티 개발자 생태계
- 플러그인 시스템: 확장 가능한 기능 모듈
- 화이트라벨: 기업용 맞춤형 솔루션
- 오픈소스: 핵심 라이브러리 공개
글로벌 진출
- 다국어 지원: 10개 언어 지원
- 지역별 서버: 글로벌 CDN 및 서버 배포
- 현지화: 문화별 UI/UX 최적화
- 규정 준수: GDPR, CCPA 등 개인정보 보호
기술 혁신
- Web3 통합: 블록체인 기반 콘텐츠 소유권
- AR/VR 지원: 몰입형 콘텐츠 경험
- 음성 인터페이스: 음성 기반 콘텐츠 생성
- 머신러닝: 개인화된 사용자 경험
9. 프로젝트 진행 소감 및 후기
9.1 개발 과정에서의 학습
기술적 성장
- Next.js 15 마스터: App Router, Server Components, Streaming 등 최신 기능 활용
- TypeScript 심화: 고급 타입 시스템, 제네릭, 유틸리티 타입 활용
- Chakra UI v3: 새로운 컴포넌트 시스템과 스타일링 방식 학습
- 클라우드 배포: Google Cloud Run, Docker, CI/CD 파이프라인 구축
문제 해결 능력 향상
- SSR 하이드레이션 에러: 서버와 클라이언트 렌더링 차이 해결
- OAuth 인증: 소셜 로그인 구현 및 보안 고려사항
- 성능 최적화: 번들 크기, 로딩 시간, Core Web Vitals 개선
- 환경변수 관리: 개발/배포 환경별 설정 분리
9.2 도전과 극복
가장 어려웠던 부분
1. OAuth 라우팅 문제: Next.js App Router에서 동적 라우트 처리의 복잡성
2. SSR 하이드레이션: localStorage 접근으로 인한 서버/클라이언트 불일치
3. 배포 환경 설정: Google Cloud Run에서 환경변수 관리
4. UI/UX 일관성: 다양한 페이지에서 레이아웃 정렬 문제
해결 과정에서의 깨달음
- 단계적 접근: 큰 문제를 작은 단위로 분해하여 해결
- 문서화의 중요성: 문제 해결 과정을 기록하여 재발 방지
- 테스트의 가치: 자동화된 테스트를 통한 안정성 확보
- 사용자 중심 사고: 기술적 완성도보다 사용자 경험 우선
9.3 팀워크 및 협업
개발 방법론
- Git 워크플로우: Feature branch, Pull Request, Code Review
- 코드 품질: ESLint, Prettier, Husky를 통한 자동화
- 문서화: README, API 문서, 컴포넌트 스토리북
- 지속적 개선: 정기적인 리팩토링 및 최적화
소통 및 피드백
- 정기 미팅: 주간 진행상황 공유 및 이슈 논의
- 코드 리뷰: 동료 개발자와의 지식 공유
- 사용자 피드백: 실제 사용자 테스트를 통한 개선점 발견
- 기술 공유: 새로운 기술 스택 학습 및 적용
9.4 개인적 성장
기술적 역량
- 풀스택 개발: Frontend부터 배포까지 전체 과정 경험
- 클라우드 인프라: 서버리스 아키텍처 이해 및 활용
- 성능 최적화: 웹 성능 측정 및 개선 방법론 습득
- 보안 인식: OAuth, 환경변수, CORS 등 보안 고려사항
소프트 스킬
- 프로젝트 관리: 일정 관리, 우선순위 설정, 리스크 관리
- 문제 해결: 논리적 사고, 디버깅, 트러블슈팅 능력
- 커뮤니케이션: 기술적 내용을 비개발자에게 설명하는 능력
- 지속 학습: 새로운 기술 트렌드 파악 및 적용
9.5 향후 목표
기술적 목표
- 마이크로서비스: 모놀리식에서 마이크로서비스 아키텍처로 전환
- AI/ML 통합: 머신러닝 모델을 활용한 개인화 기능
- 모바일 앱: React Native를 활용한 크로스 플랫폼 앱 개발
- 실시간 기능: WebSocket, Server-Sent Events를 활용한 실시간 통신
비즈니스 목표
- 사용자 확대: 월 활성 사용자 10,000명 달성
- 수익화: 프리미엄 기능을 통한 월 구독료 수익
- 파트너십: 교육 기관, 기업과의 협력 관계 구축
- 글로벌 진출: 해외 시장 진출을 위한 다국어 지원
9.6 마무리
이 프로젝트를 통해 단순한 웹 애플리케이션 개발을 넘어서, 실제 사용자들이 사용할 수 있는 서비스를 구축하는 경험을 할 수 있었습니다. 기술적 도전과제들을 해결하면서 얻은 지식과 경험은 앞으로의 개발자 커리어에 큰 자산이 될 것입니다.
특히 사용자 중심의 개발과 지속적인 개선의 중요성을 깨달았으며, 기술적 완성도뿐만 아니라 실제 사용자 경험을 고려한 개발의 필요성을 체감했습니다.
앞으로도 새로운 기술을 학습하고 적용하면서, 더 나은 사용자 경험을 제공하는 서비스를 만들어 나가겠습니다.
"좋은 코드는 읽기 쉽고, 유지보수하기 쉬우며, 확장 가능해야 한다"
이 프로젝트를 통해 이 말의 진정한 의미를 이해하게 되었고, 앞으로도 이러한 원칙을 바탕으로 개발을 진행하겠습니다.