기여 역할·기술 스택·문제 해결 과정을 중심으로 설명한다
가장 기억에 남는 프로젝트는 4인 팀으로 개발한 실시간 공연 좌석 예약 시스템입니다. 기술 스택은 React, Node.js, PostgreSQL, WebSocket이었고, 저는 실시간 좌석 상태 동기화 로직 전담을 맡았습니다.
핵심 문제는 여러 사용자가 동시에 같은 좌석을 선택했을 때 중복 예약이 발생하는 레이스 컨디션이었습니다. 처음에 낙관적 잠금으로 접근했지만, 부하 테스트에서 3% 확률로 중복이 발생했습니다. DB 트랜잭션 격리 수준을 Serializable로 올리면서 중복은 0건으로 잡았지만, 대신 응답 속도가 느려졌습니다. 결국 좌석 단위 비관적 잠금으로 전환하여 처리 속도와 일관성을 동시에 잡은 최종 구조를 완성했습니다. 이 과정에서 트랜잭션 이론을 실제로 적용해 보았고, 교과서로 이해했던 개념이 훨씬 선명해졌습니다.
실패는 WebSocket 재연결 로직을 늦게 구현하여 네트워크 끊김 시 상태 불일치가 생겼던 것입니다. 그 부분이 초기 발표 때 지적받았고, 이후 하트비트 체크와 재구독 로직으로 보완하였습니다. 이 프로젝트 덕분에 동시성 제어를 수치로 검증하는 습관이 생겼습니다.