1. 온라인 코딩 테스트 시스템 만들기 - 기초 설계
우선 가볍게 시작 해본다. 아직 확정은 아니지만 대부분의 서비스에 대하여 개발 스택이나 방향이 잡혀가고 있다. 본 설계는 개발을 진행하며 자주 바뀔 수 있으며 장기적으로 완성도를 높이며 다양한 기술을 적용해보고자 한다.
기술 스택
FrontEnd
- 코드의 입력과 제출을 진행하는 메인 Front Page
- 기술 스택
- main : 미정 (React.js or sveltekit)
- 임시 : html, css, js
BackEnd
- 전체적인 프로세스를 관리하는 중앙 Backend server
- 기술 스택 : nest.js, dockerode
Storage Server
- 제출 코드 파일 저장 및 중앙 저장소 관리 server
- 기술 스택 : express.js
language executor
- 제출 언어별 실행 컨테이너 이미지 모음
- 기술 스택 : Docker
Database
- 장기적으로 추가 기능 개발 데이터 저장소
- 기술 스택 : 미정 (mongoDB, mariaDB...)
구조도
Flow
Frontend
- 언어를 선택하고 요구사항에 맞도록 코드를 작성한다.
- 작성된 코드를 제출한다.(submit)
Main backend server
- 제출된 코드를 파일 폼으로 변환 하여 storage server로 업로드 한다.
Storage server
- 업로드 된 파일 데이터를 Common storage 공간에 파일을 저장한다.
main backend server
- 파일이 정상적으로 저장되면 제출된 데이터를 기반으로 해당 코드 실행 container를 실행 시킨다.
Language container
- container가 실행되고 마운트 되어 있는 Common storage 공간에서 제출된 코드를 읽어 실행 후 실행 결과를 리턴한다.
- 코드 실행이 완료되면 해당 컨테이너는 종료 후 삭제 된다.
Main backend server
- 리턴 받은 실행 결과를 분석 및 가공하여 Front에 표시한다.