언어 · 보안 · 방식

서버에 컴파일러를 두지 않습니다. 아래는 지금 쓸 수 있는 언어의도적으로 안 넣는 언어입니다.

지원 언어

모두 사용자 브라우저에서만 실행합니다. 코드가 우리 서버로 가지 않습니다.

언어 어디서 방식 채점 문제
JavaScript 연습장 · 문제 Dedicated Worker + 타임아웃 있음
TypeScript 연습장 · 문제 Sucrase → JS → Worker 있음
Python 연습장 · 문제 Pyodide (CPython Wasm) 있음
SQL 연습장 · 문제 sql.js (SQLite Wasm) 있음
Lua 연습장 · 문제 wasmoon (Lua 5.4 Wasm) 있음
C / C++ C 실험장 Wasmer Clang · 멀티파일 · COEP 없음 (실험)
HTML / CSS / JS 결과물 멀티파일 합치기 + sandbox iframe 미리보기만

비지원 언어

브라우저만으로 돌리려면 툴체인이 너무 크거나 JVM·Dart 호스트가 필요합니다. Judge0 · Piston 같은 원격 실행 API는 쓰지 않습니다 (코드·입력이 외부로 나감).

언어 / 스택 이유 (요약)
Rust 풀 rustc Wasm이 수백 MB급 · 현실적이지 않음
C# .NET 런타임/컴파일러를 브라우저에 올리기 부담
Java JDK / JVM 필요
Kotlin 컴파일러 + JVM 계열
Flutter / Dart Dart SDK · 앱 런타임이 브라우저 연습장 범위 밖

안전 설계 원칙

  1. 실행 경계 — Cloudflare Pages는 정적 파일만 줍니다. 서버에 컴파일러·채점 워커가 없습니다.
  2. 신뢰 경계 — 코드는 제출한 사람의 브라우저에서만 돕니다. 다른 방문자나 우리 서버를 공격하는 경로를 설계에서 제거합니다.
  3. 원격 Judge 금지 — “언어를 더 돌리기 위해” Judge0 · Piston 등으로 코드를 보내지 않습니다.
  4. 과장하지 않음 — 100% 안전이라고 하지 않습니다. 목표는 서버 RCE·공유 채점 DoS를 없애는 것입니다. 자기 탭은 멈출 수 있습니다.

실행 방식

정적 HTML/JS만 배포하고, 인터프리터·컴파일러 역할은 WebAssembly / Worker를 사용자 기기로 내려보내 수행합니다.

쓰지 않는 것

클라이언트에서만 하는 보완

서버 실행을 피해야 하는 이유

코딩 사이트에서 서버 실행을 열면 DoS(무한 루프), 채굴, 파일 탈취, 다른 사이트로의 공격 발신 등 “모르는 타인에게 쉘에 가까운 권한을 주는” 위험이 생깁니다. 이 프로젝트는 그 경로를 설계에서 제거합니다.

한계

브라우저 샌드박스는 강력하지만, 사용자는 자기 탭을 멈추게 할 수 있습니다. 타임아웃으로 완화합니다. C/C++ 실험은 패키지 다운로드가 크고 SharedArrayBuffer(COEP)가 필요합니다. C++ iostream·예외·전체 libstdc++는 환경에 따라 실패할 수 있습니다. 채점 카탈로그에는 아직 없습니다.

원리 글: 브라우저에서 코드를 돌리는 이유