Skip to content

Conversation

@w8385
Copy link
Member

@w8385 w8385 commented Jan 27, 2026

Closes #56

Summary

본 PR은 Docker + isolate 기반 채점(Grading) 시스템을 백엔드에 도입합니다.

채점 실행 환경을 Docker → isolate → grader의 3단 구조로 분리하여,
보안·재현성·확장성을 동시에 확보하는 것을 목표로 합니다.


Module Diagram

flowchart TD
    A[HTTP Handler] --> B[Grader]
    B --> C[Isolate]
    C --> D[Docker Exec / Cp]

    %% isolate internals
    subgraph Isolate Module
        C1[init]
        C2[copy]
        C3[compile]
        C4[execute]
        C5[cleanup]
    end

    C --> C1
    C --> C2
    C --> C3
    C --> C4
    C --> C5

    %% compile / execute configs
    B --> E[LanguageRegistry]
    E --> F[CompileConfig]
    E --> G[ExecuteConfig]

    %% errors
    D -->|DockerError| C
    C -->|IsolateError| B
    B -->|JudgeError| A
Loading

Architecture

  • Docker
    최하위 계층으로 docker exec, cp를 래핑하는 어댑터
    채점 환경 고정 및 1차 격리

  • isolate
    중간 계층으로 docker 인터페이스를 사용하여 isolate 명령어를 수행함
    untrusted code 실행을 위한 샌드박싱
    프로세스 / 파일 접근 제한
    추후) 시간 / 메모리 제한

  • grader
    최상위 계층으로 isolate 인터페이스만 사용함
    컴파일 → 실행 → 결과 수집 오케스트레이션

  • LanguageRegistry
    언어별 컴파일/실행 명령어 프로필 생성
    YAML 등으로 깔끔하게 하고 싶었으나 일단은 grader/config.rs 내부에 하드코딩
    CompileConfig, ExecuteConfig를 관리합니다.


Result

  • 보안이 강화된 채점 환경
  • 언어 추가 시 코드 수정 최소화
  • 향후 k8s등 분산 채점 워커로 확장 가능한 구조

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

채점 기능 구현

2 participants