startlink   2년 전

3줄 요약

  1. 채점 마무리 속도를 약 50배 정도 빠르게 향상시켰다.
  2. 그래서 사이트의 전반적인 속도가 빨라졌다.
  3. 신난다.

안녕하세요.

속도와 관련해 가장 중요한 업데이트가 BOJ에 적용되었습니다.

배경 설명을 하자면 2019년 BOJ의 10주년을 기념해 스타트링크 블로그에 BOJ의 구조에 대해서 글을 올린 적이 있습니다. 그 중 2부에 보면 "채점 마무리"와 관련된 내용이 있습니다.

"채점 마무리"에서 문제에 대한 정보의 계산을 Lambda로 독립시켰다는 내용이 나옵니다. 채점 마무리에 걸리는 시간은 카카오 코드 페스티벌 2018 예선 대회 개최 후기에 자세하게 나오는데, 이 당시 기록을 보면 baekjoon이 1000번에 제출하면 채점 마무리에 걸리는 시간이 22.10초 입니다.

2021년 7월 27일을 기준으로 baekjoon이 1000번 제출을 했을 때 채점 마무리에 걸리는 시간을 계산해보면 약 101초 정도입니다.

시간이 오래 걸리게 된 이유는 유저도 많아졌고, 제출도 많아졌고, 저 당시보다 더 많은 정보를 미리 계산하고 있습니다.

이 시간을 줄이는 것이 저의 가장 큰 목표이고, 저 계산 때문에 사이트가 항상 조금 느린 감이 있다는 생각을 하고 있었습니다.

2일 전 자려고 누웠는데 눕자마자 갑자기 기가 막힌 아이디어가 떠올랐습니다. 바로 일어나서 1시간 정도 간단하게 구현해보고 테스트를 해보았는데, 결과가 생각보다 좋았습니다. 일단 졸리니 잤습니다.

어제 작업을 하려고 했는데, 접속 중인 유저도 많고, 혹시나 잘못되면 안되니 새벽에 일어나서 하려고 또 잤습니다. 

새벽 3시에 채점 프로그램부터 코딩을 시작했고, 의외로 30분 만에 구현이 끝났습니다. 혹시 모르니 이런 저런 테스트를 해보았고, 테스트와 벤치마킹이 약 1시간 정도로 더 오래걸렸습니다.

이제 Lambda로 독립시킨 부분을 구현할 차례입니다. 동일한 역할을 하는 부분을 두 번 구현하는 것은 정말 하기 싫은 작업이지만, 어쩔 수 없습니다. 채점 프로그램은 C++, Lambda는 Python으로 구현했기 때문입니다. 예전에 독립시킬 때 이 부분을 최대한 C++의 코드를 복사/붙여넣기 해서 세미콜론만 지우면 될 정도로 구현을 해놓았습니다. 이 작업도 약 20분 밖에 안걸렸고, 테스트와 벤치마킹을 또 1시간 정도 수행했습니다.

2018년 9월에 맞은 사람 페이지에서 언어를 바꾸면 왼쪽에 나오는 통계도 그 언어에 맞게 바꾸는 업데이트를 했습니다. 이 시기는 위의 카카오 코드 페스티벌 2018 글을 작성한지 1달 정도 지났을 때입니다. 이때 전체 문제와 전체 언어에 대해서 모든 통계를 다시 계산했는데, 이 작업은 "채점 마무리"의 소스 코드를 그대로 이용했습니다. 이때 약 2-3일 정도 걸렸던 것으로 기억합니다.

오늘 업데이트를 하고 나서 전체 문제와 전체 언어에 대해서 모든 통계를 다시 계산했는데, 무려 1시간도 걸리지 않았습니다.

위에서 101초 정도 걸린 1000번의 채점 마무리 시간은 2초 정도 걸립니다. 제출이 1000번의 10% 정도 되는 문제는 약 0.7초 정도 걸립니다. 이정도면 예전에 독립시킨 Lambda를 지우고 다시 채점 프로그램에 붙여도 문제 없을 수준입니다.

올해 통계를 보면 채점 마무리 큐는 오전 9시부터 쌓이기 시작해서 다음날 오전 6시가 되어야 비어있는 상태가 되었습니다. 가끔 제출이 많은 날은 비어있는 상태도 가지 못한 적도 있었습니다. 업데이트가 적용된 시점 기준으로 큐는 거의 항상 비어있고, 병목현상 없이 바로 바로 채점 마무리를 수행하고 있습니다.

채점 마무리의 속도가 빨라지니 사이트의 전반적인 속도도 빨라진 것 같습니다. 기분 탓인지 이상하게 오늘은 링크를 누르면 바로 바로 내용이 나오는 것 같습니다.

신나네요

startlink   2년 전

전에 채점 현황, 랭킹, 연습 등을 업데이트하면서 페이지 로딩 속도를 기록해놓은 파일을 찾았는데, 그때보다 약 10배 정도는 빨라진 것으로 나옵니다.

huozuyinshua   2년 전

감사합니다. 

startlink   2년 전

Google Analytics 를 통해 분석해보니 약 시간이 이전과 비교하면 절반 정도 시간이 걸리는 것으로 확인됩니다.

댓글을 작성하려면 로그인해야 합니다.