baekjoon   1년 전

요약: 지난 3년간 채점 현황, 그룹 연습, 맞힌 사람 페이지와의 싸움을 이제야 끝낸 것 같다. 이제 새로운 모험을 하러 떠난다.

안녕하세요.

오랜만의 업데이트 노트입니다.

마지막 글을 남긴건 3월 23일이고, 이후 그 동안 다음과 같은 큰 3가지 업데이트가 있었습니다.

1. 그룹

2. 채점 현황

3. 맞힌 사람, 숏코딩

3가지 업데이트는 모두 같은 업데이트입니다.

문제의 해결 방법에 대한 비유로 업데이트를 설명해보겠습니다.

11873번 문제는 여러가지 방법으로 해결할 수 있습니다. N == M 이라고 가정한다면 O(N^6), O(N^4), O(N^3), O(N^2) 에 해결할 수 있습니다.

꽤 오랜 시간 그룹 연습은 O(N^6) 방법을 사용했었습니다. 이 방법은 2012년에는 N이 작아서 괜찮았지만 점점 N이 커지면서 느려지기 시작했고, 나중에는 많은 서버 오류의 원인이 되기도 했었습니다. 대표적으로 UCPC 서버 사고을 일으키기도 했었습니다.

2020년 12월 27일 있었던 https://www.acmicpc.net/board/... 업데이트로 O(N^4)로 개선했지만 큰 영향은 없었던 것 같습니다.

지난 2021년 7월 19일 한 그룹의 연습이 시작되었고, 그룹의 인원이 모두 연습 스코어보드를 들어가는 순간 다행히 BOJ는 멈추지 않았지만 그룹의 스코어보드가 멈추었습니다. 스코어보드를 일시 중단했고, 스코어보드 속도를 O(N^3)으로 개선했습니다.

하지만, 다음날 다시 문제는 발생했고, 다시 개선했습니다. 알고보니 전날 했던 작업은 O(N^3)이 아니고 O(N^4)이었던 것 같습니다.

사실 나중에 돌이켜서보니 별로 의미없는 업데이트였고, 운이 좋을 때만 O(N^2), 거의 대부분은 O(N^4) 정도의 속도였던 것 같습니다. 

2022년 1월 27일 이번엔 스코어보드 속도를 개선했다고 생각했지만, 아니었습니다.

2022년 3월 말 더 이상 그룹 업데이트는 미룰 수가 없었고, 스코어보드가 계속 BOJ를 느리게 만들어서 개발 우선순위를 조정해 그룹을 최우선으로 변경했습니다.

그룹 업데이트는 두 가지 방법이 있었는데, 하나는 연습만 비활성화하고 하는 것이었고, 하나는 그룹 자체를 비활성화하는 것이었습니다.

그룹에는 스코어보드 이외에도 많은 문제가 있다고 생각했고, 어쩔 수 없이 그룹 자체를 비활성화하고 업데이트를 진행했습니다.

3월 31일에 그룹 서비스를 잠시 중단했고, 목표는 4월 3일이었으나 생각보다 그룹에 있는 정보의 양이 많아 4월 8일까지로 연장했었습니다. 중간에 연습만 비활성화하는 방식으로 다시 살리고 업데이트 하는 방식도 생각했었으나, 이왕 닫은 김에 제대로 하는게 좋다는 의견에 닫은 상태로 진행했었습니다.

아마 현재 그룹의 연습 스코어보드는 O(N^2)이라 생각되지만, 이전에도 그랬듯이 미래에 다시 아니라고 생각할 수도 있습니다.

무엇인가를 업데이트하기 위해서 해당 서비스를 닫는 방식은 서비스 운영자가 하면 안되는 방식이라 생각하지만, 그룹은 지금 다시 생각해도 닫는 방법 외에는 없었을 것 같습니다.

2번 채점 현황 업데이트는 꽤 오랜 과거와 기존에 했던 수 많은 업데이트는 O(N^6) -> O(N^3)으로 업데이트 하는 방식이었습니다.

이 업데이트가 2020년 12월, 2021년 1월에 주로 이루어졌는데, 그 이후 제출이 꽤 많아 점점 의미가 없어지고 있었습니다.

이전에 했던 업데이트는 일부 문제, 일부 유저 등에만 적용되었고, 결과나 언어, 언어 그룹을 검색 필터에 추가하면 느려지는 문제가 있었습니다. 새로운 방식을 모든 문제에 적용했고, 이번에는 O(N^2) 정도의 방법이라고 생각합니다.

업데이트를 위해 조합이 가능한 검색 방법을 테스트해보았고, 무엇을 조합해도 꽤 빠르게 채점 현황이 나오는 것 같습니다.

3번 맞힌 사람, 숏코딩도 2번과 의미는 같습니다. 일부 문제에만 적용된 방법을 지우고 새로운 방법을 모든 문제에 적용했고, 이제 꽤 빠르게 페이지 로딩이 되는 것 같습니다.

혹시 온라인 저지를 구현하실 생각이 있으신 분들께 조언을 드리자면 다음과 같습니다.

1. 맞힌 사람 페이지는 만들지 않는 것이 좋다.

2. 채점 현황은 20 페이지 정도로 제한을 걸거나, 다양한 옵션을 제공하지 않는 것이 좋다. 

3. 그룹은 만들지 않는 것이 좋다. 굳이 만들어야하면 연습은 만들지 말자.

최근 3년 사이에는 어떤 새로운 기능을 만들어서 공개하는 것보다 BOJ가 무너지지 않게 만드는데 거의 모든 시간을 쏟는 것 같습니다. 이제 많이 개선된 것 같습니다. 채점 현황과 약 3년간 싸우고 있는데, 중간 중간 제한을 두는 방식을 추가할지 정말 많이 고민했습니다. 처음부터 모든 제출을 보여준 만큼 어떤 검색 필터를 사용해도 빠르게 보여주자는 생각으로 계속해서 생각했고 많이 해결한 것 같습니다.

연습도 정말 어떻게 해결해야 할지 잘 모르겠어서 삭제할까라는 고민을 정말 많이 했었는데, 일단 어느정도 해결은 한 것 같습니다.

여러분의 많은 제출과 함께 저도 계속해서 성장할 수 있는 것 같습니다.

항상 감사했고, 앞으로도 항상 감사합니다.

위의 시간 복잡도 예시는 예시이고, 실제 시간 복잡도를 의미하는 것은 아닙니다.

그럼 저는 우편 채점을 하기 위해 대기하러 가겠습니다.

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