Giter VIP home page Giter VIP logo

tost-it's Introduction

투스트잇 Tost It !

  • 🔗배포URL
  • 🔒서비스 이용을 위한 테스트 계정 (하지만 회원가입 기능도 동작한답니다!)

    id : [email protected]
    pw : test123!
목차

1. 프로젝트 소개

Pain Point

할일은 쌓였고 무엇부터 일을 해치워야 할지 정신없을 때, 한가지 일에 시간을 잔뜩 빼앗겨 계획한 일들을 하지 못했던 적이 있나요?

Let's improve the pain point

하루를 아침, 점심, 저녁으로 나누어 할일을 분배해 보세요
아침에는 아침의 할일에 집중합니다
점심에는 미련없이 점심의 할일을, 저녁에는 저녁의 할일을 실행합니다

2. 사용기술 및 개발환경

1) 개발기간 : 2023.05.25 ~ 2023.07.13

2) 기술

FrontEnd


BackEnd

제공된 API 사용

3) 협업 도구


4) 디자인


3. 프로젝트의 실행 방법

  npm install
  npm start

4. UI 시연 영상

bandicam.2023-07-17.15-38-21-859.mp4

5. 프로젝트 구조

📦src
 ┣ 📂API
 ┃ ┗ 📜customAxios.ts
 ┣ 📂assets
 ┃ ┗ 📂images
 ┃ ┃ ┣ 📜loadingSpinner.gif
 ┃ ┃ ┗ 📜logout.svg
 ┣ 📂Component
 ┃ ┣ 📂AuthForm
 ┃ ┃ ┗ 📜AuthForm.tsx
 ┃ ┣ 📂Button
 ┃ ┃ ┗ 📜Button.tsx
 ┃ ┣ 📂PostItem
 ┃ ┃ ┗ 📜PostItem.tsx
 ┃ ┗ 📂SelectInputBox
 ┃ ┃ ┗ 📜SelectInputBox.tsx
 ┣ 📂Pages
 ┃ ┣ 📂category
 ┃ ┃ ┗ 📜Category.tsx
 ┃ ┣ 📂context
 ┃ ┃ ┗ 📜UserContext.ts
 ┃ ┣ 📂Loading
 ┃ ┃ ┗ 📜Loading.tsx
 ┃ ┣ 📂NotFound
 ┃ ┃ ┗ 📜NotFound.tsx
 ┃ ┣ 📂SignIn
 ┃ ┃ ┗ 📜Signin.tsx
 ┃ ┣ 📂SignUp
 ┃ ┃ ┗ 📜Signup.tsx
 ┃ ┣ 📂Splash
 ┃ ┃ ┗ 📜Splash.tsx
 ┃ ┗ 📂Todo
 ┃ ┃ ┗ 📜Todo.tsx
 ┣ 📂Router
 ┃ ┗ 📜Router.tsx
 ┣ 📂utils
 ┃ ┗ 📜baseUrl.ts
 ┣ 📜App.tsx
 ┣ 📜custom.d.ts
 ┣ 📜index.css
 ┗ 📜index.tsx

6. 트러블 슈팅

1) Category 페이지 새로고침 시 예전 값으로 렌더링

[문제상황]

  • 카테고리 페이지에서 할일 수정 API 를 호출하면 상태가 바로 반영이 되는데, Category 페이지를 새로고침하면 다시 예전 값으로 렌더링되는 문제가 있었다. 즉, 수정된 내용이 Category 페이지에서 새로고침하면 반영이 안되었다.

[해결과정] 🔗 깃허브 pr 링크

  • 기존에는 useNavigate로 Todo 컴포넌트에서 Category 컴포넌트로 todolist state 를 전달해줬었다. 아침,점심,저녁 버튼을 눌러야지만 state가 넘어오는데 버튼을 누르지 않고, 새로고침을 하게되면 useNavigate 에 있던 state 값이 받아와지지 않기 때문에 화면에 렌더링 되지 않는 것이었다.
  • 따라서, useNavigate 로 상태값을 전달하지 않고 Category 컴포넌트에서 get API 를 재 호출해서 다시 새로운 데이터를 불레오게 했다.
  • 하지만, 이 방법은 수정사항이 생길 때마다 get API 를 호출하기에 서버 발생 비용이 증가한다. 더불어, Todo 컴포넌트의 todolist 와 Category 페이지의 categoryTodolist state가 서로 영향을 미치는 데이터인데 다른 state로 관리하기 때문에 상태관리의 어려움이 있어, 추후 전역상태관리로 리팩토링 할 예정이다.

2) 토큰 여부에 따른 페이지 접근제한

[문제상황]

  • 로그인 정보에 따른 페이지 접근제한시 token 정보를 가져오지 못했다

[해결과정] 🔗 깃허브 pr 링크

  • 기존에 Context 의 value 값에 localStorage 값만 넣었다. 즉, 동적으로 토큰이 있을때, 없을 때를 리액트가 감지하지 못했다.
  • 따라서, 로컬 스토리지 값의 여부를 확인하여 setState 를 업데이트한다.
  • context provider 를 사용해 setState를 props로 내려주고 로그인시에 localStorage에 있는 token 정보를 useState 이용해 저장한다

3) todo페이지 새로고침시 NotFound 페이지가 일시적으로 렌더링

[문제상황]

  • access_token 이 존재할때 /todo페이지로 이동하도록 Router설정을 했기에 바로 todo리스트가 렌더링될것으로 예상하였다. 하지만, 토큰 여부 확인이 완료되기 전에는 토큰이 null 인 상태이므로 NotFound 페이지가 렌더링되었다

[해결과정] 🔗 깃허브 commit 링크

  • 기존에는 Router에서 token의 여부만 확인했기에 token이 없는 순간 일시적으로 NotFound 페이지가 렌더링 되었다. token값이 들어오기 전에 로딩 페이지를 보여줌으로써 UX를 개선했다.
  • useState를 사용해 로딩상태를 관리, 토큰 여부 확인 후 setState를 변경해 준 후 Context Provider로 setState를 props로 내려주어 로딩 상태에 따라 로딩 페이지를 렌더링하였다.

tost-it's People

Contributors

baeggoose avatar ellaseon avatar ssujinchoi avatar

Stargazers

 avatar

tost-it's Issues

[Feat] Login_기능구현

⭐ 주요 기능

회원가입과 로그인 페이지에 이메일과 비밀번호의 유효성 검사기능을 구현해주세요

이메일 조건: @ 포함
비밀번호 조건: 8자 이상
입력된 이메일과 비밀번호가 유효성 검사를 통과하지 못한다면 button에 disabled 속성을 부여해주세요

회원가입 페이지에서 버튼을 클릭 시 회원가입을 진행하고 회원가입이 정상적으로 완료되었을 시 /signin 경로로 이동해주세요

로그인 페이지에서 버튼을 클릭 시, 로그인을 진행하고 로그인이 정상적으로 완료되었을 시 /todo 경로로 이동해주세요

로그인 API는 로그인이 성공했을 시 Response Body에 JWT를 포함해서 응답합니다.
응답받은 JWT는 로컬 스토리지에 저장해주세요

로그인 여부에 따른 리다이렉트 처리를 구현해주세요

로컬 스토리지에 토큰이 있는 상태로 /signin 또는 /signup 페이지에 접속한다면 /todo 경로로 리다이렉트 시켜주세요
로컬 스토리지에 토큰이 없는 상태로 /todo페이지에 접속한다면 /signin 경로로 리다이렉트 시켜주세요

📋 진행사항

  • 유효성 검사
  • 버튼

🚨 특이사항

이 외 특이사항을 명시해주세요.

[Feat] Todo_UX 개선

⭐ 주요 기능

  • react-toastify 라이브러리로 에러 핸들링
  • loading 적용

[Feat] Todo페이지 삭제

⭐ 주요 기능

구현할 기능(목표)에 대한 간략한 설명해주세요.

📋 진행사항

  • 로그인 안한 사람 todo 페이지 못들어오기(페이지 접근 제한)
  • 아침/점심/저녁 색깔 별 포스트잇 보이기

🚨 특이사항

이 외 특이사항을 명시해주세요.

[Feat] ToDo_Markup

⭐ 주요 기능

  • ToDo 페이지 마크업

📋 진행사항

투스트잇

image

  • input 이 입력되지 않았을때는 투두페이지가 빈페이지임
  • 오늘의 할일 버튼을 클릭하면 아침/점심/저녁을 선택할 수 있는 select box 가 생김
  • 아침을 클릭하고 input 입력하고 플러스버튼을 누르면 빈 투두리스트 페이지에 빨간색 포스트잇이 생긴다

빨강색 = 아침(1)

노란색 = 점심(2)

파란색 = 저녁(3)

  • input값을 추가하고 나면 select box 가 없어지고 다시 아침/점심/저녁 버튼과 오늘의 할일버튼이 나온다.

🚨 특이사항

이 외 특이사항을 명시해주세요.

[Feat] todo 페이지_수정

⭐ 주요 기능

구현할 기능(목표)에 대한 간략한 설명해주세요.

📋 진행사항

  • 투두 수정 api 연결
  • 할 일 이행 여부 표시하는 기능 "isCompleted"
  • 아침,점심,저녁 버튼 누르면 필터 걸어서 색깔 별 포스트잇으로 이동
  • not found 페이지, 로딩 스피너, splash 페이지

🚨 특이사항

이 외 특이사항을 명시해주세요.

[Feat] splash 페이지

⭐ 주요 기능

splash 화면

📋 진행사항

  • splash 마크업
  • 애니메이션
  • 페이지 연결

🚨 특이사항

이 외 특이사항을 명시해주세요.

[Feat] 로딩페이지_마크업

⭐ 주요 기능

로딩시 보여줄 페이지를 만듭니다.

📋 진행사항

  • 로딩시 보여줄 페이지 마크업

🚨 특이사항

이 외 특이사항을 명시해주세요.

[Feat] SignUp_기능구현

⭐ 주요 기능

회원가입 페이지 기능 구현

📋 진행사항

  • 회원가입 마크업
  • 회원가입 페이지에서 버튼을 클릭 시 회원가입을 진행(회원가입 비동기 통신)
  • 회원가입이 정상적으로 완료되었을 시 /signin 경로로 이동해주세요

🚨 특이사항

이 외 특이사항을 명시해주세요.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.