Tech Stack - dnd-side-project/dnd-8th-1-frontend GitHub Wiki

🛠️ Tech Stack

Language

TypeScript

FrameWork

Next.js

State Management

recoil ReactQuery

Styling

Tailwind CSS

UI Library

Storybook

Deploy

Vercel

Package Manager

Yarn berry

Convention

기술 스택 선정 이유

TypeScript

  • 코드의 문서화 관점
    • 컴포넌트의 interface 에 대한 문서화가 될 수 있다.
  • 백엔드랑 협업 시 API 명세를 type으로 정의해놓음으로써, 해당 API 명세에 연관되는 컴포넌트를 용이하게 사용할 수 있다.
    • 해당 타입을 미리 정의해놓고, 타입스크립트의 유틸리티 타입을 이용하여 해당 타입의 재사용성을 높일 수 있다.
  • 컴파일 타임에 코드 오류를 잡을 수 있고, 타입 체킹을 지원함으로써 코드를 작성할 때 실수할 수 있는 가능성을 줄여준다.

Next.js

  • Framework 관점에서의 개발자 경험 향상
    • 파일 시스템 기반 routing 등을 지원함으로써, 개발자 끼리 정해야할 boiler plate의 수가 줄어들게 되고 개발자 경험 향상과 함께 해당 부분에서 실수 가능성을 줄일 수 있다.
  • SEO의 필요성
    • 우리 프로젝트의 경우 홍보가 중요하기 때문에 SEO의 대한 관리가 필요하다고 생각했으며, Next.js의 서버 사이드 렌더링을 유리하게 활용 가능하다고 판단했다.

Recoil

  • 간결하며 쉬운 상태 관리
    • useState 처럼 useSetRecoilState, useRecoilValue, useRecoilState와 같이 hooks의 관점에서 사용할 수 있기 때문에 간결하며 보다 쉬운 상태 관리가 가능하다.
  • 프로젝트의 성격 고려
    • 모바일 앱과 비슷한 UI 에서 모달과 같은 전역적인 UI 상태가 많이 사용될 것이라고 예상되기 때문에 전역 상태 라이브러리를 고려하게 되었으며 그 중 Recoil을 생각하게 되었다.

React Query

  • 서버 상태 & 클라이언트 상태의 분리
    • 서버 관련 데이터에 대해 React Query 에서 모두 처리 될 수 있도록 설계 되었기 때문에 기존 클라이언트 상태와 서버 상태의 분리가 가능하다.
  • 데이터 캐싱을 통한 서버 부담의 감소
    • React Query는 기본적으로 데이터를 fetching 해온 후 캐싱 하게 되며, 해당 데이터가 stale 하다고 판단될 때 데이터를 refetching 해오게 된다.
  • 에러 핸들링의 중앙화
    • defaultOptions & queries 프로퍼티를 통해 공통적인 Success & Error handling이 가능하기 때문에 코드 중복을 최소화 할 수 다.
  • 편리한 디버깅
    • 확인하고자 하는 모든 쿼리 캐시의 데이터 상태(fresh, stale 등)를 확인이 가능하다.
    • query details, Actions, Data explorer, query explorer 등의 옵션들을 제공한다.

Tailwind CSS

  • Utility Class
    • Utility Class를 사용하기 때문에, CSS 의 재 사용성을 극대화할 수 있으며 잘 만들어진 css를 사용함으로써 일관된 UI를 쉽게 구축 가능하다.
  • Optimizing for Production
    • 프로덕션 용으로 빌드 할 때 사용하지 않는 모든 CSS를 자동으로 제거함으로써 성능적인 이점을 볼 수 있다.

StoryBook

  • 디자이너와의 협업
    • 독립된 컴포넌트를 쉽게 문서화 함으로써 디자이너 들과의 협업에 용이할 것이라고 판단했다.

Vercel

  • ci/cd
    • vercel에서 ci/cd를 위한 툴을 지원해줌으로써 production 환경에서 테스트가 가능 하다.
    • 코드 리뷰 시 production과 환경의 ci/cd를 통해 코드 리뷰 시 컴포넌트에 대한 동작 테스트를 용이하게 할 수 있다.
⚠️ **GitHub.com Fallback** ⚠️