/////
Search
Duplicate

고스락 티켓 예매 프로젝트 2차

기간
2022.07. ~ 2022.08
기술스택
Node.js
Nest.js
TypeScript
Swagger
PostgreSQL
Docker
Redis
Github Actions
한 줄 소개
홍익대 컴공 밴드학회 고스락 2022년 9월 정기공연 티켓 예매 페이지
Role
Backend Server Engineer
Links
Figma - Link

서비스 내용

1.
온라인 티켓 예매 서비스
2.
QR코드와 소켓을 통한 실시간 입장 서비스
3.
어드민 페이지로 예매 현황 및 티켓 상태 관리

기술 스택

Nodejs / Nestjs
PostgreSQL
Redis
Docker

개발 내용

기존 프로젝트의 구조 개선

Express를 사용한 기존 프로젝트에서는 하나의 폴더에 모든 라우터가 있어 구조가 난해했습니다.
이를 개선하고자 도메인 별로 기능을 나누고 분리시켜 구조를 명확하게 했습니다.
Nest가 기본적으로 사용하는 Typescript를 통해 코드 안정성을 향상 시켰습니다.
기존처럼 메세지 토큰에 인증번호를 담게 된다면 쉽게 탈취당할 수 있기 때문에 관련 로직에서 인메모리 DB인 redis를 사용하여 개선했습니다.

가드를 이용한 권한 분리

Nest에서 제공하는 Guard 기능을 통해 어드민과 유저의 권한을 분리시켰습니다.

티켓 예매 및 입장 구현

티켓 엔티티를 구현하고 통신을 위한 RESTful API를 구성하였습니다
티켓 생성 및 삭제, 업데이트, QR코드를 통한 입장 처리를 구현하였습니다.

실시간 입장 기능 구현

Socket.io를 이용하여 소켓 게이트웨이를 구성하였습니다.
유저가 자신의 티켓 페이지에 입장하면 티켓 UUID room에 강제 입장 시켜 리스닝합니다
티켓 QR코드 인식 시 UUID를 검사하고 티켓 실제 소유자와 현재 유저가 일치하는지 검증합니다.
입장 처리 완료 시 유저와 어드민 페이지에 실시간 소켓 메세지를 보냅니다.

Swagger를 통한 API 명세

기존 프로젝트는 비효율적으로 Github Wiki를 통해 일일히 API 명세서를 작성했습니다.
이번 프로젝트에서는 Swagger를 통해 API 명세서 작성을 자동화시켰습니다.

성장 경험

PR 및 이슈 단위

팀원 간 종속되는 서비스가 많아 다른 팀원의 코드를 참고할 일이 많았습니다. 따라서 PR, 이슈 단위에 대해 다시 생각해보는 기회였습니다. 하나의 이슈나 PR에 수 많은 커밋을 담게 되면 코드 리뷰에 엄청난 부담이 되기 때문입니다. 따라서 핵심 기능이나 도메인 별로 이슈 단위를 나누게 되었습니다

서버 개발 과정에 대한 이해

기존 프로젝트에서는 단순히 맡은 파트의 서비스만 구현하려 했다면, 이번에는 전체적인 개발 과정과 배포 과정에 대해 이해하려 했습니다. 이번 프로젝트에서는 로컬 환경에서도 docker-compose를 이용한 개발 환경을 구성해 docker에 대한 이해도 필요로 했습니다. 이 과정에서 DevOps를 맡은 팀원에게 많은 것을 물어보았고, Docker 및 Github Actions 등 배포 과정에 대해서도 공부할 수 있는 좋은 기회가 되었습니다.

 서비스 화면

Swagger API 명세

Swagger를 사용하여 각 request별로 response를 세분화했습니다

웹 화면

기획 / 디자인

Figma (Embedded)