Skip to content

OZ-Coding-School/oz_externship_fe_03_team2

Repository files navigation



StudyHub - 함께 성장하는 학습 플랫폼

온라인 강의와 스터디 문화를 결합한 IT 학습 플랫폼


프로젝트 소개

온라인 강의를 끝까지 완주하지 못하는 학습자들에게 동기부여와 명확한 목표를 제공하고자 합니다. 같은 강의를 듣는 학습자들이 함께 스터디를 생성하고 참여할 수 있도록 지원하여, 상호 협력과 꾸준한 학습을 돕습니다.

Udemy와 Inflearn 등 유명 플랫폼의 강의 정보를 스크래핑하여 제공하며, 각 강의별 스터디 모집 및 참여 기능을 구현하였습니다. 모집된 스터디는 일정 관리, 진행 상황 공유, 채팅 등 다양한 기능을 통해 안정적으로 운영될 수 있도록 지원합니다.

자체 VOD 제공 없이 강의 정보와 스터디 매칭에 집중하여, 수강생들이 네트워킹을 강화하고 학습에 집중할 수 있는 최적의 환경을 제공합니다.


주요 기능 소개

랜딩페이지

채팅 & 알람

일반 로그인

회원가입

이메일 찾기

비밀번호 찾기

탈퇴 회원 복구


마이페이지

내 정보 수정

비밀번호 변경

회원 탈퇴

북마크한 공고

북마크한 강의

지원 내역

완료된 스터디


배포 링크


프로젝트 시연 영상 & 문서

2025.10.14 - 2025.11.17 (5주)


Tech Stack

Category Stack
Common Git GitHub
Frontend React Vite TypeScript Tailwind CSS TanStack Query Zustand MSW ESLint Prettier
Deployment AWS EC2 Vercel GitHub Actions
Collaboration Figma Notion Discord

프로젝트 구조

oz_externship_fe_03_team2/
├── .github/                    # GitHub 설정 파일
├── .vscode/                    # VSCode 설정 파일
├── dist/                       # 빌드 결과물
├── node_modules/               # 의존성 패키지
├── public/                     # 정적 파일
│   ├── font/                   # 폰트 파일
│   ├── images/                 # 이미지 파일
│   └── 기타 svg 파일...
├── src/
│   ├── api/                    # API 관련
│   │   ├── Helper/             # Tanstack Query 관련 훅
│   │   ├── services/           # API 서비스 레이어
│   │   └── 기타 설정 파일...
│   ├── assets/                 # 정적 파일
│   │   ├── readme/             # README 관련 파일
│   │   └── 기타 이미지...
│   ├── components/             # React 컴포넌트
│   │   ├── common/             # 공통 컴포넌트
│   │   │   ├── toast/          # 토스트 알림
│   │   │   └── 기타 공통 컴포넌트...
│   │   ├── find/              # 찾기 페이지 컴포넌트
│   │   │   ├── emailFind/     # 이메일 찾기
│   │   │   ├── passwordFind/  # 비밀번호 찾기
│   │   │   └── 기타...
│   │   ├── layout/            # 레이아웃 컴포넌트
│   │   │   ├── Notification/  # 알림
│   │   │   └── 기타 레이아웃...
│   │   ├── mainpage/          # 메인페이지 컴포넌트
│   │   ├── mypage/            # 마이페이지 컴포넌트
│   │   ├── restore/           # 복구 컴포넌트
│   │   └── signup/            # 회원가입 컴포넌트
│   ├── constants/              # 상수 정의
│   ├── hooks/                  # 커스텀 훅
│   │   └── 기타 커스텀 훅...
│   ├── lib/                    # 라이브러리 설정
│   ├── mocks/                  # MSW 목 데이터
│   ├── pages/                  # 페이지 컴포넌트
│   ├── routes/                 # 라우팅
│   ├── store/                  # Zustand 상태 관리
│   ├── tests/                  # 테스트 페이지
│   ├── types/                  # TypeScript 타입 정의
│   │   └── apiInterface/      # API 인터페이스
│   ├── utils/                  # 유틸리티 함수
│   └── 기타 설정 파일...
├── .env                        # 환경 변수
├── .gitignore                  # Git 무시 파일
├── .prettierrc                 # Prettier 설정
├── eslint.config.js            # ESLint 설정
├── index.html                  # HTML 엔트리
├── package.json                # 프로젝트 메타데이터
├── tsconfig.json               # TypeScript 설정
├── vercel.json                 # Vercel 배포 설정
└── vite.config.ts              # Vite 설정

팀 구성

프론트엔드

김민섭
김민섭 (리드)
@mminseop


프로젝트 총괄
마이페이지
민현서
민현서
@hyeonseo1109


알림/채팅
이메일/비밀번호 찾기
정승윤
정승윤
@seun9yoon


로그인
회원가입, 소셜로그인
김미진
김미진
@kim-mijin


랜딩페이지
회원탈퇴복구

프로젝트 규칙

Branch Strategy

Git Flow 전략을 기반으로 브랜치를 관리합니다.

브랜치 구조

브랜치 역할 설명
main 배포 프로덕션 배포 가능한 안정적인 코드 관리
develop 개발 통합 개발된 기능들이 병합되는 기본 브랜치
feat/* 기능 개발 새로운 기능 개발 (예: feat/이슈번호-작업내용-이니셜)

브랜치 보호 규칙

  • main, develop 브랜치로 직접 push 금지
  • Pull Request를 통해서만 병합 가능
  • PR 승인 최소 2인 이상 필수
  • 모든 CI/CD 테스트 통과 후 병합
  • 리뷰어 2명 자동 등록 구현(Git Actions)

작업 흐름

  1. 이슈 생성 후 develop 기준으로 feat 브랜치 생성
   git checkout develop
   git pull origin develop
   git checkout -b feat/12-login-kms
  1. 기능 개발 및 커밋
   git add .
   git commit -m "feat: 로그인 구현"
  1. 원격 브랜치에 push
   git push -u origin feat/12-login-kms
  1. GitHub에서 Pull Request 생성 (develop <- feat)
  2. 코드 리뷰 및 승인 후 merge
  3. merge 완료된 feat 브랜치는 삭제
   git branch -D feat/12-login-kms
   git push origin feature/12-login-kms --delete
  • 작업 중인 브랜치는 git pull origin develop 후 작업 브랜치로 이동하여 rebase 활용

Git Convention (커밋 메시지 컨벤션)

접두사 설명 예시 메시지
Feat 새로운 기능 추가, 컴포넌트 파일 생성 Feat: 로그인 기능 구현
Fix 버그 수정, 코드/UI 문제 해결 Fix: 비밀번호 찾기 오류 수정
docs 문서 수정 (README, 주석, API 문서 등) Docs: API 명세서 최신화
Style 코드 포맷팅, 공백, 세미콜론 누락 등 스타일 변경 Style: 버튼 컴포넌트 스타일 수정
Refactor 리팩토링 (기능 변경 없음) Refactor: 인증 로직 함수 분리
Hotfix 긴급 버그 수정(프로덕션 치명적 오류) Hotfix: ㅇㅇ오류 수정
Test 테스트 코드/더미 데이터 추가 Test: 로그인 API 테스트 케이스 추가
Chore 빌드 업무, 패키지 매니저 설정, 기타 관리 작업 Chore: npm 패키지 업데이트
Types 타입/인터페이스 정의 추가·수정 Types: User 타입 추가
Comment 주석 추가·변경 Comment: 복잡한 로직 주석 추가
Rename 파일/폴더명 변경 또는 이동(내용 변경 없음) Rename: 컴포넌트 경로 변경
Remove 파일 삭제 Remove: 사용하지 않는 이미지 삭제
Revert 변경 사항 되돌리기 Revert: 로그인 기능 커밋 롤백
Init 초기화 관련 작업 Init: 프로젝트 초기 세팅

추가 팁

  • 커밋 메시지 스타일 통일로 프로젝트 히스토리 가독성↑, 협업 효율성↑
  • 코드리뷰 시 커밋 메시지만 봐도 변경 내역과 의도를 빠르게 파악 가능

ISSUE & Pull Request

  • 이슈와 PR은 .github 폴더에 첨부된 템플릿을 사용하여 작성
  • 리뷰어는 GitHub Actions를 통한 자동 등록 설정으로 편리하게 관리

Code Convention

네이밍 규칙

  • 변수/함수: camelCase 사용 (예: userData)
  • 컴포넌트/타입/인터페이스: PascalCase 사용 (예: UserProfile)
  • 상수: UPPER_SNAKE_CASE 사용 (예: API_BASE_URL)
  • 약어 사용 지양: 명확한 이름 사용 (예: user > u, value > v 사용x)
  • Boolean 변수: is, has 접두사 사용 (예: isLoading, hasError)

React 컴포넌트

  • 함수 선언문(Function Declaration) 사용 (화살표 함수 지양)
  • Props는 인터페이스로 정의
  • Props 타입명은 컴포넌트명 + Props (예: UserProfileProps)

TypeScript

  • any 타입 사용 금지 (불가피한 경우 unknown 사용 후 타입 가드)
  • Props, API 응답: interface 사용
  • Union, Utility 타입: type 사용
  • 제네릭 사용시 명확한 이름 (T 지양, TData, TParams 권장)

Axios & API 관리

  • Axios 인스턴스는 api/client.ts에서 중앙 관리
  • Request: 인증 Baerer 토큰 자동 삽입
  • Response: 에러 핸들링 중앙관리(서버 500 에러, 진짜 네트워크 요청 에러, 타임아웃 에러), 토큰 갱신 로직
  • API 함수는 api/services/ 폴더에 도메인별로 분리
  • 응답 데이터만 반환 (AxiosResponse 래핑 제거)

TanstackQuery

  • useQuery를 컴포넌트에서 바로 사용하지 않고 별도 커스텀 훅으로 관리
  • Hook은 api/services 폴더 내부에 별도 폴더/파일로 관리
  • 상위 컴포넌트에서 옵션을 변경할 수 있도록 options 파라미터를 사용
  • Query key는 endPoint + Params query로 관리

Zustand (전역 상태 관리)

  • Store는 stores/ 폴더에 상태별로 분리
  • Store 파일명: useㅇㅇStore.ts (예: useAuthStore.ts, useUserStore.ts)

Error Handling

  • Try-catch는 최소화하고 React Error Boundary 활용
  • API 에러는 Axios 인터셉터에서 중앙 처리
  • Toast로 사용자에게 에러 안내

MSW

  • 더미데이터, handler는 만들어 Test Page에서 테스팅 후 적용
  • hanlers는 배열에 스프레드 오퍼레이터로 등록

Communication Rules

  • DiscordNotion 활용한 비동기 협업
  • 매일 10:20 데일리 스크럼 및 Task 보고
  • 어제 한 일 / 오늘 할 일 공유
  • 매주 금요일 17:00 KPT 회고 및 Weekly Sprint 진행
  • 다음 주 Sprint 계획 수립
  • 질문/답변, 소통은 Discord 활용
  • 중요한 결정사항은 Notion에 문서화

환경 변수

VITE_API_BASE_URL=https://api.ozcoding.site/api
NODE_ENV=development
VITE_USE_MSW=true || false
VITE_KAKAO_CLIENT_ID=카카오 REST 클라이언트 키
VITE_KAKAO_REDIRECT_URI=카카오 리다이렉션 URI
VITE_NAVER_CLIENT_ID=네이버 REST 클라이언트 키
VITE_NAVER_CLIENT_SECRET=네이버 시크릿 키
VITE_NAVER_REDIRECT_URI=네이버 리다이렉션 URI

Documents

서비스 기획문서 팀 문서
📜 사용자 요구사항 정의서
📜 디자인
📜 플로우 차트
📜 화면 정의서
팀 문서

프로젝트 정보

Languages

TypeScript JavaScript Other

Contributors


About

익스턴십 3기 2팀의 레포지토리입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5