본문 바로가기

컴퓨터/참고 사이트 및 팁

직접 온라인 저지를 운영해보자.

반응형

인터넷에서 검색을 하다보면 많은 온라인 저지를 볼 수 있다. 대표적으로 백준 온라인 저지(링크), 알고스팟(링크), 코딩도장(링크)와 같은 한글로 된 사이트도 있고, Project Euler(링크)와 같은 영어로 된 사이트도 존재한다.

이런 온라인 저지들은 가장 많이 쓰이는 언어인 C, C++, Java등을 기본적으로 제공하며 소스코드를 업로드하면, 서버가 그 파일을 컴파일해서 서버에 저장된 무수히 많은 테스트 케이스를 실험해서 값이 일치하는지를 확인하는 방법이다.


이런 방식을 이용하면 일단 서버는 소스코드가 업로드 되었을 때 보안상의 문제가 되는 함수들은 미리 차단을 해놓아야 한다. 그렇지 않으면 관리자 권한을 탈취당할 수 있기 때문이다. 이 테스트 케이스를 이용하는 방법은 생각보다 효율적인데, 이런 방법이 아니라면 직접 로직을 따라가보면서 제대로 된 로직인지를 확인하는 것을 컴퓨터에게 시킬 수는 없기 때문이다.


물론 이 테스트 케이스의 경우에도 충분히 다양한 경우를 만들어서 날코딩(여기서는 각 경우의 테스트케이스의 경우를 얻어서 해당하는 결과를 연산 없이 바로 출력하게 하는 것을 의미한다.)으로 통과하는 것을 막아야할 필요가 있다. 그리고 서버 관리자는 이 테스트 케이스를 다른 사람이 함부로 볼 수 없도록 권한을 제한해놓아야 할 필요가 있다.


온라인 저지에 대한 설명은 이정도로 하고, 이 온라인 저지를 직접 운영해보는 프레임워크가 있어서 소개를 해보려고 한다.(이 프레임워크를 "프로그래밍 방법론" 강의 실습 시간에 사용할 예정이다.)


Sharif Judge (github link)


이 프레임워크는 기본적인 웹 인터페이스는 CodeIgniter로 구현되어 있고, 메인 백엔드는 BASH로 되어 있다고 한다. 그리고 서버가 gcc(C를 제공할 경우), javac(Java를 제공할 경우), g++(C++를 제공할 경우) 등과 같은 컴파일러나 python(Python을 제공할 경우)와 같은 인터프리터를 사용할 수 있어야 한다. 그렇지 않으면 소스코드를 실행할 수 없기 때문에 테스트를 할 수가 없다.


아직 Python의 경우에는 Sandbox 처리를 하지 않았기 때문에 보안상의 문제가 생길 수도 있다고 하니 직접 Sandbox 처리를 하거나 혹은 Python은 제외하는 것이 좋겠다.


반응형