🔗 앱 다운로드 주소: Google Drive
📃 블로그 후기: Blog
🌐 대회 Landing Page 주소: blaybus.com
2025 Blaybus 실전 앱 개발 경진대회 우수상 & 베스트 팀워크상 수상 🏆
핸즈업은 '두핸즈 구성원의 성과관리를 위한 사내 게이미피케이션 앱 개발'이라는 주제 하에 두핸즈 구성원들이 직장에서의 성취를 기반으로 일의 즐거움을 느끼고 동기부여를 받을 수 있도록 사내 성과를 가시화하여 보여줄 수 있는 앱 서비스입니다.
1. 주최 측의 요구사항으로 웹/앱으로 된 관리자 페이지 대신, 기존에 사용하던 Google Spread Sheet와 연동 되어야했음.
- 별도의 DB를 유지하면서 Google Spread Sheet와 동기화 유지를 위해서,
데이터 일관성
에 대한 고민을 많이하게 되었습니다. - 여러명의 관리자가 Spread Sheet을 조작하거나, 조작하는 도중에 DB의 트랜잭션이 진행되는 등
여러 Use Case에 대해 고민
해보고, 적절한트랜잭션과 Lock
을 사용하기 위해 노력했습니다.
2. 새로운 게시물, 경험치/뱃지 획득 상황에 유저에게 push 알림을 보내기 위해서 FCM(Firebase Cloud Messaging)을 도입함.
- 개인/다수에게 알림을 보내는 상황에서 메시지 전송 종류(단일/다중/주제)를 선택하는 상황이 있었는데, 사내 앱의 특성을 감안하여 대략적인 유저수를 산정하고,
전송속도와 limit을 고려하여 FCM 로직을 설계
하였습니다.
3. 프론트엔드 개발자와 온라인으로 협업을 하는 상황에서 원활한 의사소통이 필요했음.
Swagger로 API Documnet
를 만들고, 예시 response를 볼 수 있도록 DTO level에서 ApiProperty를 적용하였으며, 이 과정에서 코드의 중복이나 품질 저하가 없도록 'Mapped types'을 활용하였습니다.- 프론트 입장에서 API를 원활하게 parsing 할 수 있도록
response format을 통일
시키고,HttpCode를 활용
하였습니다. - Test용 API를 관리자용으로 제공하여 프론트엔드가 개발시에 직접 DB에 접속해서 데이터를 세팅할 필요 없도록 지원하였습니다.
프론트엔드(AOS) Github: https://github.com/SANDY-9/Project_Handsup
Fork from https://github.com/americano212/nestjs-rest-api-templete
Typescript: 5.7.2
Nest: 10.4.9
TypeORM: 0.3.20
- Database: MySQL Community(v8.0.33)
- Infra Structure: Amazon Web Service (managed by Terraform)
- CI/CD: CI/CD with
github action
& Packages managed bydepandabot
- Monitoring:
Sentry
,Slack