
TADAK은 NCP(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 | 채점 결과 실시간 전달 |

채점 서버는 사용자가 제출한 코드를 Docker 컨테이너 내에서 격리 실행하여 안전하게 채점합니다. BullMQ를 통한 비동기 처리로 API 서버의 부하를 분산하고, Redis Pub/Sub으로 채점 결과를 실시간 전달합니다.
| 구성 요소 | 역할 |
|---|---|
| BullMQ Worker | Redis 큐에서 채점 작업을 가져와 처리 |
| Judge Service | 채점 흐름 관리 (메타데이터 로드 → 실행 → 검증) |
| Docker Runner | 컨테이너 생성 및 코드 실행 |
| Judge Checker | 실행 결과와 정답 비교 |
| Pub/Sub Publisher | 채점 결과를 Redis 채널로 발행 |