2022-02-20에 작성된 원문을 수정한 버전입니다
지난 1월 15일, '2021 경인지역 6개대학 연합프로그래밍 경시대회'인 shake! 가 열렸다. 지금 글을 쓰는 시점과는 시간이 꽤 흐르긴 했는데 나름대로 고통스러운 흥미로운 경험을 하기도 했고, 회고할 만한 일도 있었다고 생각하기에 지금이 되어서야 후기를 남기게 되었다.
배경
내가 소속된 아주대학교 소학회 A.N.S.I.는 2015년부터 shake! 대회를 주관하고 있다. 내가 입학한 2017년 이전에는 잘 모르겠지만, 2017년 이후로는 A.N.S.I.의 회장이 shake!의 대회 운영을 맡는 게 관례였다.
다만 회장이 shake! 대회에 참가를 하게 되는 경우, 운영 과정이 매끄럽지 않을 수도 있다는 점이 우려되어 이런 경우에는 별도의 인원이 대신 대회 운영을 맡을 수밖에 없었다. 이번 대회가 정확히 이 케이스에 해당되었고 결국 내가 대회 운영을 맡게 되었다. 전년도(2020년)에 회장직을 맡다가 도중에 군 입대로 인해 회장직의 소임을 다하지 못하고, 나 대신 고생해준 다른 분들에게 미안함과 책임감 때문이라도 내가 맡는 게 맞다고 생각했다.
시작
원래 이상적인 방향대로라면 나는 운영 파트만 담당하고 출제 파트는 (내가 포함되지 않은) 출제진들이 담당하는 것이다. 하지만 이렇게 진행할 경우 큰 문제가 하나 있다. 그건 바로 학교로부터 '운영 업무에 대한 급여'를 받을 수 없다는 것이다. 정확한 학교 사정은 모르겠지만, 예전부터 오직 '운영'업무 만으로는 급여를 받을 수 없다는 안내를 받았기 때문에 어쩔 수 없이 나는 운영도 하면서 출제도 해야하는, 양다리를 걸칠 수밖에 없는 상황이다(출제진은 급여가 나오기 때문이다).
그렇다면 누군가 '운영도 하면서 출제 하는 게 뭐가 힘듦?'이라고 되물을 수도 있겠다. 하지만 shake!는 운영 난이도가 그리 호락호락 하지가 않다. 사실 난이도가 어렵다기보다는 자잘하게 신경써야 할 일이 정말 많다. 왜냐하면 6개 대학이 합쳐서 하나의 대회를 만드는 특수성때문에 하나의 사안을 두고도 각 학교의 대표인들에게 동의를 구해야만 진행할 수 있다. 즉 하나의 의사결정 과정을 처리함에 있어서 단순 교내 프로그래밍 경시대회보다도 훨씬 복잡하고 시간도 많이 소요된다.
게다가 더 큰 산이 하나 더 남아있었으니, 바로 대회 후원사를 섭외해야한다는 점이다. 교내 대회인 APC는 학교 자체 후원으로 진행되었지만 shake!는 대대적으로 '산학 연계'라는 기조로 이어져왔기 때문에 매년 후원사를 두세군데 섭외해왔다. 후원사가 먼저 '저희가 대회 후원해드릴게요~' 먼저 나서주면 좋으련만 안타깝게도 그런 사례는 거의 없었다.
지금까지는 대부분 대회 운영 담당자(나 같은 포지션)가 이곳저곳에 후원 제안 메일을 뿌리면서 직접 맨땅에 헤딩하는 식으로 업체를 섭외해왔다. 물론 아무 업체에 제안을 한 건 아니고 주로 졸업하신 선배분들의 직장을 위주로 메일을 보냈기 때문에 섭외 성공 확률이 조금은 높았을 수는 있겠으나 거절도 적잖게 당했었다. 아무튼 운영 담당자는 후원 업체를 섭외하는 데도 부담스러울 수 밖에 없는 노릇이었다.
내가 해야할 일은 위와 같았다
그래도 뭐 어쩌겠는가. 결국에는 내가 해야한다. '하다보면 어떻게든 되겠지'라는 심정으로 시작했다.
출제를 하자
기왕 출제를 맡게 되었으니 즐거운 마음으로 하고자 마음을 먹었다. 출제진은 약 (2021년) 10월 초에 꾸려졌으며, 지난 대회 수상자와 타 대학 출제진으로 나를 포함해 총 5명으로 이루어졌다. 나도 APC 출제 경험이 있고 다들 출제 경험이 어느정도 있었기에 수월하지 않을까라고 예상했다.
출제 프로세스는 먼저 2주 간격으로 3번씩 선제를 진행하여 문제 pool을 모으고 이 중에서 대회에 출제할 문제를 확정 짓는다. 문제를 확정 짓고 나면 각자 본인이 맡은 문제를 대회 출제 플랫폼인 polygon 에서 데이터를 작업한다. 데이터 작업이 완료되면 대회 플랫폼인 BOJ의 대회 준비 플랫폼인 BOJ stack에 문제를 옮긴 후 최종적으로 문제를 다듬은 뒤에 검수를 맡기면 된다.
다만 출제 과정이 쉽지 않다. 지난 두 번의 APC 출제에서 익히 경험했었다. 가장 큰 난관은 내가 '어떤 문제를 내야할까'이다. 사람마다 문제를 내는 성향도 각기 다르다.
보통 두 부류로 나뉘는데 하나는 상황을 먼저 생각한 뒤에 문제화 시키는 방식과, 반대로 문제를 먼저 생각한 뒤에 상황을 끼워 맞추는 방식이 있다. 둘 중 어느 방식이 더 좋다고는 말은 못하겠으나 나 같은 경우에는 주로 후자의 방식으로 출제해왔다. 나는 특정 자료구조나 알고리즘같은 틀을 하나 생각해놓고 이 틀에 맞는 상황을 위에 덧씌우는 방식으로 한다.
보통은 출제 기간 전부터 '이 분야를 출제하고 싶다'로 마음 속에 염두에 두는 몇 문제가 있었는데, 이번 대회는 교내 대회인 APC가 끝난 직후에 바로 출제에 들어가다보니 쉽지가 않았다. 이미 내 머릿속에 있는 문제 pool은 고갈된 상태였는데 여기서 억지로 문제를 짜내야 하는 상황이었다. 그렇게 계속 머리를 굴려보다가 수직선상에서의 선분을 겹치는 문제를 내보고 싶다는 생각이 강하게 들어서 이쪽으로 방향을 틀었다.
처음에는 union-find
를 활용한 선분겹치기 문제를 내고 싶어서 문제 상황을 만들어봤는데, 나중에 선제 과정에서 얘기를 하면서 굳이 union-find
를 쓰지 않고도 더 쉬운 풀이가 있다는 걸 알았다. 그래서 이 문제를 고수할 지 다른 새로운 문제를 만들지를 결정해야했다. 평소대로라면 새로운 문제를 만들려고 시도해봤을텐데 이번엔 그러질 못했다.
아무래도 출제뿐만 아니라 다른 업무도 겸해야하고, 무엇보다 머릿속에 문제가 완전 고갈된 상태였기 때문에 자신이 없었다. 그래서 처음 나온 문제를 디벨롭하기로 결정했다.
10월 말에 1차 선제를 진행했다. 대회 전체 문제수는 통상적으로 8문제를 내는데 여기서는 예상보다 많은 13문제나 나왔다. 선제 과정에서는 출제진들끼리 각 문제를 두고 문제의 솔루션이나 난이도, 그리고 대회장에서 참가자들이 어떻게 받아들일지를 토의한다. 그래서 어떤 문제는 너무 typical 하다거나, 혹은 디스크립션이 이해하기 어렵다거나 하는 식으로 피드백을 주고 받는다.
1차 선제는 가장 처음으로 하는 토의고 출제진간의 시각 차이가 크므로 이 과정이 길어질 수밖에 없다. 이 과정에서 나의 (문제를 만든)발상과 나의 워딩이 다른 사람들에게 어떻게 전달되는지를 파악할 수 있는 좋은 기회라고 생각한다.
예를 들어 본인 입장에선 멋진 발상으로 만든 문제인 줄 알았는데 알고보니 뻔한 문제였다라든가, 문제 설명만 보고 누구나 다 이해할 줄 알았는데 실제로는 난해하다는 평을 받기도 한다.
그렇게 2차,3차 선제를 거듭하면서 문제 pool중에서 출제할 만한 '옥석'같은 문제을 가리고 다듬는 과정이 반복하면서 최종적으로 9문제가 선정되었다. 문제 선정까지 완료되면 출제 플랫폼인 polygon에서 문제 데이터를 위한 또다른 업무가 시작된다. 이 과정 역시 사람들의 학교 시험기간이 겹치면서 2주가량 소요되었다.
출제상의 오류는 없는지 확인하기 위해서 외부인의 검수 과정도 필요하다. 데이터 작업까지 모두 끝나고나서 검수를 시작할 수도 있지만, 시간이 촉박했기 때문에 데이터 작업과 검수를 동시에 시작했다. 문제의 디스크립션 상의 모호한 점이나, 대회의 체감 난이도, 데이터의 엣지 케이스와 카운터 케이스를 미리 피드백 받을 수 있다는 장점이 있다.
이 험난한 과정을 거친 뒤에 나온 문제들은 아래에서 확인할 수 있다.
후원사를 구해야한다
12월 초중순쯤 되자 데이터 작업도 완료하며 출제 프로세스는 어느 정도 막바지에 이르렀다. 이제 본격적으로 후원 업체를 섭외하러 가야한다. 그 전에 다행히도 몇 가지 희소식이 있었다. 첫 번째는 11월에 내가 네이버 D2에 대회 후원 요청 메일을 보냈는데, 후원해줄 의향이 있다고 답장이 온 것이다! D2는 지난 대회에서도 여러번 후원해준 사례도 있었고 대체로 대학생 행사 후원에 대해서 상당히 호의적이다.
그리고 두 번째는 소학회 담당 교수님께서 우리만 괜찮다면 네트워크를 활용하여 후원기업을 섭외를 도와주실 수도 있다고 말씀해주셨다. 나는 당연히 교수님께 도움을 요청드렸고 덕분에 한시름 놓을 수 있게 되었다.
그래도 가만히 앉아서 안주하고 있기에는 혹시나 섭외가 틀어질 수도 있는 상황을 대비해야 했기에 다른 업체 한 곳만 더 찾아보기로 했다. 여러 업체가 물망에 올랐는데(대부분 졸업 선배와 연계된 곳) 작년 대회를 후원해준 업체에 한번 더 요청을 드리기로 했다.
이곳 역시 졸업 선배님이 계신 곳이었기 때문에, 페이스북 메신저로 개인적으로 연락을 드려봤는데 안타깝게도 답장이 없으셨다(아마 확인을 못하셨던 것 같다). 그리고 그 무렵에 학교로부터 (교수님이 말씀하신대로) 후원기업을 찾았다는 연락을 받았기 때문에 우선 대회를 개최할 수 있는 최소한의 후원 기업은 확보되었다. 그래서 그냥 그만둘까 싶기도 했는데 그래도 혹시 모르는 심정으로 회사 대표 메일로 '후원 제안 메일'을 보냈다.
회사의 정문을 내가 쿵쿵 두드린 것과 마찬가지인 행위여서 좀 무모했다고 생각했다. 선배님께 직접 이 메일이 닿게 될 지도 확신할 수 없었다.며칠동안 답장이 없어서 그냥 거절당했구나 생각했다.
그러다가 일주일 만에 답장을 받았다! 다행히 회사에 계신 선배님까지 닿아서 직접 연락할 수 있게 되었다. 회사도 후원에 대해서 긍정적이라는 뜻을 전달받고 학교 측과 연결해주었다. 정말 다행이다 싶었다. 메일을 보내길 잘한 것 같다.
수 많은 잡다한 일
12월 말쯤 되었을 땐 후원사 섭외랑 출제 부분같은 큼직한 부분은 해결이 되었지만 아직 수많은 작고 작은 일들이 산적해있다.
- 이제 학교별 대회 참가자 명단을 받아야 한다. 그리고 감독해줄 각 학교별 스태프도 구해야한다.
- 대회 포스터도 만들어야 한다. 사실 처음부터 만든 건 아니고 작년에 쓰던 포스터 시안을 내가 살짝만 바꿨다. 썸네일에 걸려있는 포스터가 내가 바꾼 버전이다.
- BOJ에 문제의 최종 버전을 확인받고 대회용 계정을 받아야한다.
- 참가자들에게 대회 안내 메일을 발송해야 한다.
- 온라인 대회이므로 zoom 을 통한 회의실 배정과 대회 매뉴얼도 만들어서 공지해야한다.
- 대회 페이지를 수정해야 한다.
- 후원사 등장 문제를 만들어야 한다. 조금 늦게 결정되는 바람에 새로운 문제를 만들 여력은 없었고, 내가 기존에 출제했던 문제의 디스크립션을 각색하는 방향으로 했다.
대회 당일, 사회자
대회 당일이 되었다. 나는 그 날 대회 개회식의 사회자 역할을 맡게 되었다. 살다보니 이런 날도 온다. 개회식은 온라인 생방송으로 진행되고 대회 참가자들과 교수님들이 참석하시는 나름 부담감 넘치는 자리이다. 이런 곳에서 내가 사회를 해야 한다니... 처음에는 아무렇지 않을 줄 알았는데 생방송 시간이 다가오니 살짝 떨리더라.
물론 스크립트가 있고 나는 그냥 따라 읽으면 되는 간단한 역할이기는 한데 생방송이기도 하고 참가자들 앞이 아니라 카메라 앞에서 하려니깐 더 긴장되었던 것 같다. 차라리 오프라인으로 하는 게 훨씬 편할 것 같다.
그렇게 무사히 개회식이 끝나고 약간의 휴식시간 뒤에 대회가 시작되었다. 대회가 진행되는 도중에는 '제발 문제에 출제오류가 없기를...'하면서 계속 빌고 있었다. 아무리 검수를 거친다고는 하지만, 검수 과정에서도 필터되지 않은 오류가 있기도 마련이다. 그 오류가 제발 이번 대회만큼은 피해가기를 빌었다. 다행히 대회가 끝날 때까지 아무런 오류는 없었다. 그리고는 스코어보드를 공개하며 수상자를 발표했고 대회의 모든 일정이 마무리되었다. 다 끝나고나니 긴장이 싹 풀리면서 안도의 한숨을 내쉬었다. 지난 3달간 바쁘게 달려온 행사가 드디어 막을 내리게 된 것이다.
대회가 끝난 뒤
대회가 끝나고 난 뒤에도 여전히 할 일은 남아있다. 대회 스태프와 검수진들의 급여를 지급하기 위한 각종 서류들을 취합해서 학교에 전달해야 한다. 그리고 대회 수상자 목록도 정리해서 알려줘야 하고, 출제진들이 각자 출제한 문제들의 풀이를 슬라이드로 만들고 나는 이것들을 한꺼번에 모아서 merge한 후에 배포해야 한다. 마지막으로 참가자들에게 대회 종료 및 결과 안내 전체 메일을 발송하면 내가 할 일은 모두 마무리 된다.
회고
1. 서류지옥,서류지옥...
작성해야할 서류가 정말 어마무시하게 많다. 덕분에 한동안 내 컴퓨터의 바탕화면은 서류파일로 가득 차 있었다.
2. 코로나 이슈
기존에는 프로그래밍 대회가 오프라인으로 진행되었지만, 최근 2년동안에는 코로나로 인해서 모두 온라인 대회로 전환되었다. 나도 지난 APC에서 이미 온라인 대회를 치룬 적이 있었기 때문에 이번 대회 운영이 그렇게 생소하지는 않았으나 여전히 온라인 대회에는 어려운 점이 많다.
그 중 하나는 부정행위와 관련된 사안이다. 오프라인 대회 시절에는 강의실에서 참가자들이 모여서 진행하기 때문에 관리 감독하기에 용이했지만 온라인 대회에서 우리가 참가자들을 볼 수 있는 건 오직 zoom을 통해 송출되는 화면 뿐이다. 나 말고도 감독스태프가 있기도 하고, 참가자들의 양심을 신뢰해야겠지만 만약 소수의 악의적인 참가자가 온라인 대회의 특성을 악용하는 게 아닐까 하는 불안한 마음이 대회 진행 내내 머릿속에 맴돌았다(그런 사람이 절대 없기를 바란다).
그리고 도중에 참가자가 모르는 사이에 캠이 꺼져서 스태프가 화면을 볼 수 없는 경우도 생기는데, 이럴 경우에 일정 시간내에 재접속하지 않으면 실격처리된다. 이 또한 일일이 공지하고 신경쓰느라 애를 먹었던 부분이다. 또한 부차적인 문제이지만 온라인 대회라서 그런지 오프라인 대회보다 중도 포기자가 훨씬 더 많이 발생해서 아쉬운 마음이 들었다.
3. 일정 관리
이번 대회는 1월 15일에 열렸고, 프로세스는 10월 중순 쯤 시작했으니 약 3달 동안의 준비기간이 있었다. 3달이 그렇게 촉박한 시간까지는 아니었을 수 있으나 위에서도 얘기했듯이 한 사람이 출제 + 운영 + 섭외 업무를 동시에 담당해야 한다는 점을 감안한다면 결코 넉넉치는 않은 시간이었다.
그래서 이번에는 특히 일정 관리에 주의를 기울였던 것 같다. 3가지 요소 중에서 어느 하나라도 진도가 뒤쳐지면 대회에 차질이 생기기 때문에 각 요소별로 '언제까지는 이만큼을 만들어놓자' 식으로 타임라인을 정해가면서 준비했던 게 주효했다.
또한 각 학교별로 참가자 명단 같은 정보들을 취합해야 하는 경우가 많았는데, 이런 타입의 업무는 내가 열심히 한다고 끝나는 일이 아니라, 각 사람이 모두 협조를 해주어야만 끝날 수 있기 때문에 특히 더 시간적으로 예민해졌다. 이때 가장 중요하다고 생각하는 게 사람들에게 '나는 지금 이러이러한 일을 처리해야하기 때문에, 여러분들은 OO일 OO시까지 이 업무가 완료되도록 해야한다' 는 의사전달을 확실히 표현해야한다는 점이다. 여기서 강조하고 싶었던 것은,
- 내가 어떤 일을 해야하는 이유와 배경
- 그래서 상대방이 해야할 일
- 그 일의 마감시간 이다.
모든 일을 처리할 때에 있어서 항상 3가지 원칙을 상대방에게 전달하고자 했으며, 이를 통해 상호간 일의 능률이 향상된다는 점을 몸소 체험했다.
4. 설문조사 결과
대회가 끝나고 난 뒤, 참가자들이 실시한 설문조사 결과를 받았다.
문제 난이도 '적절함' 72.4%, '어려움' 24.1%
설문에 여러가지 항목이 있었는데 내가 가장 관심있는 항목은 참가자들이 느끼는 문제 난이도였다. 대회 문제의 난이도 세팅은 내가 대회를 앞두고 가장 조마조마했던 부분이었다. 지금까지 출제한 대회(그리고 대부분의 프로그래밍 대회)에서 출제 회의 당시에 문제의 예상 난이도를 책정하는데, 출제진은 참가자들보다 문제의 난이도를 하향평가하는 경향이 짙기 때문이다(2021 APC에서 제대로 경험했다).
따라서 참가자들에게 적절한 난이도를 제공하기 위해서는 출제 당시에는 '조금 쉬울 것 같다' 라는 느낌이 들어야 출제진과 참가자들의 체감 난이도 간극을 좁힐 수 있다고 생각했다. 그래서 이번 출제 과정에서도 문제 난이도 배정과 관련하여 출제진들과 신경써서 많은 얘기를 나눴었는데, 실제 대회에서도 제대로 반영된 것 같아서 다행이었다.
그리고 그 밖의 대회에서 아쉬웠거나 보완되었으면 하는 점도 응답을 받았는데 다음과 같은 의견들이 있었다.
대회 일정, 규칙 공지를 더 빨리 해 주었으면 좋겠다. (7명)
이건 명백한 내 잘못이었다. 대회 사이트와 각 학교 대표진들에게는 미리 공지를 하긴 했었는데 참가자들에게 직접적으로 전달하는 방식이 아니었기에 확인하지 못한 참가자는 대회 공지를 늦게 확인할 수 밖에 없었을 것이다.
다음부터는 조금 더 여유있고 직접적인 방식으로 참가자들에게 안내를 할 수 있도록 바꿔야겠다. 대회 규칙 또한 온라인대회이다 보니 참가자 입장에서도 어떤 행위가 허용되는지 안되는지 혼란스웠을 것이다. 나 역시도 온라인 대회 운영은 익숙치 않다보니 규칙을 제정함에 있어서도 놓치거나 서툴렀다. 다음부터는 대회 규칙을 사전에 자세하게 안내할 수 있도록 해야겠다.
대면으로 진행되었으면 좋겠다.(2명)
저두요...
마치며
10월 중순부터 대회 당일날까지 꽤나 바쁘게 살았다. 처음 내가 운영을 맡고자 했을 땐 '누군가가 해야할 일이라면 내가 하는게 낫다'라는 심정으로 나섰다. 출제도 몇 번 해봤겠다, 내친김에 대회 운영까지도 못할 게 뭐가 있겠냐 싶어서 달려든 마음도 있었던 것 같다.
그런데 운영은 출제와는 다른 운영만의 어려움이 있다. 출제에서 필요한 역량과 운영에서 필요한 역량은 확연히 다르다. 결이 다르다고나 할까? 그래서 대회를 운영하면서 나한테 부족했던 역량을 확인하고, 또 내가 잘 처리할 수 있는 업무는 무엇인지 확인할 수 있게 되었다.
그리고 다양한 위치와 입장에 있는 사람들과 컨택을 해보면서 그 사람에게 필요한 것, 그 사람이 요구 하는 것, 그리고 내가 그 사람에게 해줄 수 있는 것이 무엇인지 빠르게 파악하는 능력이 중요하는 것도 깨달았다.
지금 이 글이 shake!의 차기대회를 준비하게 될 누군가, 또는 프로그래밍 경시 대회를 준비하는 누군가에게 조금이나마 도움이 될 수 있기를 바란다.