Giter Club home page Giter Club logo

only_diary's Introduction

📌 목차

  • 소개
    • 소개말
    • 배포 링크
    • 특징
    • 개발 기간
  • 페이지 구성
    • 메인 페이지
    • 회원가입 / 로그인 페이지
    • 다이어리 등록 페이지
    • 마이 다이어리 페이지
    • 다이어리 디테일 페이지
  • 환경 구성
    • yarn
    • 환경변수
  • 기술 스택
    • 스택
    • 사용 이유
  • 개선사항
    • 페이지 이탈 후에도 유저가 누른 좋아요 상태 유지
    • 새로고침 후 데이터 유지
    • 다이어리 등록 시 이미지 이름 중복 없애기

💌 소개

소개말

logo

Only Diary는 유저가 이미지와 함께 다이어리를 게시할 수 있는 웹 어플리케이션 입니다.
유저는 공개 / 비공개 를 설정 할 수 있어서 모든 유저에게 공개하거나 않거나 설정할 수 있습니다.

배포 링크

https://only-diary.web.app/

특징

  • 로그인 기능
  • 공개 / 비공개 모드 설정
  • 다이어리 등록
  • 좋아요 & 알람 기능
  • 새로고침 시 데이터 유지
  • 드롭다운 메뉴
  • auto 슬라이드 배너
  • 반응형

개발 기간

2021.09.09 ~ 2021.11.23(~ing)


📃 페이지 구성


메인 페이지

main_page

  • 로그인 유무에 따른 Header
    • 로그인 후 드롭다운의 메뉴
    • 좋아요 누른 후 알람 메뉴
      • 좋아요 누른 유저
      • Timestamp
    • 직관적인 메뉴 UI
  • autoplay 메인 배너
    • 배너 페이지 이동
    • 현재 배너 앞 뒤 이동
    • autoplay 정지 / 시작
  • 공개 모드로 설정된 모든 다이어리 리스트
    • 간단한 카드 형태

회원가입 / 로그인 페이지

캡처

  • 회원가입 / 로그인 유효성 검사 기능
  • 간편하게 회원가입 / 로그인 페이지 이동
  • submit 버튼 클릭 시 로딩 중에는 disabled 활성화
  • 오류 시 alert 창 표시

다이어리 등록 페이지

캡처2

  • 이미지 선택 시 미리보기 기능
  • 유저가 사진 업로드 가능
  • 공개 / 비공개 모드 설정 가능
    • 공개 모드 시 모든 유저가 읽기 가능
    • 비공개 모드 시 작성자만 읽기 가능
  • 공개 / 비공개 모드 직관적인 토글버튼 UI
  • 텍스트 세션 텍스트 양에 따라 높이 자동 설정
  • 업로드 로딩 시 로딩 중과 에니메이트 표시

마이 다이어리 페이지

  • 다이어리 있을 때

캡처3

  • 다이어리 없을 때

캡처4

  • 간단하게 유저의 정보 제공
  • 다이어리 수에 따라 다른 페이지 UI
    • 다이어리 없을 시 다이어리 추가 UI
      • 다이어리 추가 하도록 UX 디자인
    • 있을 시 다이어리 목록 UI
      • 간단한 카드 형태

다이어리 디테일 페이지

캡처5

  • 다이어리 정보 제공 (다이어리 등록 페이지와 UI 비슷)
  • 좋아요 기능
    • 좋아요 누른 페이지는 다른 페이지 이동 후 다시 와도 좋아요 표시 됨
    • 좋아요 수 1개 이상 시 카운팅
    • 좋아요 취소 기능
  • 디테일 페이지가 본인 작성 다이어리일 시, 수정&삭제 버튼 활성화
  • 이전으로의 버튼을 통해 뒤로가기 구현

🌏 환경 구성

yarn


git clone https://github.com/chaechae66/only_diary.git
yarn install
yarn start

환경변수


/* root 디렉토리에 .env 파일 추가 후 */

REACT_APP_FIREBASE_APIKEY = 파이어베이스 앱키
REACT_APP_FIREBASE_AUTHDOMAIN = 파이어베이스 도메인 주소
REACT_APP_FIREBASE_DATABASEURL = 파이어베이스 데이터베이스 주소
REACT_APP_FIREBASE_PROJECTID = 파이어베이스 프로젝트 아이디
REACT_APP_FIREBASE_STORAGEBUKET = 파이어베이스 스토리지버킷 주소
REACT_APP_FIREBASE_MESSAGINGSENDERID = 파이어베이스 MESSAGINGSENDER 아이디
REACT_APP_FIREBASE_APPID = 파이어베이스 앱 아이디
REACT_APP_FIREBASE_MEASUREMENTID = 파이어베이스 MEASUREMENT 아이디


🛠 기술 스택

스택

  1. 리액트
  2. 리덕스
  3. 파이어베이스

사용 이유

리액트

  • 컴포넌트화 구조의 jsx 관리
    • 컴포넌트 UI 재사용 & 유지보수 용이
  • 큰 커뮤니티, 그에 따른 폭넓은 라이브러리 선택
  • Virtual DOM을 통해 어플리케이션의 성능을 향상

리덕스

  • 보다 효율적인 상태관리 라이브러리
  • 차후 미들웨어의 활용

파이어베이스

  • auth, db 등의 다양한 백엔드 서비스 제공
  • 차후 Node.js를 학습해 변경 예정

💊 개선사항

페이지 이탈 후에도 유저가 누른 좋아요 상태 유지

⏰ 기간

2021.11.14

🔎 문제점

좋아요 기능을 개발하던 중 페이지 이탈 후 좋아요 누른 상태가 유지되지 않는 문제가 있었다.

💡 해결법

그래서 페이지 진입 시,
좋아요 데이터를 불러와서 좋아요 누른 상태로 업데이트 해주게 해결하였다.

새로고침 후 데이터 유지

⏰ 기간

2021.11.12 ~ 2021.11.14

🔎 문제점

로그인 정보를 Redux에 저장하여 여러 UI에 가져다 쓰고 있다.
하지만 Redux은 새로고침 시 데이터가 날아간다는 치명적인 단점이 있다.
그래서 유저 입장에서 로그인 데이터가 없어 다소 혼란을 줄 수 있다.

💡 해결법

로그인 정보(currentUser)가 변할 때를 감지하기 위해 useEffect라는 React Hook을 사용한다.
그 안에 firebase 메서드(onAuthStateChanged)로 로그인 상태를 감지하여
로그인 정보를 Redux dispatch 통해 reducer에 정의해둔 userLogIn을 실행해 다시 로그인 시켜주어 해결하였다.
향후 Redux 미들웨어를 도입하여 보완하여 해결할 계획이다.

다이어리 등록 시 이미지 이름 중복 없애기

⏰ 기간

2021.11.21

🔎 문제점

다이어리는 이미지와 텍스트를 주로 이루어 있습니다. 등록 시 이미지 정보를 firebase storage에 저장하여 보관하게 됩니다.
이 때 그 전에 다른 유저가 같은 이미지 이름을 이미 사용하여 업로드 시 이미지가 덮어쓰기 되어 다른 유저는 등록한 이미지와 달라 혼란을 줄 수 있습니다.

💡 해결법

uuid라는 고유의 이름을 제공하는 라이브러리와 함께 기존에 저장된 file 정보 중 fileType(확장자)를 불러 조합시키므로 중복될 수 없게 해결하였습니다.

only_diary's People

Contributors

chaechae66 avatar

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.