이전 글 요약

  • 테스트 자동화
  • nsjail log 처리 및 cgroup 설정

배포 및 UI 제작

이제 MVP는 거의 제작된거 같아서 배포 및 UI 제작을 해야한다. 배포는 vulcan님의 도움을 받아 vulcan 서버에서 하게 되었고, 클플 터널링 + nginx로 리버스 프록시를 해서 기존에 존재하던 서비스와 충돌하지 않게 했다. ui는 run.xo.dev 를 참고해서 중앙을 기준으로 좌를 code, stdin을 입력하는 곳, 우를 stdout, stderr 를 보여주는 곳으로 했다.

전체적인 구조 정리

Excution Flow(Sequence Diagram)

전체적인 실행흐름을 시퀀스 다이어그램으로 나타내면 다음과 같다.

  sequenceDiagram
    participant Client
    participant API
    participant Redis Queue
    participant Worker
    participant Sandbox
    participant Redis Storage

    Client->>API: POST /execute
    API->>Redis Storage: SET job:{jobId} = PENDING
    API->>Redis Queue: LPUSH job_queue
    API-->>Client: return jobId

    Redis Queue-->>Worker: BRPOP job_queue
    Worker->>Sandbox: Execute code
    Sandbox-->>Worker: stdout, stderr, exit_code
    Worker->>Redis Storage: SET job:{jobId} = COMPLETED
    
    loop Polling
        Client->>API: GET /jobs/{jobId}
        API->>Redis Storage: GET job:{jobId}
        Redis Storage-->>API: status
        API-->>Client: status
    end

다른 것도 정리했는데 여기보다는 여기 에 작성했다.

드디어 오픈

ljweel.dev 처럼 nginx로 호스팅했다.

  • run.ljweel.dev -> 사이트 UI(html + js)를 담당
  • run.ljweel.dev에서 /execute와 /jobs/{jobId} -> api endpoint

run.ljweel.dev 해당링크에서 실행해볼 수 있다.