1. 기술 스택 및 선정 이유

리얼리즘 E2E를 구현하기 위한 기술 스택:

구분 기술 스택 선정 이유 (Why?)
Frontend React (Next.js?) • ?
Socket.io • 대기열 순번, 좌석 매진 현황(Agent 경쟁)을 실시간으로 반영하기 위해 사용
Backend NestJS • TypeScript 기반의 안정적인 서버 구축
• 모듈형 아키텍처로 유지보수 용이 및 Socket.io와의 높은 호환성
Redis • RDB의 디스크 I/O 부하를 줄이고, **In-memory 기반의 초고속 대기열 시스템(Sorted Set)**과 분산 락구현
Database PostgreSQL or MySQL • 최종 예매 결과, 작품 정보 저장 위한 관계형 데이터베이스(RDBMS)
Infra NCP / Docker • 컨테이너 기반의 유연한 배포 및 스케일링 환경 구성

2. 시스템 아키텍처

**대량의 트래픽을 제어하는 '입구(Netfunnel)'**와 **데이터 정합성을 지키는 '코어 로직'**으로 나뉨

graph TD
    %% 스타일 정의
    classDef client fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
    classDef network fill:#fff3e0,stroke:#e65100,stroke-width:2px;
    classDef backend fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px;
    classDef worker fill:#f3e5f5,stroke:#4a148c,stroke-width:2px;
    classDef data fill:#fffde7,stroke:#fbc02d,stroke-width:2px;

    %% 1. 클라이언트 레이어 - 사용자
    subgraph Client_Layer ["🖥️ 클라이언트 계층"]
        direction LR
        User[사용자 브라우저 - Next.js App]:::client
    end

    %% 2. 네트워크 진입점 - Ingress
    subgraph Network_Layer ["☁️ 네트워크 진입점 - NCP"]
        CDN[NCP CDN - 정적 자산]:::network
        LB[Load Balancer? - NCP LB]:::network
    end

    %% 3. 백엔드 서비스 - Core Logic
    subgraph Backend_Layer ["⚙️ 백엔드 서비스 - NestJS"]
        API_Main[API 서버 - 비즈니스 로직]:::backend
        Socket_Svc[소켓 게이트웨이 - 실시간 통신]:::backend
    end

    %% 4. 데이터 저장소 - Storage
    subgraph Data_Layer ["💾 데이터 저장소 계층"]
        Redis_Cluster{{"Redis Cluster"}}:::data
        subgraph Redis_Details ["Redis 사용 용도"]
            R_Queue[대기열 - Sorted Set]
            R_Lock[동시성 제어 - Lock]
            R_PubSub[이벤트 전파 - Pub/Sub]
        end
        DB_Main[("MySQL - 핵심 데이터")]:::data
    end

    %% --- 연결 관계 - Flow ---

    %% 1. 정적 자원 요청 (화살표 방향: CDN이 사용자에게 제공)
    CDN -.->|정적 파일 제공| User

    %% 2. API 및 소켓 연결
    User <==>|HTTP - Socket.io| LB
    LB ==> API_Main
    LB ==> Socket_Svc
    
    %% 3. API 서버 로직
    API_Main -->|1. 대기열 진입 - 조회| R_Queue
    API_Main -->|2. 좌석 선점 - Lock| R_Lock
    API_Main -->|3. 예매 내역 저장| DB_Main

    %% 4. 소켓 서버 - 실시간성
    Socket_Svc <-->|이벤트 구독| R_PubSub
    
    %% Redis 내부 연결 표현 - 논리적
    Redis_Cluster --- Redis_Details

[아키텍처의 핵심 포인트]

  1. Redis 중심 설계: 모든 트래픽(대기열, 좌석 클릭)은 DB로 바로 가지 않고 Redis가 1차 방어막 역할을 수행합니다. 이를 통해 실제 서버 다운을 방지합니다.
  2. Agent Worker: 실제 사용자와 경쟁하는 '가상 트래픽(Agent)'은 별도의 워커 프로세스로 돌아가며 Redis와 DB를 타격하여 리얼한 경쟁 상황을 만듭니다.

3. 코어 기능의 동작 방식 (가장 중요한 주제)

① 글로벌 타이머 & 서버 동기화 (Global Timer)

② 대기열 시스템

③ 좌석 동시성 제어