Skip to content

Latest commit

 

History

History
91 lines (71 loc) · 6.72 KB

README.md

File metadata and controls

91 lines (71 loc) · 6.72 KB

🖼️ 아이돌 포토카드 교환 플랫폼 Poka 🖼️

음반 앨범에 동봉된 포토카드를 마음껏 원하는 것으로 교환하세요!

❓ 기획 배경

음반 앨범에 동봉되어 있는 아이돌 멤버의 포토카드는 랜덤이기 때문에 자신이 원하는 포토카드를 뽑기 어려울 수 있습니다.
그래서 소유한 포토카드를 자신이 원하는 것으로 교환하는 서비스를 기획했습니다.

🚀 주요 기능

사용자

  • 내가 원하는 포토카드로의 교환을 등록하거나, 이미 등록된 교환 중에서 원하는 것이 있다면 바로 교환
  • 내가 가지고 있는 소유권을 조회하고, 관리자에게 배송 요청
  • 내 닉네임과 프로필 이미지를 수정하고, 배송지 정보 설정

관리자

  • 플랫폼에서 취급하는 아이돌 그룹과 멤버, 포토카드 정보를 관리
  • 사용자에게 소유권을 발급하고, 소유권의 거래 내역 확인
  • 사용자가 배송 요청한 소유권을 발송 처리

🖥️ 배포

FrontEnd BackEnd Stoarage Domain
Netlify cloudtype Amazon S3 Gabia

➡️ 서비스 둘러보기

관리자 계정

ID: admin
PW: admin

사용자 계정

ID: user1
PW: 1234

ID: wannav
PW: 1234

이외에 추가로 회원가입 해서 등록도 가능합니다.

🔨 사용한 기술

FrontEnd



BackEnd



✏️ 배운 점 & 아쉬운 점

TypeScript

배운 점

이번에 TypeScript 를 처음으로 사용해보게 되었습니다.
interfacetype 키워드로 새로운 타입을 만들고, 변수들의 타입을 명시적으로 지정해줌으로써 잘못된 동작을 방지할 수 있다는 점이 매력적이었습니다.
또한 변수의 타입이 명확하기 때문에 IDE의 자동완성 기능이 정교해지는데 이 또한 편리함을 가져다 주었습니다.

아쉬운 점

TypeScriptJavaScript의 Super-Set 언어이기 때문에 가볍게 생각하고 적용했지만, 타입 지정이나 간단한 제네릭을 제외하고는 많이 활용하지 못한 부분이 아쉽습니다.
핸드북이 굉장히 잘 되어있기 때문에 정독하면서 잘 몰랐던 기능들을 정리해 볼 필요성을 느꼈습니다.

React-Query

배운 점

리액트 앱에서 백엔드 서버나 데이터베이스가 가지고 있는 정보를 가져오기 위해 비동기 요청이 발생하는데 각각의 API마다 Success, Loading, Error 등의 상태를 어떻게 관리할 것인지, 또 받아온 데이터는 어디에 저장할 것인지에 대한 고민이 있었습니다.
이번에 서버 상태를 관리하는 React-Query 를 도입해 보았는데 각 데이터에 대한 쿼리 키만 잘 정리하면 요청의 상태를 관리하는 보일러 플레이트를 중복적으로 작성하지 않아도 서버로부터 데이터를 쉽게 가져올 수 있다는 점이 편리했습니다.

아쉬운 점

로딩 상태에는 원래 컴포넌트와 유사한 형태의 스켈레톤 UI를 보여주도록 작성했는데, 패칭 완료 이후에 가져온 데이터가 없는 경우에는 오히려 부자연스럽게 보였습니다.
또한 로딩 화면에서 실제 화면으로 변화하는 모습을 보여주는 것 보다 백그라운드에서 미리 필요한 데이터를 프리패칭 해서 가져온다면 더 자연스럽게 보여줄 수 있을 텐데 추후에 이런 부분을 개선해 보면 좋을 것입니다.

Express-Validator

배운 점

클라이언트로부터 넘어온 요청의 데이터의 형태를 가지고 처리를 하기 전에 유효성을 검사해야 하는데 이런 부분을 손쉽게 처리할 수 있었습니다.
param, query, body 에 담겨진 각 데이터의 타입이나 범위를 지정한다거나, 기본 값을 준다거나, 전처리 과정으로 데이터를 가공하는 것이 편해졌습니다.

아쉬운 점

데이터를 가지고 데이터베이스에서 조회한 뒤에 수행해야 하는 유효성 검사 부분도 있었는데, 이 부분도 custom() 을 활용해서 할 방법이 있을 것 같은데 데이터베이스에서 조회한 내용을 이후의 미들웨어로 전달하는 방법이 고민되어서 적용하지 못했습니다. 추후에 좋은 방법을 떠올려서 개선해 보면 좋을 것입니다.

🚀 구현 기능

프론트엔드 기능
백엔드 API 명세