Coder Social home page Coder Social logo

real-bird / bookcase-in-the-phone Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 3.91 MB

바코드/ISBN으로 검색한 책을 저장하는 웹 책장

Home Page: https://rb-bip.netlify.app/

HTML 1.08% TypeScript 93.67% CSS 2.10% JavaScript 3.06% Shell 0.09%
axios javascript react styled-components typescript pwa immer zustand

bookcase-in-the-phone's Introduction

(개인 프로젝트) Bookcase in the Phone (2023.01 ~ 2023.03)

logo

개요

  • 바코드 인식과 ISBN 검색을 통한 서지 정보 저장 웹 책장 서비스

배포

https://rb-bip.netlify.app/

역할

  • 프론트엔드 80%, 백엔드 20%
  • 약 2달 간 기획 및 개발
  • CloudType 배포

사용 스택

  • 프론트엔드 : TypeScript, React, styled-components, React Router, Zxing-js, Vite
  • 백엔드 : Express, Passport, MongoDB, Mongoose

주요 기능


목차

  1. 서지 정보 검색
  2. 토큰 방식 적용
  3. 전역 상태 관리 코드 최적화
  4. 빌드 파일 크기 최적화
  5. PWA 적용

서지 정보 검색

도서의 바코드 인식이나 ISBN 직접 입력으로 서지 정보 검색

  • Zxing-js를 이용하여 도서의 바코드를 인식해 ISBN을 읽습니다.
  • 서지 정보는 국립중앙도서관의 오픈 API를 이용했습니다.

바코드 검색

카메라 검색

ISBN 검색

ISBN 검색

후면 고화질 카메라 고정

  • 모바일에서 여러 개의 후면 카메라 중 저화질의 카메라가 먼저 선택되어 편의성 부족했습니다.
  • 고화질 카메라를 고정하여 검색 단계까지 클릭 횟수를 50% 감소했습니다. (4번 → 2번)

미디어 스트림 클린업

  • 카메라 검색 후 미디어 스트림이 확실하게 종료되지 않아 카메라 실행 표시가 지속해서 활성화되었습니다.
  • react-webcam 패키지의 코드를 참고하여 미디어 스트림 종료 로직을 수정했습니다.
  • [React] Media Stream Cleanup 하기(feat. react-webcam)

토큰 방식 적용

토큰 방식 적용

세션 방식 제거

  • 초기에 세션 방식으로 클라이언트를 식별했지만, 세션이 살아있는 동안 서버가 클라이언트의 상태를 가지고 있다고 판단했습니다.
  • REST원칙 중 **무상태성(stateless)**에 위배된다고 판단해 세션 방식을 제거했습니다.

토큰 방식으로 변경

  • 비암호화된 유저 정보 일부를 쿼리 파라미터로 보내 식별했습니다.
  • 세션 제거와 보안 이슈 해결을 위해 JWT를 이용하여 로그인 로직을 수정했습니다.
  • [BiP] 로그인 로직 변경 기록

전역 상태 관리 코드 최적화

기존 상태 관리 방식 문제 개선

  • 기존 방식(Context API**useReducer**)에서 문제를 발견했습니다.
    • 상태 추적의 어려움
    • Context의 필요처마다 Provider로 감싸는 불편함
  • 이를 개선하고자 Zustand 라이브러리로 대체했습니다.
  • Zustand가 제공하는 devtools 미들웨어를 적용하여 상태 변경을 추적했습니다.
  • Context와 Provider를 제거하여 전역 상태 관리 코드를 약 40% 줄였습니다. (285줄 → 176줄)
  • [Zustand] 공식 문서만 보고 Zustand 적용해 보기

빌드 파일 크기 최적화

빌드 후 index.js 용량 약 95% 감소

  • 빌드 후 모든 라이브러리가 index.js에 모이는 이슈가 발생했습니다.
  • vite의 빌드 옵션 중 rollupOptions.outputmanualChunks를 추가하여 사용한 라이브러리를 vendor로 분리하였습니다.
  • 600KB 이상index.js 용량을 약 30KB로 줄였습니다.

PWA 적용

모바일 웹을 대상으로 구현했지만, 매번 웹 브라우저를 켜야 하므로 접근성이 좋지 않았습니다. 이를 해결하고자 네이티브와 PWA 사이에서 고민했습니다. 네이티브의 경우 러닝 커브가 높아 대안으로 PWA를 선택했습니다. PWABuilder을 이용하여 manifest를 만들어 적용했습니다.

bookcase-in-the-phone's People

Contributors

real-bird avatar

Watchers

 avatar

bookcase-in-the-phone's Issues

[feat] 스타일 수정

전반적인 UI 수정

  • PC / Mobile 분리
    • PC : 갤러리 형식
    • Mobile : 리스트 형식
  • 컨셉 컬러 변경
    • Main : #DFF2F9
    • Sub : #6AB04C
  • 카메라 검색 모바일 only
  • 폰트 변경

[refactor] Zustand 적용

23년 10월 15일 기준 npm weekly downloads

Libraries Downloads Selection
Redux 900만 -
Zustand 230만 🥇
MobX 110만 -
Jotai 60만 -
Recoil 50만 -
Valtio 37만 -

선택 이유

  • 사용해보지 않았고, 다운로드 2순위인 Zustand 선택
  • 문서 정리가 잘 되어 있음

[feat] local login

로컬 로그인 기능 추가

  • 입력 사항
    • id
    • nickname
    • password
  • 유효성 검사
    • id : 중복 여부
    • password
      • 8자 이상
      • 특수문자 포함
      • 비밀번호 확인

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.