Project Summary

핵심 역량 동시성 제어, Redis 기반 대기열 설계, 분산 스케줄링, 성능 최적화, 테스트 기반 검증
기술 스택 Java, Spring Boot, JPA, Redis, MySQL, Testcontainers, k6, Grafana
프로젝트 핵심 성과 GitHub Repository
Zariyo (대기열 시스템) 순번 조회 O(N) → O(1) 전환, LIST - ZSET 성능 비교
E-Commerce (동시성 제어) 비관적 락 기반 재고 정합성 확보, 캐싱으로 응답 200ms → 5ms 단축

Project 1. Zariyo

“대기열 중심 콘서트 예약 시스템 개인프로젝트”

전체 시스템 플로우

LPOP Driven Token Pipeline-2026-01-16-153544.png

대기열 시스템 아키텍처

LPOP Driven Token Pipeline-2026-01-16-153503.png

모듈 역할 Redis 구조
Queue Module 토큰 발급, 대기열 관리, 스케줄러 LIST(대기열), push/exit 카운터
Main Module 콘서트 조회, 좌석 예약, 토큰 검증 SET(토큰), STRING(토큰정보), threshold

대기열 핵심 아이디어

O(log N)을 O(1)로 만들 수 있을까?

많은 대기열 구현 방식에서 Redis ZSET(Sorted Set)을 사용합니다. ZSET은 시간복잡도는 O(log N)으로 구성되어 있고 내부 자료구조를 통해 정렬과 순번 조회를 쉽게 할 수 있도로 도와줍니다. 구현 복잡도와 O(log N)에 시간복잡도를 고려했을때 충분히 대기열로 문제 없을거라 판단해 ZSET으로 초기 구현은 했지만,

저는 여기서 의문이 생겼습니다. Redis의 가장 큰 강점은 빠른 속도입니다. 그렇다면 O(1)의 성능으로 대기열을 구현할 수는 없을까? 그래서 이 프로젝트에 ZSET이 아닌 LIST를 사용해 대기열을 구현하고 성능테스트를 통헤 비교를 진행했습니다.

Step 1. LIST 구조의 한계

Step 2. 발상의 전환 - 순번을 LIST에서 찾지 않고 계산하기