/////
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
22년 3월 공연 당시 1차로 진행했던 프로젝트에 이어서
기술 스택 변경과 기능 개선을 위하여 2차로 진행한 프로젝트 입니다.

"빠른 입장, 빠른 정산 할거야!

학과 밴드 학회에서 보컬로 활동하고 있습니다!
공연 때 어두운 입구에서 종이 티켓이나 메세지를 일일이 확인하는 것이 불편하다는 의견이 많았고, 이러한 문제를 해결하기 위해 “빠른 입장, 빠른 정산을 위한 우리만의 사이트를 제작해보자” 라는 공동의 목표를 세우게 되었습니다.
이번 9월 공연에 해당 사이트를 통해 예매를 받고 있습니다!
현 시간 기준 티켓 380매 예매 완료

서비스 내용

1.
온라인 티켓 예매 서비스
2.
QR코드와 코드 리더기를 통한 실시간 입장 서비스
3.
익명 응원 댓글 서비스
4.
어드민 페이지로 예매 현황 및 티켓 상태, 대금 관리

웹 화면

기술 스택

Nestjs
PostgreSQL
Redis
Docker

개발 내용

기존 프로젝트의 구조 개선

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

주문 모듈 API

프로젝트 전반적인 주문 로직에 관한 API를 RESTful하게 구현하는 역할을 담당했습니다.
티켓 모듈과 관련하여 트랜잭션 다수 적용했습니다.
어드민 페이지 주문 상태관리 및 현황 조회 로직을 구현했습니다.

가드를 활용한 권한 분리

Nest 에서 제공하는 Guard 기능을 통해 일반 유저와 어드민의 권한을 분리시켜서 작업하였습니다.

실시간 입장 기능 구현

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

Swagger를 통한 API 명세

Swagger를 통해 API 명세서 작성을 자동화시켰습니다.
커스텀 데코레이터를 활용해 에러별 응답값을 세분화하였습니다.

성장 경험

프로젝트 Github 이슈 세분화와 잦은 PR로 코드 리뷰가 부담없이 진행 될 수 있도록 하였습니다. 다른 사람과 컨벤션을 맞춰가며 코딩하는 법을 배웠습니다. 협업에 효과적인 프로젝트 구조 설계로 각자 맡은 도메인 별로 충돌 없이 깔끔하게 프로젝트를 마무리 할 수 있었습니다. 스크럼과 다함께 하는 QA 등을 통해 소통이 잘 이루어 질 수 있도록 했습니다.

 명세서 화면

Swagger API 명세

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

기획 / 디자인

Figma (Embedded)