위드 코로나 체험판 다운로드 및 설치

2021년 회고

ICPC World Finals Moscow

코로나가 올해 12월에는 끝나있을 줄 알았죠. 일일 확진자 수가 최고치를 갱신 중이라는 작년 회고가 무색하게, 연말 확진자 수는 만 명에 가까워지고 있어요. 하지만 위드 코로나 체험판과 이런 시국에 다녀온 월드 파이널 덕분에 작년보다는 여기저기 많이 돌아다녔답니다.

덧없는 인생 목표

운좋게도 ICPC World Finals에 초청받게 되었습니다. 대회에 참여하려면 팀원 세 명이 모두 접종완료여야 하는데 한국의 백신 수급 상황이 좋았던 영향이었습니다. 모스크바 시내도 구경하고, 문제도 구경만 하다 왔어요.

2010년 이후로 11년만에 서강대학교 이름을 올렸습니다

2019년에는 월드 파이널을 그렇게 나가고 싶어했던 것 같은데, 월드 파이널 진출이 나름의 인생 목표였습니다. 그런만큼 엄청 멀게 느껴졌던 곳이기도 했구요. 그런데 이렇게 허무하게 달성해 버렸네요. 마음 한 켠에 애매함이 남습니다. 사실 제가 원했던 건 월드 파이널 진출 자체가 아니라 한국 리저널에서 월드 파이널에 진출할 만한 실력을 갖는 것이었는지도 모르겠습니다.

좋은 경험이었지만 87위라는 성적은 개인적으로는 정말 정말 많이 아쉬웠고, 비록 2019년 서울 리저널 상위 팀이었기에 기회를 잡았던 것도 맞는 말이지만 코로나 시국이 아니었다면 진출하지 못했을 것이기에 목표를 제대로 이루지 못한 것 같다는 생각이 계속 듭니다. 그래서 이미 이룬 목표지만 복학 후에 한 번 더 도전해 보려고 합니다. 아쉬움을 풀고 싶어요.

팀 레드시프트를 찾아보세요!

월드 파이널 참가 및 모스크바 여행 후기를 작성하고 있습니다. 기대해 주세요!

소프트웨어 개발

solved.ac

3.0.0

올해도 작년에 이어 solved.ac 개발에 많은 노력을 쏟았습니다. 올해에도 큼직한 기능들을 정리해 봅시다.

  • 출처 기반 문제 검색. (1월) 문제 출처를 기반으로 검색할 수 있습니다. from:sogang, from:ioi2021 같은 게 되죠.
  • AC 레이팅. (3월) 경험치 기반 티어 산정을 버리고 새로운 레이팅을 도입했습니다.
  • Express로 처음부터 끝까지 다시 구현된 백엔드. (6월)
  • solved.ac 디스코드 및 디스코드 연동. (6월) solved.ac 계정과 Discord 계정을 연결해 solved.ac에서 티어가 변경되면 Discord에서 역할이 바로 변경되게끔 했습니다. 본인의 solved.ac 닉네임을 채팅 닉네임으로 사용해야 하기 때문에 서버 채팅 관리 부담도 적죠.
  • 트위터 연동. (6월) 문제를 풀면 실시간으로 트윗을 올려 줍니다.
  • 스트릭. (7월) 연속으로 문제를 해결한 날짜 수를 계산해 줍니다. 스트릭이 생긴 이후로 문제를 풀고 싶은 마음이 더 생기지 않았나요?
  • 별조각. (10월) 문제를 풀고 기여를 하면 뭔가 재화를 드려요.
  • 문제 해결 이벤트. (11월) 우여곡절은 많았지만 빼빼로 데이 이벤트를 진행했습니다. 진짜 빼빼로를 보내드렸어요.
  • 코인과 코인샵. (11월) 프로필 배경과 스트릭 프리즈를 구매할 수 있어요.

정말 많네요!

3월에 AC 레이팅 업데이트를 하고 나서는 기존에 PHP로 짜여 있던 백엔드를 전부 Express.js로 포팅했는데요, 기존의 백엔드 서버가 EC2에 올라가 있고 제가 FTP로 수정했으며 버전 관리 같은 거 하나도 안 했다면 믿으시겠나요? 지금은 상상할 수도 없는 일이네요.

Github Actions

solved.ac의 API 셋은 기존에도 방대했어서 Express로 포팅하는 데에는 장장 3달이 걸렸습니다. 하지만 포팅이 완료된 6월 이후의 업데이트 내역들을 보면 DP를 참 잘 돌린 거 같아요. 시간이 된다면 포팅 후기도 작성해 보고 싶습니다. 사실 이렇게 말하면 나중에 결국 안 쓰게 되긴 합니다. 시간을 내서 써야 하는 건데 어렵더라구요.

백엔드를 포팅하고 나서 지금까지, 즉 3월부터 12월까지 새로 알게 된 큼지막한 기술과 방법론들을 정리해 보면

  • Github Actions: CI/CD
  • AWS ECR을 통해 ECS에 무중단 배포
    • Github Actions를 사용해 자동 배포까지
  • Sequelize: ORM
  • yarn 워크스페이스와 lerna를 이용해 모노레포 구축
    • 클라이언트와 서버 간 쉬운 코드 공유를 통해 효율적인 작업환경 구축
  • Express로 레이트 리미팅 미들웨어 제작
  • SQL optimizer hints를 이용한 쿼리 최적화 — 문제 고급 검색 속도를 엄청나게 향상했어요

정도가 있겠습니다. 저는 되게 야매로 개발한다고 주장하고 실제로도 그러고 있는데, 이제야 조금 제대로 뭔가를 만들고 있다는 느낌이네요. 그래도 아직 많이 부족하다고 느끼고, 더 성장하고 싶습니다. 이제는 TDD를 해보고 싶은데….

내년에는 새로운 기능 개발보다는 길라잡이를 작성할 수 있는 기반을 마련하는 데 열중하고 싶습니다. 길라잡이가 너무 너무 너무 너무 미뤄졌죠 죄송해요 내년에도잘부탁드려요

뭔가 (상대적으로) 챌린징한 프론트엔드 태스크와 챌린징한 백엔드 태스크를 매년 번갈아 하는 거 같은 느낌이네요. 내년에는 길라잡이 기반을 완성할 수 있을까요?

한국정보올림피아드 대회 프론트엔드

대회 시스템 사용 가이드

올해는 온라인으로 개최된 한국정보올림피아드의 대회 시스템 프론트엔드를 직접 설계 및 개발했습니다. 디자인도 다 했습니다.

수많은 챌린징한 프론트엔드 태스크를 다뤘습니다. 예를 들어…

  • 웹소켓을 통한 실시간 채점 정보 취득
  • 언어 서버가 없어서 완벽하지는 않지만, 약간의 편의를 제공하는 자동완성
  • 크기 조절이 가능한 문제 스테이트먼트 / 코드 에디터 2분할 화면, 너무 길어지면 잘리며 버튼을 누르면 열고 닫을 수 있는 코드 블록, LaTeX 렌더가 가능한 스낵바, 비버챌린지(유저가 상호작용할 수 있는, 캔버스에 랜더하는 자바스크립트 코드를 동적으로 엠베드하기) …
  • 부정행위 예방을 위한 화면 녹화 및 기타 여러 솔루션

등이 있습니다. 더 자세하게 말하지는 못하지만 정말 힘들었던 프로젝트였습니다. 제가 대학생이 되어서 알고리즘 문제해결을 시작해서 그런지 정보올림피아드에 나가보지 못한 걸 아쉬워했는데요, 이렇게라도 참가하게 되어 뿌듯했던 프로젝트였습니다. NYPC도 마찬가지구요!

준비되지 않은 나 앞에 성큼 다가와 버린

파트장

왠진 모르겠는데 회사를 다니다 보니까 직함이 생겼어요…. 와아….

부족한 실력으로 면접관도 되어 보고 회사의 여러 일들에 관여하게 되다가 12월에 파트장으로 발령받았어요. 작은 파트긴 하지만 처음으로 해 보는 매니징이라 잘 해낼 수 있을지 겁나네요.

저 잘 하고 있는 걸까요? 그렇지 않더라도 저를 믿어 주고 계시는 분들께 실망이 되지 않도록 잘해내봐야겠어요

새삼 이 때가 얼마나 좋았는지 실감이 나요. 사실 아직은 저거 ‘팀장님’으로 바꾸면 유효하긴 한데

대회 프로그래밍

NYPC

NYPC 시스템 개발에 이어 올해는 출제를 했습니다.

저는 예선 1번 계단예선 7번 루트가 많은 트리를 냈습니다. 계단 문제는 제가 계단을 하루에 100층씩 오르면서 살을 뺐던 걸 문제로 만든 거고, 루트가 많은 트리는 회사에서 의자에 앉아서 빙글빙글 돌다가 어 이거 괜찮네 하고 낸 문제입니다. 최고의 대회에 제 문제들을 선보일 수 있어서 너무 영광이었습니다!

영상에서 저를 찾아보세요!

대회 운영 참여

작년만큼은 아니지만 올해도 많은 대회의 운영에 참여했습니다.

대신 작년보다 훨씬 많은 문제를 출제했습니다. 이제 문제 은행을 만들어 놓고 대회에 필요할 때마다 하나씩 꺼내 쓰고 있어요.

SPC 2021

특히 NYPC와 SPC는 온사이트로 치뤄져서 즐거웠습니다. 이대로 위드 코로나를 이어가서 Hello 2022를 온사이트로 열면 좋았겠다는 생각은 있었지만 정말 안타깝게도 새로운 변이가 나타나 버렸네요…. 다음 온사이트 대회는 언제 열릴 수 있을까요.

코드포스

2021년의 코드포스 기록

어쩌다 운 좋게 찍은 오렌지를 박제해 두고 기고만장했던 것 같습니다. 1월 28일에 대회를 한 번 치고 11월까지 안 치다가 다시 쳤더니 퍼플을 넘어 블루를 다녀왔습니다.

1년을 잃어버렸습니다. 다시 마음을 다잡아야겠습니다.

대회 참가

올해는 UCPC에 참가자 신분으로 출전했습니다. 의외로 참가자로서는 처음 본선을 나가 봤고, 5등상(12등)이라는 괄목할 만한 성적을 냈습니다.

코드잼 3라운드와 SCPC 수상이 올해의 작은 목표였지만…

SCPC는 잘 모르겠고, 코드잼은 어이없는 실수를 해서 3라운드에 진출하지 못하게 됩니다.

3년 연속으로 코드잼 2라운드에 SCPC 파이널리스트인데요, 올해 목표 내년에는 제발 제발 이룰 수 있었으면 좋겠습니다. 노력해야겠습니다.

이외에도 ICPC 월드 파이널에 참가했습니다.

그래픽 디자인

블렌더

올해는 처음으로 3D를 만져봤습니다. 간단하게 solved.ac 프로필 배경들을 만들어봤습니다.

또 위에도 언급했지만 정보올림피아드 프론트엔드 UI/UX 디자인을 했습니다. 재밌었어요.

올해도 포스터를 만들었습니다.

이외에

심심했던 작년과 달리 올해는 인생 이벤트가 참 많았던 해였습니다.

어쩌다 보니 좋아하는 사람이 생겨서 사귀게 되었습니다.

같이 파스타도 먹으러 가고 돈까스도 먹으러 가고 곰탕도 먹으러 가고 김치찌개도 먹으러 가고 치맥도 하러 가고 카페도 가고 칵테일바도 가고 모든 순간을 함께하고 있습니다. 최고로 행복한 나날들을 보내고 있어요.

그리고 최고의 생일축하를 받았습니다. 절대 잊지 못할 거 같아요.

원래 부모님과 같이 살았는데, 회사가 너무 멀어서 낙성대에서 자취를 시작했습니다. 출퇴근 시간이 왕복 1.5시간 정도 줄었고, 샤로수길에서 배달이 됩니다.

다만 이게 문제가…. 12월부터 6월까지 매일 계단을 100층씩 오르면서 살을 15kg나 뺐는데, 자취 시작하고 나서 배달 음식 자주 먹고 애인과 여기저기 같이 다니다 보니 딱 뺀 만큼 다시 쪄버렸습니다. 다시 빼버리겠다는 결심으로 매일 집 뒷편 산을 오르고 있습니다.

자취하면서 마파두부랑 카르보나라를 자주 해먹었습니다. 요리 실력이 늘었어요. 카르보나라는 크림 카르보나라는 아니고 노른자랑 치즈로만 맛을 내는 카르보나라인데, 많이 연습했더니 이제 노른자를 익히지 않고도 따뜻한 카르보나라를 만들 수 있게 됐습니다. 자취방이 인덕션이 1구라 여전히 조금 어렵긴 해요.

노트북이 고장나서 새로 샀습니다. 메인 작업 컴퓨터로 이미 맥을 쓰고 있긴 하지만, 맥북은 하이퍼커넥트에서 인턴할 때 잠깐 써 본 걸 제외하면 인생 처음으로 써 보네요. 일정 성능 이상이라면 배터리가 오래가는 게 제일 중요하다고 생각해서 14인치 프로 모델로 샀습니다. 잘 산 거 같아요.

마지막으로 한동안 잘 안 보였던 한별이가 올해 다시 돌아왔습니다. 엄청 귀엽지 않나요? 언젠가는 라이브2D를 보고 싶다는 나름의 염원이 있었는데 올해 드디어 이뤄졌습니다.

귀여운 그림도 많이 추가되었어요. solved.ac 프로필 배경에도 많이 등록되었습니다.


올해 신년 목표는 ‘한 해 적당히 잘 보내기’였습니다. 이 정도면 적당히 잘 보냈을까요? 전혀 예상하지 못했던 행복한 일들도 많았고, 제 기고만장함을 반성하게 되는 일들도 있었네요.

내년엔 산업기능요원 복무가 만료됩니다. 회사를 계속 다닐지 복학해서 공부를 일찍 마칠지, 복학한다면 복수전공을 할지 대학원을 준비할지 머릿속에서 고민이 끊이지 않네요.

새해 복 많이 받으세요! 내년에는 위드 코로나 정식판을 즐길 수 있으면 좋겠습니다. 🔔