심심한 개발자의 취미생활

1. 온라인 코딩 테스트 시스템 만들기 - 기초 설계

우선 가볍게 시작 해본다. 아직 확정은 아니지만 대부분의 서비스에 대하여 개발 스택이나 방향이 잡혀가고 있다. 본 설계는 개발을 진행하며 자주 바뀔 수 있으며 장기적으로 완성도를 높이며 다양한 기술을 적용해보고자 한다.

기술 스택

  1. FrontEnd

    • 코드의 입력과 제출을 진행하는 메인 Front Page
    • 기술 스택
      • main : 미정 (React.js or sveltekit)
      • 임시 : html, css, js
  2. BackEnd

    • 전체적인 프로세스를 관리하는 중앙 Backend server
    • 기술 스택 : nest.js, dockerode
  3. Storage Server

    • 제출 코드 파일 저장 및 중앙 저장소 관리 server
    • 기술 스택 : express.js
  4. language executor

    • 제출 언어별 실행 컨테이너 이미지 모음
    • 기술 스택 : Docker
  5. Database

    • 장기적으로 추가 기능 개발 데이터 저장소
    • 기술 스택 : 미정 (mongoDB, mariaDB...)

구조도

alt text

Flow

  1. Frontend

    • 언어를 선택하고 요구사항에 맞도록 코드를 작성한다.
    • 작성된 코드를 제출한다.(submit)
  2. Main backend server

    • 제출된 코드를 파일 폼으로 변환 하여 storage server로 업로드 한다.
  3. Storage server

    • 업로드 된 파일 데이터를 Common storage 공간에 파일을 저장한다.
  4. main backend server

    • 파일이 정상적으로 저장되면 제출된 데이터를 기반으로 해당 코드 실행 container를 실행 시킨다.
  5. Language container

    • container가 실행되고 마운트 되어 있는 Common storage 공간에서 제출된 코드를 읽어 실행 후 실행 결과를 리턴한다.
    • 코드 실행이 완료되면 해당 컨테이너는 종료 후 삭제 된다.
  6. Main backend server

    • 리턴 받은 실행 결과를 분석 및 가공하여 Front에 표시한다.