Skip to content

Practice for User authentication / CRUD / Task-based data synchronization / Error Handling

Notifications You must be signed in to change notification settings

hyrmzz1/shared-note

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 

Repository files navigation

Shared Note

Introduce

  • 이 프로젝트는 제공된 Todolist CRUD 서버를 활용하여 Todo App의 클라이언트를 구현한 과제입니다.
    • 제공된 서버 레포지토리를 프로젝트의 server/ 디렉토리로 복사하여 사용했습니다.
    • 구현된 클라이언트(Todo App)는 프로젝트의 client/ 디렉토리에 위치합니다.
  • 모든 유저가 하나의 Todo list를 공유하며(유저별로 분리된 Todo list 관리 기능을 제공하지 않습니다.), 전형적인 Todo list의 기능인 토글 기능이 요구사항에 포함되지 않아 프로젝트명을 Shared Note로 변경했습니다.

주요 화면

로그인 화면 로그인 비활성화 화면
로그인 페이지 (/auth/login)
입력 필드가 비어 있거나 형식이 맞지 않으면 폼이 비활성화됩니다.
로그인 성공 시 토큰을 로컬 스토리지에 저장하고 루트 경로로 이동합니다.
회원가입 화면 회원가입 비활성화 화면
회원가입 페이지 (/auth/signup)
입력 필드가 비어 있거나 형식이 맞지 않으면 폼이 비활성화됩니다.
비밀번호 확인 값이 일치하지 않을 경우에도 폼이 비활성화됩니다.
글 목록 글 작성 화면
Todo 목록 및 추가 페이지 (/todos)
Todo 목록을 조회하거나, 새 Todo를 추가할 수 있습니다.
추가된 Todo는 실시간으로 목록에 반영됩니다.
글 상세보기 화면 글 수정 화면
글 상세보기 (/todos/:id)
Todo의 제목과 내용을 확인할 수 있습니다.
수정하거나 삭제한 내용은 목록에 실시간으로 반영됩니다.

기술 스택

분류 기술
언어 / 프레임워크 및 라이브러리
라우팅
상태 관리
폼 관리 및 유효성 검사
스타일링
빌드 도구
HTTP 클라이언트

What I Learned

프로젝트 구현 과정에서 배운 것들에 대해 작성한 포스팅입니다.

요구사항

server/db/db.json이 DB 역할을 하게 됩니다. 해당 파일을 삭제하면 DB는 초기화 됩니다.

Login / Signup

  • /auth 경로에 로그인 / 회원가입 기능을 개발합니다
    • 로그인, 회원가입을 별도의 경로로 분리해도 무방합니다
    • 최소한 이메일, 비밀번호 input, 제출 button을 갖도록 구성해주세요
  • 이메일과 비밀번호의 유효성을 확인합니다
    • 이메일 조건 : 최소 @, . 포함
    • 비밀번호 조건 : 8자 이상 입력
    • 이메일과 비밀번호가 모두 입력되어 있고, 조건을 만족해야 제출 버튼이 활성화 되도록 해주세요
  • 로그인 API를 호출하고, 올바른 응답을 받았을 때 루트 경로로 이동시켜주세요
    • 응답으로 받은 토큰은 로컬 스토리지에 저장해주세요
    • 다음 번에 로그인 시 토큰이 존재한다면 루트 경로로 리다이렉트 시켜주세요
    • 어떤 경우든 토큰이 유효하지 않다면 사용자에게 알리고 로그인 페이지로 리다이렉트 시켜주세요
  • 로그아웃은 클라이언트 단에서 localStorage에 저장된 token을 삭제하는 방식으로 간단히 구현해주세요.

Todo List

  • Todo List API를 호출하여 Todo List CRUD 기능을 구현해주세요.
    • 목록 / 상세 영역으로 나누어 구현해주세요.
    • Todo 목록을 볼 수 있습니다.
    • Todo 추가 버튼을 클릭하면 할 일이 추가 됩니다.
    • Todo 수정 버튼을 클릭하면 수정 모드를 활성화하고, 수정 내용을 제출하거나 취소할 수 있습니다.
    • Todo 삭제 버튼을 클릭하면 해당 Todo를 삭제할 수 있습니다.
  • 한 화면 내에서 Todo List와 개별 Todo의 상세를 확인할 수 있도록 해주세요.
    • 새로고침을 했을 때 현재 상태가 유지되어야 합니다.
    • 개별 Todo를 조회 순서에 따라 페이지 뒤로가기를 통하여 조회할 수 있도록 해주세요.
  • 한 페이지 내에서 새로고침 없이 데이터가 정합성을 갖추도록 구현해주세요.
    • 수정되는 Todo의 내용이 목록에서도 실시간으로 반영되어야 합니다.

프로젝트 구조

📦server  // 과제 수행을 위해 제공된 Todolist CRUD 서버
📦client  // 수행 과제
  📂public // 정적 파일 (favicon)
  📂src  // 소스 코드 디렉터리
   📂api  // API 요청 함수 모음
   📂assets // 이미지 및 SVG 파일
   📂components // 재사용 가능한 공통 컴포넌트
   📂hooks  // 커스텀 훅
   📂pages  // 페이지 컴포넌트
   📂router // 라우팅 관련 코드
   📂stores // Zustand 상태 관리
   📂types  // 타입 정의 파일
   📜App.tsx  // 앱 루트 컴포넌트
   📜index.css  // 전역 스타일
   📜main.tsx
   📜vite-env.d.ts
  📜.env // 환경 변수 파일
  📜index.html
  📜.gitignore
  📜package.json
  📜vite.config.ts

프로젝트 실행 방법

  1. 프로젝트 복제

    git clone https://github.com/hyrmzz1/shared-note.git
    
    # 루트 디렉터리로 이동
    cd shared-note
  2. 백엔드 서버 설치 및 실행

     # server 디렉터리로 이동
     cd server
    
     # 의존성 설치 및 개발 서버 실행
     yarn
     yarn start # http://localhost:8080
  3. 환경변수 파일 생성

    # `/client` 디렉터리에 `.env` 파일 생성 후 아래 내용 추가
    VITE_API_URL=http://localhost:8080
  4. 프론트엔드 설치 및 실행

     # 현재 server 디렉터리에 있다면 상위 디렉터리로 이동
     cd ..
    
     # client 디렉터리로 이동
     cd client
    
     # 의존성 설치 및 개발 서버 실행
     npm install
     npm run dev

About

Practice for User authentication / CRUD / Task-based data synchronization / Error Handling

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published