수업 조교

[교내 강의 조교 일지 01] 문제해결 실습 및 응용 강사

가나타르트 2024. 4. 22. 12:21

1. [문제해결 실습 및 응용] 수업 강사

작년 여름부터 학교 측의 제안으로 "문제해결 실습 및 응용" 수업의 강사를 맡고 있다.
따라서 작년 2학기와 올해 1학기, 이 수업의 강사로써 매 주 1회, 약  2시간씩 강의를 진행하고 있다.

이론위주의 수업 보다는 코딩 및 알고리즘 구현 위주로 수업을 진행하고 있다.

 

맨 처음에는 교수님이 하는 수업 강의를 내가 직접 한다는 점이 뭔가 신기했지만,
이번에는 벌써 2번째라 편안한 마음으로 강의를 진행하고 있다.
PS쪽 현역에서 뛰고 물러난 지 약 2년 정도 지났지만, 이 수업은 학부생들 1, 2학년들을 대상으로 진행하는 수업이라
아무리 감이 다 죽었어도 수업을 진행할 정도의 능력은 아직 유지하고 있다.

2. 왜 갑자기 글을 쓰는가

이 수업은 1학점짜리 수업이기 때문에, 과제 100%로만 성적을 매기는 수업이다.
1학점밖에 안되는데, 중간고사, 기말고사 다 보는 빡센 수업이라면 누가 이 수업을 들을까
작년 2학기 수업때는 백준에서 문제를 가져와서 과제로 출제를 하였다.
하지만 백준에서 문제를 가져오면 이미 과제 출제하기도 전에 문제를 푸는 경우가 있거나
백준 문제를 구글링하면, 풀이 블로그가 수 십개가 나와서 배끼기 너무 쉽다는 문제점이 있다.
이러저러 해서 이번 봄학기에는 내가 직접 문제를 출제해서 과제를 내고 있다.
그런데 이렇게 문제를 출제하는 과정을 혼자 묵혀두기에는 아까운 거 같아
이렇게 일기장 형식으로 온라인에 남기려고 글을 쓰게 되었다.

3. 먼저 코드를 어떻게 채점할 것인가

백준처럼 코드를 내면 채점을 해 주는 사이트를 Online Judge, 줄여서 OJ라고도 한다.

대표적인 Online Judge 프로그램으로는 돔저지 등이 있다.

일단 사이트를 열기 위해서는 컴퓨터가 하나 필요하다.

물론 내 노트북으로 서버를 열어도 되지만, 노트북은 계속 가지고 다니기 때문에 이동 중에는 인터넷이 끊긴다.

따라서 노트북 보다는 아마존의 웹 서비스를 활용해서 Online Judge 서버를 열 예정이다.

 

따라서 일단은 aws ec2에 회원 가입을 하여 계정을 만들어두자.
그럼 이제 링크에 들어가면 웹 서비스를 관리할 수 있다.

물론 나는 돈을 아껴야 하기 때문에 거지티어 (free tier)를 활용할 것이다.

 

3-1. 먼저 키 페어를 만들어보자

서버를 열기 전에 보안 관련 세팅을 해야 한다.
말은 번지르르 하지만 사실은 링크에서 키페어를 만드는 것만 하면 된다.

네트워크 및 보안 > 키페어 생성 > 키페어를 통해서도 들어갈  수 있다.

이후에는 키 페이어의 이름을 정해주고 키 페어 유형은 RSA, 파일 형식은 .pem을 지정해주면 된다.

이름이 길면 쓰기가 귀찮아질 수 있으니 적당한 이름으로 정하자.

이후에는 키 페어 생성 버튼을 눌러주면 된다.

그렇다면 .pem 파일이 다운로드 폴더에 생길 것이다.
이 pem 파일을 실수로 삭제하지 않도록 주의하자. 이걸 잃어버리면 서버에 접속을 할 수 없다.

키 페어 생성

하지만 이 상태에서 만들어진 키 페어를 바로 사용한다면 나중에 오류가 발생하게 된다.

 

3-2. 키 페어 파일 설정

이렇게 만들어진 pem 파일에서 보안 설정을 추가적으로 진행해야 한다.

만약 당신의 os가 ubuntu라면 chmod 400 OJ.pem이라는 cmd 명령어 딸깍으로 해결할 수 있지만,
나는 window10이기 때문에 딸깍만으로는 해결할 수 없다.

이를 해결하기 위해서는 pem 파일을 우클릭해서 속성을 눌러준 다음 보안 탭으로 이동한다.
나는 이미 설정이 끝나서 아래와 같이 뜨지만, 아무것도 안했다면 그룹 또는 사용자 이름 이 구간에 여러가지가 뜰 것이다.

pem 파일 보안 탭

이제 고급 버튼을 눌러 고급 보안 설정 창을 열어보자. 그리고 상속 사용 안 함 버튼을 눌러보자. 그렇다면 사용 권한 항목이 있던 Users, Administrators 같은 것들이 갑자기 전부 사라졌을 것이다! 하지만 이는 당연한 것이니 당황하지 말자. 단순히 파일의 사용 권한을 없앤 것이다. 하지만 나는 파일을 사용할 수 있어야 하니 이제 나에게만 파일 권한을 부여할 것이다. 이를 위해서 추가 버튼을 눌러보자.

고급 보안 설정 창

 

그럼 이제 아래와 같이 권한을 부여할 수 있는 창이 뜰 것이다. 여기에 보안 주체 선택을 눌러보자.

보안 주체 선택 창

이제 권한을 부여할 사용자를 추가해야 한다. 여기에는 컴퓨터 사용자 이름을 넣으면 된다. 만약 사용자 이름을 모르겠다면 파일을 열어서 C:/Users로 가보자. 그렇다면 내 컴퓨터의 사용자 이름을 확인할 수 있다.

내 이름을 확인하는 법

이제 내 이름을 넣고 확인을 눌러주자. 그렇다면 이제 권한을 부여할 주체가 나로 설정되었을 것이다.

나에게 파일 권한 추가

이제 거의 다 왔다. 마지막으로 기본 권한 중에서 읽기, 읽기 및 실행 권한만 추가해주자. 이렇게 한 뒤에 확인 버튼을 누르고, 맨 처음의 파일 속성 > 보안 탭에서 적용 버튼을 눌러주자. 이렇게 하면 문제가 생기지 않을 것이다.

최종 권한 부여

3-3. 인스턴스 생성

이제 본격적으로 내가 쓸 서버를 만들어야 한다. 링크 또는 인스턴스 > 인스턴스 에서 인스턴스 시작을 누르면 된다.

그렇다면 아래와 같이 창이 뜰텐데, 적당히 서버 이름을 정해주면 된다.

그리고 여러가지 세팅들을 건드려주면 된다.

먼저 OS는 ubuntu로 설정해주고, 키 페어는 아까 전에 만들었던 OJ 키 페이를 선택하면 된다. 마지막으로 다른 사람들도 서버에 접속할 수 있게 인터넷에서 http/https 허용을 체크해야 한다. 이외의 다른 설정은 따로 건드리지 않았다.

OS는 우분투로 설정
키 페어는 위에서 만들었던 걸로 선택
http, https 트래픽 허용

위 이미지와 같이 설정한 후에는 인스턴스 시작 버튼을 누르면 된다. 그렇다면 인스턴스가 무사히 생성되었을 것이다!

3-4. Online Judge 서버 설정

먼저 내가 연 서버의 ip를 알아야 접속을 할 수 있다. 따라서 링크에 들어가서 내 서버의 ip를 확인해보자. 퍼블릭 IPv4에 있는 4개의 숫자가 내 서버 주소이다. ip 주소가 노출되면 디도스 등에 걸릴 수 있고 그러면 무한 요금 부과가 될 수 있으니 주의하자. 아래의 1.2.3.4는 F12로 내가 고친 주소고 실제 내 서버의 주소는 다르다.

서버 ip 확인

이제 서버에 접속을 할 것이다. cmd창을 켜보자. 나는 pem 파일을 바탕화면에 옮겼기 때문에 바탕화면으로 이동하였다.

접속은 ssh -i (pem파일 이름).pem ubuntu@(ip주소)로 할 수 있다.

서버 접속

그러면 이제 별 문제 없이 접속이 되어야 한다. 만약 접속에서 문제가 생긴다면 OS를 ubuntu로 설정을 했는지, pem 파일 보안 설정이 잘 되었는지 등을 다시 확인해보자.

접속이 되었다면 Online Judge 서버를 열어야 한다. Online Judge 서버로 가장 유명하다고 생각하는 건 Domjudge이지만, 설정이 까다로워서 Domjudge를 열려고 하다가 실패했다. 따라서 다른 Online Judge가 없나 찾아보고 있었는데, 링크의 깃허브에서 좋은 Online Judge 서버를 찾을 수 있었다. 따라서 해당 코드를 활용해서 Online Judge 서버를 열었다.

 

Online Judge 서버를 열기 위해서는 접속해둔 cmd 창에서 아래 명령어들을 순차적으로 입력하면 된다.

sudo apt-get update && sudo apt-get install -y vim python3-pip curl git
sudo pip3 install --upgrade pip
sudo pip install docker-compose
sudo curl -sSL get.docker.com | sh
sudo git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git && cd OnlineJudgeDeploy
sudo docker-compose up -d


단 6줄 만으로 서버가 열리다니 나는 참 좋은 세상에서 살아가는 것 같다. 이렇게 명령어들을 하나씩 치고 기다리다 보면 서버가 열리게 된다. 크롬에 내 서버 ip를 입력하면 어디서나 내가 연 서버에 접속을 할 수 있다.

내가 연 Online Judge 사이트 (ip 주소는 가짜)

먼저 할 것은 로그인이다. 로그인을 눌러서 슈퍼 계정으로 로그인을 해보자. 슈퍼 계정의 id는 root, 비밀번호는 rootroot이다. 젤 먼저 할 것은 계정의 비밀번호를 바꾸는 것이다. 만약 비밀번호를 안바꾼다면 수강하는 학생이 갑자기 문제를 다 지워버리거나 testcase를 다 다운로드 받아 버려도 나는 할 말이 없을 것이다. 따라서 왼쪽 위의 root를 눌러 setting에 들어가고 account 탭에서 비밀번호를 바꾸자.

이제 나는 문제를 마음껏 낼 수 있는 서버를 열게 되었다!

 

4. 비하인드

사실 이 글을 쓰고 있는 시점은 4월 22일이고, 우리 학교는 이미 중간 고사가 끝난 시점이다. 하지만 나는 왜 채점 서버를 열고 있는가를 물어본다면, 아마존 웹 서비스의 무료 티어는 컴퓨터의 성능이 딸리는 편이다. RAM 용량도 작고, 디스크 용량도 작은 편이다.
따라서 세팅을 몇 개 빼먹으면 서버가 잘 터진다. 이번에 문제를 만들면서 테스트 케이스의 용량이 커져서 그런지 서버의 디스크가 꽉 차버린 것 같다. 그래서 디스크의 쓰레기 파일 좀 지워야지 하면서 방심하다가 갑자기 어느날부터 서버 접속이 되지 않는 것이다! 따라서 기존 서버는 일단 냅두고 다시 긴급하게 새로 서버를 열었다. 이번에 쓴 글도 새로 서버를 다시 열면서 써내려간 것이다.

더 심각한 것은 기존 서버 파일의 pem 파일을 실수로 삭제하고 휴지통에서 날려버려 서버 접속도 안되는 상황이다! 기존 서버에 있던 내용은 일단 나중에 복구해보고 과제는 매 주 내야 하기 때문에 빠르게 새로운 서버를 열었다.

이제 문제 출제나 서버 관리는 2부에서 이어서 작성할 예정이다. 오늘 3시에 수업이 있기 때문에 빨리 문제를 내야 하기 때문에 저녁에 쓰지 않을까? 싶다.