1. 서비스 인프라 아키텍처

image.png

TADAKNCP(Naver Cloud Platform) 기반으로 배포되며, Docker 컨테이너 환경에서 운영됩니다. API 서버와 채점 서버를 분리한 마이크로서비스 구조로 설계하여 독립적인 스케일링과 장애 격리가 가능합니다.

🧩 주요 구성 요소

구성 요소 역할
Nginx 리버스 프록시, SSL 인증서 관리, 정적 파일 서빙
API Server REST API, WebSocket (매칭/배틀/채팅), 비즈니스 로직
Judge Server 코드 채점 전용 서버, Docker 기반 샌드박스 실행
MySQL 영구 데이터 저장 (User, Battle, Submission, Problem)
Redis 캐싱, Pub/Sub 메시징, 매칭 대기열, 배틀 상태 관리

🔄 통신 방식

구간 프로토콜 설명
Client ↔ Nginx HTTPS, WSS SSL 암호화 통신
Nginx ↔ API Server HTTP, WS 내부 프록시
API Server ↔ Redis TCP 캐시, Pub/Sub, 큐 (BullMQ)
API Server ↔ MySQL TCP 데이터 영속화
API Server ↔ Judge Server Redis (BullMQ) 비동기 작업 큐 기반 요청
Judge Server → API Server Redis Pub/Sub 채점 결과 실시간 전달

🚀 배포 및 환경

2. 채점 시스템 플로우

image.png

채점 서버는 사용자가 제출한 코드를 Docker 컨테이너 내에서 격리 실행하여 안전하게 채점합니다. BullMQ를 통한 비동기 처리로 API 서버의 부하를 분산하고, Redis Pub/Sub으로 채점 결과를 실시간 전달합니다.

🧩 주요 구성 요소

구성 요소 역할
BullMQ Worker Redis 큐에서 채점 작업을 가져와 처리
Judge Service 채점 흐름 관리 (메타데이터 로드 → 실행 → 검증)
Docker Runner 컨테이너 생성 및 코드 실행
Judge Checker 실행 결과와 정답 비교
Pub/Sub Publisher 채점 결과를 Redis 채널로 발행

🔄 상세 처리 흐름

  1. 사용자 코드 제출
  2. API Server: Submission DB 저장 + BullMQ 큐에 작업 추가