Skip to content

codeit18-4-5/Plango

Repository files navigation

🦩 Plango - 플랭고

🗒️ 프로젝트 소개

팀 일정 관리·커뮤니케이션·자유게시판·개인 히스토리를 한 곳에서 관리하는 협업 플랫폼입니다.
개인 투두리스트뿐만 아니라 팀 단위 일정·할 일 관리·일일 리포트까지 확인할 수 있는 서비스입니다.

🎯 프로젝트가 해결하려는 문제

개인 중심 투두리스트 앱의 한계
여러 플랫폼을 오가며 관리해야 하는 팀 일정·업무·공유·게시물 관리의 비효율성
팀 협업에서 발생하는 권한 관리, 접근 제어, 역할 기반 UI 차이 등 실무 요구사항

✅ 프로젝트 선정 이유

  1. 관리자/팀원 권한 관리
    • 역할(Role)에 따라 접근 가능한 기능이 다른 구조
    • 관리자 리포트(진행도 원형 차트 UI)
    • 토큰 기반 팀원 초대
  2. 인증/인가 구현 (OAuth + JWT 기반 인증)
    • 카카오 로그인(OAuth) 경험
    • Refresh Token + Access Token 구조의 실제 동작 설계
    • 쿠키 기반 인증 및 보안 처리
    • Middleware 기반 페이지 보호
  3. 투두리스트에서 요구되는 복잡한 UI 및 비즈니스 로직
    • Intercepting Routes를 이용한 URL 기반 모달
    • 날짜 및 시간 선택과 반복옵션에 따른 로직 처리
    • 드래그 앤 드랍의 리스트 정렬 기능
  4. 자유게시판을 통한 소셜 기능 경험
    • 댓글 CRUD, 좋아요(낙관적 업데이트)
    • 무한 스크롤, 검색, 정렬 기능
    • 이미지 업로드(드래그&드롭 + 파일 제한)

📆 프로젝트 기간

2025.11.06 ~ 2025.12.04 (4주)

  1. 프로젝트 분석 및 리브랜딩 (3 WORKING DAYS)
  2. 공통컴포넌트 구현 (6 WORKING DAYS)
  3. 페이지 구현 (14 WORKING DAYS)
  4. 기능개선 및 QA (4 WORKING DAYS)

👥 팀원 구성 및 역할

profile
  • Button / Button Floating
  • Input / Textarea / checkbox
  • Toast / List
  • Auth 설계
  • 로그인·회원가입
  • 카카오 로그인
  • 비밀번호 재설정
  • 계정설정
  • 마이 히스토리
  • 랜딩페이지
  • 리디자인
  • README
  • GitHub Wiki
profile
  • Icon / Badge
  • Dropdown
  • Header / GNB
  • Container
  • 팀 페이지
  • 팀 생성하기
  • 팀 참여하기
  • 팀 개별 페이지
  • 404 페이지
  • Jira 셋팅
  • 발표
profile
  • Alert
  • Modal
  • Datepicker
  • Timepicker
  • 할일 리스트
  • 할일 상세
  • 할일 목록 등록
  • 할일 상세 등록
  • 시연영상 제작
profile
  • Font + Color + Shadow
  • Skeleton UI
  • Reply / Input Reply
  • Image Upload
  • Card
  • Avatar
  • 랜딩 페이지
  • 자유게시판
  • 상세 페이지
  • 작성/수정 페이지
  • 랜딩페이지
  • 리디자인
  • 프로젝트 기초 세팅
  • 노션 문서화/정리

🛠️ 기술 스택

Frontend

Next.js React TypeScript Zustand React Hook Form Zod React Query Axios

UI & 스타일링

TailwindCSS CVA React Skeleton Motion

테스트 & 품질 관리

ESLint Prettier Storybook Husky Lint Staged

협업 & 배포

Git GitHub Vercel Jira Notion Figma Discord

🚀 실행 방법

# 1. 저장소 클론
git clone https://github.com/codeit18-4-5/Plango.git

# 2. 폴더 이동
cd Plango

# 3. 의존성 설치
npm install

# 4. 개발 서버 실행
npm run dev

🔐 환경변수

NEXT_PUBLIC_APP_URL=프로젝트_URL
NEXT_PUBLIC_API_URL=API_BASE_URL
NEXT_PUBLIC_KAKAO_REST_API_KEY=카카오_REST_API_KEY
NEXT_PUBLIC_KAKAO_REDIRECT_URI=카카오_OAuth_리다이렉트_URI
NEXT_PUBLIC_PASSWORD_REDIRECT_URL=비밀번호재설정_리다이렉트_URL

📁 폴더 구조

src
├── api/                     # API 요청 함수 (Axios 기반)
├── app/                     # Next.js App Router 구조
│   ├── (auth)/              # 로그인·회원가입 등 인증 관련 페이지
│   ├── (routes)/            # 일반 서비스 페이지
│   ├── api/                 # Next.js API Route
│   └── layout.tsx           # 전체 레이아웃
│
├── assets/                  # 정적 리소스
│   ├── font/
│   ├── icons/
│   └── landing/
│
├── components/
│   ├── features/            # 기능 컴포넌트
│   ├── layout/              # 레이아웃 구성 요소
│   ├── skeleton-ui/         # 로딩 스켈레톤 UI
│   └── ui/                  # 공통 UI 컴포넌트
│
├── constants/               # 상수 및 공통 설정 값
├── context/                 # React Context 관리
├── hooks/                   # 커스텀 훅
├── lib/                     # 유틸리티, 헬퍼 함수, 로직 모듈
├── providers/               # 전역 Provider (QueryClient, Alert 등)
├── store/                   # Zustand 전역 상태
├── stories/                 # Storybook 파일
├── styles/                  # 전역 스타일, Tailwind 설정
└── types/                   # TypeScript 타입 정의

✨ 주요 기능

인증

  • 이메일 회원가입 / 로그인
  • Kakao OAuth 로그인
  • 자동 로그인 유지 & 토큰 자동 갱신
  • Middleware 기반 라우팅 보호
  • JWT 기반 인증

상태 관리

  • React Query로 서버 상태 캐싱, 에러/로딩 상태 관리, 낙관적 업데이트
  • Zustand로 인증·전역 UI 상태 등 클라이언트 상태 관리
  • Axios 인터셉터 기반 api 흐름 관리

인터렉션 & UI/UX

  • Framer Motion으로 인터랙션 모션 컴포넌트 구현
  • Skeleton UI로 초기 로딩 경험 개선
  • Optimistic UI 적용으로 좋아요/댓글 반응 속도 향상

컴포넌트 문서화 & 개발 환경

  • Storybook을 통한 디자인 시스템 기반 컴포넌트 문서화
  • CVA, clsx, tailwind-merge 기반으로 일관된 UI 컴포넌트 구축
  • 자체 디자인 토큰 시스템 적용

Form Handling & Validation

  • React Hook Form을 활용한 폼 상태 관리
  • Zod 기반 스키마 유효성 검증으로 타입 안전성 강화
  • 폼 UI와 검증 로직의 분리로 유지보수성 향상
  • 서버 에러와 클라이언트 검증을 통합 처리하여 인증 폼 안정성 확보

Compound Component Pattern

  • 컴포넌트 내부에서 역할 단위로 구조를 나누고 조합 방식의 자유도를 높이는 패턴
  • 컴포넌트 소비자가 필요한 구조만 선택해 조합할 수 있어 확장성·유연성·재사용성이 크게 향상됨
  • 다양한 구성의 UI 및 요구사항 변경 에도 구조를 다시 만들지 않고 부분 단위로 커스터마이징 가능
  • 컴파운드 패턴을 사용으로 인해 컴포넌트의 재사용성 증가 + UI 확장성 확보 + 유지보수성 강화
  • Dropdown: TriggerIcon, TriggerSelect, Menu, Option
  • Input: Label, Field, Error, Password, Search
  • Card: Badge, Content, Info
  • Modal: Header, Body, Footer

✨ 주요 페이지별 기능

팀 페이지

img-2
  • 팀 생성 / 수정 / 삭제
  • 팀원 초대 및 권한 관리 (권한별 UI 노출 분기 처리)
  • 팀 대시보드 (할일 · 멤버 · 관리자 리포트)
  • SSR로 기준 데이터를 먼저 불러와 빠른 초기 화면 제공
  • Hydration 이후 클라이언트에서 권한 정보를 즉시 조회하도록 최적화
  • 여러 항목의 업데이트가 발생하는 특성에 맞춰 React Query의 invalidate 전략을 활용하여 캐싱된 데이터를 최신 상태로 자동 반영
  • 페이지 전체를 새로고침하지 않고도 즉각적인 UI 업데이트 경험 제공

할 일 설정 및 리스트

img-3
  • 날짜 기반 리스트 노출 (캘린더)
  • 라벨/반복 옵션
  • 상세보기(모달 + Intercepting Route)
  • 댓글 기능
  • 할 일 상태 업데이트(완료/취소)
  • SSR + CSR 하이브리드 렌더링을 적용해 초기 로딩 속도를 최적화
  • Parallel / Intercepting Routes로 상세 페이지를 모달처럼 띄우며 독립 URL 구조를 가지며 기존 리스트 상태를 유지함

자유게시판

img-4
  • 검색(Search) 및 정렬(Order) 기능 debounce 적용으로 불필요한 서버 요청 방지 및 성능 최적화
  • React Query 기반 검색 결과 캐싱 & 요청 최소화
  • 무한 스크롤 기반 콘텐츠 로딩
  • Optimistic Update를 적용하여 좋아요 및 댓글의 UI가 서버 응답을 기다리지 않고 즉시 업데이트되어 사용자 피드백 강화

마이 히스토리

img-1
  • SSR 초기 렌더링 + CSR 이후 데이터 갱신 구조를 적용하여 초기 진입 시 빠르고 안정적인 첫 화면 제공
  • 데이터 패치 실패 시 사용자에게 ‘다시 불러오기’ 버튼 제공하여 에러 상황에서도 사용자 흐름이 끊기지 않도록 복구 기능 지원

Contributors 4

  •  
  •  
  •  
  •  

Languages