배경
- 현재 구현되어있는 방법으로는 코드를 제출하고 채점 현황 페이지에서 자신의 결과가 뜰 때까지 새로고침을 해야함.
- 언제 채점이 될지 모르기 때문에 계속 새로고침을 해야한다는 불편함이 존재함.
- 따라서 채점 결과가 새로고침을 하지 않아도 볼 수 있도록 실시간으로 보여주는 방법을 생각함.
아이디어
1. 1초에 한 번 API 요청
- 1초에 한 번이어도 우리 서비스는 충분히 실시간처럼 보일 수 있을 것이다.
- 채점 진행 퍼센트를 보여주지 않으면 굳이 필요없을 듯?
- 채점 현황페이지에 들어왔을 때 1초에 한 번씩 API 요청을 계속 보내자.
- 문제
- 채점이 다 되어서 새로 보여줄 문제가 없을 때도 요청을 보내면 필요없는 요청이지 않을까
- 대안
- 현재 보고 있는 채점 현황에 채점 결과가 뜨지 않은 문제가 있을 때만 1초에 한 번씩 계속 요청을 보내자.
- 즉, 채점 결과가 다 뜬 페이지를 보고 있다면 1초에 한 번 요청을 보내지 않는다.
2. 소켓 연결
- 완전 실시간이 더 좋지 않을까?
- 채점 결과가 필요한 페이지에 들어왔을 때 소켓을 연결하자.
- 문제
- 소켓 연결을 유지하고 있는데 비용이 많이 들지 않을까?
- 대안1
- 프론트에서 채점 안된 제출이 있으면 소켓 연결
나는 몇번 제출부터 몇번 제출을 실시간으로 받겠다
라는 정보를 메세지로 넘김.
- 페이지 기준이 아닌 이유: 한 사용자가 채점 페이지에 있는 동안에도 다른 사용자가 계속 제출할 수 있기 때문에 페이지는 계속 밀릴 수 있다.
- 소켓 서버는 브로드 캐스트
- 본인 페이지에서 채점이 다 완료되면 소켓 끊기
선택 이유 - 1초에 한번 API 요청
- 두 방법 모두 현재 보고 있는 페이지에서 채점 요청이 안된 제출이 있으면 API 통신을 하거나 소켓을 연결하는 것으로 조건이 동일했다.
- 하지만 우리 서비스는 채점이 진행되고 있는 퍼센트를 보여주는 등의 완전한 실시간을 요하는 서비스가 없기 때문에 1초에 한 번씩 보내도 충분하다는데에 의견이 모아졌다.
구현 과정
- 채점을 가져오는 API는 이미 구현이 되어있기 때문에 프론트에서 현재 페이지에 채점이 안된 제출이 있는지 확인 후 있다면 요청을 계속 보내는 부분을 구현해보자.