Skip to content
장우석 edited this page Nov 10, 2022 · 13 revisions

Web21 - Devrank

개요

Devrank는 지루할 수 있는 Github 활동을 게임과 유사한 랭크 시스템을 통해 Github 활동을 조금 더 재미있게 할 수 있게 유도하기 위해 만들어진 서비스입니다.

배경 (Background)

Github 활동을 시각화하여 제공함으로써 재미와 성취감을 더해줄 수 있는 서비스가 필요하다고 생각했습니다.
불투명할 수 있는 나의 현재 성장 진척도를 점수라는 수치를 통해 좀 더 객관적으로 파악할 수 있는 계기가 될 수 있다고 생각했습니다.
이와 관련한 유사한 서비스들(OPGC, CODUCK)이 이미 존재하나, 현재 서비스의 유지 보수가 제대로 이루어지지 않고 있어 Devrank 서비스를 기획하게 되었습니다.

기술 스택

백엔드

NestJS

  • 관련한 미들웨어를 모두 구현해야하는 Express에 비해 프레임워크가 내장하고 있는 자체 기능들이 편의성을 많이 제공해준다. 따라서 비지니스 로직에 집중이 가능하다.
  • 프레임워크가 제한해주는 구조가 협업 시 코드 파악을 용이하게 해준다.
  • 타입스크립트만 지원하기 때문에 객체지향이 제공하는 장점을 최대한 활용할 수 있다.

Redis

  • 인메모리 DB로 디스크I/O에 비해 병목이 적다.
  • API 캐싱 및 refresh token 저장을 위해 사용한다.

MongoDB

  • 필요한 데이터 사이의 관계가 복잡하지 않다. 따라서 관계에 대한 무결성 검사의 필요성 보다는 성능적인 측면에 초점을 맞춰도 된다고 판단했다.
  • 트랜잭션을 통해 ACID 보장이 RDBMS와 동일하게 보장이 가능하다.
  • 차후에 replication을 통한 수평 확장의 가능성이 RDBMS보다 열려있다.

Mongoose

  • MongoDB와 가장 호환이 잘 되는 ORM 프레임워크라 판단했다.
  • TypeORM은 MongoDB 버전에 따라 호환성 이슈가 존재한다.
  • Prisma는 GraphQL과의 호환성을 강조해서, 굳이 안전성이 입증된 Mongoose의 대안으로 선택할 필요성을 느끼지 못했다.

AdminJS

  • 어플리케이션의 컨텐츠들을 수정할 수 있는 Admin UI를 제공한다.
  • NestJS와 Mongoose와 쉽게 통합이 가능하다.
  • 개발자가 아닌 운영자도 이를 통해 컨텐츠들을 수정할 수 있으므로, 서비스 유지보수 측면에서 이점이 크다.

Jest

  • 팀원 모두가 테스트 프레임워크로 Jest를 사용했던 경험이 있다.
  • 평소 쓰던 도구에 대한 익숙함에서 오는 생산성, 다른 프레임워크를 학습하는 데 드는 비용을 감수하면서 굳이 다른 테스트 프레임워크를 선택할 필요성을 느낄 수 없었다.

인프라

nCloud

  • 부스트캠프 자체 크레딧 지원을 통해 비용을 절감할 수 있고 클라우드 서비스 별로 큰 차이가 있는 게 아니여서 사용하기로 결정했다.

Nginx

  • 요청 당 스레드 방식인 Apache는 요청 당 스레드를 할당하는 방식이므로 10K 문제를 해결하기 힘들다.
  • 그에 비해 이벤트 루프 방식의 Nginx는 자원의 효율성, 더 많은 트래픽 처리에 이점이 있다.
  • reverse proxy, 로드밸런싱, 캐싱 등 다양한 기능을 지원한다.

Docker / Docker Compose / Docker Swarm

  • 독립된 환경을 보장 할 수 있어 개발 환경과 배포 환경을 통합 할 수 있다.

Github Actions

  • 저장소로 Github를 사용하면서 PR, Project, Issue와 같은 기능을 적극적으로 활용하면서 CI에서도 이를 활용 할 수 있다.
  • Jenkins보다 쉽게 설정이 가능하다.

🚀 Devrank

🏠 Home

팀 소개

👨‍👩‍👧‍👦 팀원

팀 문화

🤝 그라운드 룰
⌨️ 컨벤션
🌳 브랜치 전략

개발 문서

🎨 피그마
📚 기획서
📜 Backlog
🛠️ 기술스택
📒 API 명세
📝 Dev log

데일리 스크럼

💬 데일리 스크럼

스프린트 계획 회의

🏃 Week2
🏃 Week3
🏃 Week4
🏃 Week5
🏃 Week6

멘토링

👨‍🏫 Week1
👨‍🏫 Week2
👨‍🏫 Week3
👨‍🏫 Week4
👨‍🏫 Week5

회고

✒️ Week1
✒️ Week2
✒️ Week3
✒️ Week4
✒️ Week5
✒️ Week6

Clone this wiki locally