• 공통

    • TypeScript
      • 정적 타입을 지원함으로써 컴파일 단계에서 오류를 포착할 수 있다
    • ESlint (정적 분석기를 통한 사전에 오류 예방)
    • Prettier (코드 포매팅으로 스타일 가이드 통일)
  • 클라이언트

    • Next.js
      • SNS 의 특성을 살리기 위해 SSR 과 CSR 을 지원하는 Next.js 선정
    • Recoil
      • 상태관리
      • Recoil vs Redux
        • 학습 곡선이 완만함
        • 코드량이 적음
        • hooks 처럼 사용 가능
    • react-query
      • 비동기 관련 boilerplate를 최소화 한다. (비동기 추상화)
      • react-query vs useSWR
        • 더 큰 커뮤니티
        • 가비지 컬렉팅
  • 서버

    • NCP
      • 크래딧 지원
    • Express
    • JWT
      • 사용자가 늘어날 수록 서버의 확장은 불가피할 것이므로 서버의 확장성을 위해 사용
      • Cookie Session vs JWT
        • Cookie Session
    • Passport
      • JWT 인증 추상화
    • Mongoose
      • ODM
      • 정형화된 데이터를 보장하기 위해 스키마를 사용, 스키마 수정이 어려운 RDBMS와 달리 스키마의 수정이 쉽기 때문에 확장과 수정이 용이
      • Populate, dbRef
  • 데이터베이스

    • MongoDB
      • SNS 서비스에서 사용자가 모든 정보를 동일하게 작성하는 것이 아닌 선택적으로 작성하기 때문에 Null System 에 최적화가 잘 진행된 MongoDB 선택
      • MySQL vs MongoDB
        • 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
  • 테스트

    • Jest
      • Jest vs Mocha
        • Jest 필요하지 않을 수 있는 패키지를 전부 지원하여 적용시간이 짧다. Mocha 는 유연성이 높다.
  • 데브옵스

    • Github Actions
    • Nginx
    • PM2