Domjudge란
DOMjudge는 ICPC와 같은 프로그래밍 대회를 운영하는 자동화된 시스템입니다.
"유용성과 보안에 중점을 둡니다. 언어를 연결하는 모듈식 시스템과 심사 위원을 위한 풍부한 기능의 인터페이스가 있습니다. 이 시스템은 많은 라이브 콘테스트에서 사용되었으며 필요에 따라 조정할 수있는 무료 오픈 소스 소프트웨어입니다."
-- 출처 www.domjudge.org/
DOMjudge - Programming Contest Jury System
DOMjudge DOMjudge is an automated system to run programming contests, like the ICPC. It has a focus on usability and security. It has a modular system to plug in languages and has a feature-rich interface for the judges. The system has been used in many li
www.domjudge.org
교내 알고리즘 대회를 운영하기 위해 DOMjudge 웹 사이트를 구축했습니다.
구름(goorm.io)을 이용할 수도 있었지만 ICPC와 같은 큰 프로그래밍 대회에서 사용하는 시스템을 사용해보기 위해서 Domjudge를 사용했습니다.
2020년 4월에 처음 서버 구축을 진행하였기 때문에 7.2 버전부터 시작했지만 교내 프로그래밍 대회가 개최된 2020년 11월 기준으로 새로운 버전이 Docker로 제공되었기 때문에 훨씬 간편하게 Docker를 이용해서 서버를 구축하였습니다.
전체적인 시스템은 domserver라고 하는 apache 웹 서버, mariadb를 사용하는 데이터베이스, 제출된 코드를 채점해주는 judge로 구성되어있습니다.
비정상적인 코드가 제출되면 서버가 정지될 수 있으므로 server와 judge는 호스트를 분리하는 것이 좋다고 판단했습니다.
각각을 docker image로 제공해주고 있기 때문에 AWS(Amazon Web Service) EC2에서 docker container로 실행시켰습니다.
EC2 인스턴스 생성
EC2 인스턴스를 생성해보겠습니다.
위치는 아시아 태평양 서울.
AWS에서 EC2로 들어오면 빨간 네모와 같이 인스턴스 시작이 있습니다.
AMI 선택
인스턴스 시작해서 Ubuntu Server 18.04 LTS (HVM), SSD Volume Type를 선택하겠습니다.
인스턴스 유형 선택
프리 티어로 사용한다면 1GiB의 메모리를 선택할 수 밖에 없습니다.
서버를 구동시키기에는 문제 없지만 Java언어로 제출된 코드를 채점하기위해 JVM을 실행시켜야 하고 JVM을 실행시키는 위해 많은 프로세스를 사용하기 때문에 1GiB의 메모리로 채점하는 것이 불가능합니다.
그래서 서버는 t2.micro로 선택해도 문제가 없지만 judge가 실행될 호스트는 2GiB이상의 EC2를 할당해야합니다.
자세한 내용은 공식 메뉴얼>> Judging topics >> Solutions to common issues를 참고해보시길 바랍니다.
공식 메뉴얼 링크 : www.domjudge.org/docs/manual/7.3/judging.html
Judging topics — DOMjudge 7.3.2DEV documentation
Rejudging In some situations it is necessary to rejudge one or more submissions. This means that the submission will re-enter the flow as if it had not been judged before. The submittime will be the original time, but the program will be compiled, run and
www.domjudge.org
EC2의 사양은 대회의 규모를 생각해서 적절히 선택해야합니다.
Apache 웹서버로 되어있기 때문에 apache utils ab를 이용해서 대회 참가자수를 설정해서 테스트해보는 것이 좋을 것 같습니다.
추가적인 EC2세팅을 진행하고 키페어를 선택해서 EC2에 연결합니다.
EC2 연결
Docker 설치
ubuntu에 docker를 설치하겠습니다.
설치에 관한 자세한 내용은 docker 공식 홈페이지를 참고하시길 바랍니다.
docker install manual : docs.docker.com/engine/install/ubuntu/
Install Docker Engine on Ubuntu
docs.docker.com
공식 홈페이지 순서대로 진행하면 됩니다.
저장소를 사용하여 설치
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Docker ENGINE 설치
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Docker 설치 확인
$ sudo docker run hello-world
정상적으로 설치되면 Hello from Docker를 볼 수 있습니다. Docker 설치 과정 중 문제가 있다면 위의 공식 manual을 살펴보길 바랍니다.
$ sudo docker images
$ sudo docker ps -a
위의 명령어로 현재 가지고 있는 이미지와 실행중인 container를 확인할 수 있습니다.
hello-world는 더이상 필요하지 않기 때문에 지워주겠습니다.
$ sudo docker rm [CONTAINER ID]
$ sudo docker rmi [IMAGE ID]
[ ]부분은 자신에게 해당하는 정보를 입력합니다.
다음에 이어서 Domjudge docker image를 실행시켜 보겠습니다.
'Domjudge' 카테고리의 다른 글
Domjudge 7.3 -4th (sudo: unable to resolve host judgedaemon0) (0) | 2021.09.04 |
---|---|
Domjudge 7.3 - 3rd (Judgehost 연결) (0) | 2021.02.14 |
Domjudge 7.3 - 2nd (Mariadb, DOMserver Docker container실행) (0) | 2021.02.13 |