← 처음으로

경북대 대동제 80주년 웹앱

축제

역할백엔드 리드 · 관리자 콘솔 · 운영
기간2026.04 ~ 05 · 2026.05.20–22 운영

요약

경북대 80주년 대동제 관람객용 모바일 웹앱. 부스·주막 정보, 온라인 대기열, 실시간 부스 랭킹, 롤링페이퍼, 인스타팅 매칭 제공. 서버 설계·개발, 관리자 콘솔, 축제 기간 운영 담당.

해결한 문제

  • 대기열 동시성: 같은 부스의 등록·번호 발급·순서 변경을 부스 단위 비관적 락으로 직렬화. 상태 변경 충돌은 낙관적 락으로 감지, 좋아요 lost update는 원자적 UPDATE로 해결, N+1 쿼리 제거
  • 1인 3건 제한 우회 차단: 여러 부스 동시 등록 경쟁 조건을 전화번호 해시 기반 Redis 락으로 차단. IP 단위 등록 속도 제한, Redis 장애 시 메모리 기반으로 대체
  • SMS 호출 파이프라인: 트랜잭션 커밋 후 전용 스레드풀에서 비동기 발송, 타임아웃·재시도 설정. 1인 최대 발송 8건을 3건으로 줄여 1인당 문자 비용 62% 절감
  • 개인정보: 전화번호는 AES-GCM으로 암호화 저장, 중복 검사는 HMAC 해시로만 수행. 암호화 키가 없으면 서버 기동 차단
  • 인스타팅 매칭: 선착순 컷오프 후 교란순열로 짝을 지어 서로를 뽑는 쌍이 생기지 않도록 보장. 신청·매칭·결과 공개 시간창 분리

운영

  • 부스 59개 대상 사흘간 운영. 동시접속 500~800명 목표로 설계
  • 축제 직전·기간 핫픽스(세션 쿠키, 이미지 404), 5xx 발생 시 Discord 알림, 업로드 이미지 WebP 자동 변환

기술 스택

  • 서버: Java 21, Spring Boot 3.5, JPA, MySQL, Redis, SSE
  • 클라이언트: React 19, TypeScript, TanStack Query
  • 배포: Docker Compose, GitHub Actions

링크

GitHub · server (Spring Boot)
GitHub · client (React)
← 처음으로