기존 docker run으로 동작하여, 동작을 마친 컨테이너를 삭제하고 새로운 컨테이너를 재생성하여야 하는 문제가 있었다. docker와 채점서버와의 커뮤니케이션도 문제가 되었다. (관련 회의 참고)
이것을 해결하기 위해 코드 실행용 도커에 express를 올리기로 했다.
/대회id/유저id/문제id
로 POST하는 방식으로 코드 실행 api를 만들었다.
api 반환 형식은 아래와 같이 보내주기로 했다.
{
result: 'SUCCESS'|에러메시지 (string),
competitionId: n (number),
userId: m (number),
problemId: l (number),
}
처음에 용후님과 이야기할 때에는 아래와 같은 실행흐름을 이야기했다.
채점서버 -> 도커 (코드 실행 요청)
도커 -> 채점서버 (응답)
// 채점 중...
도커 -> 채점서버 (코드 실행 완료 알림 요청)
채점서버 -> 도커 (응답)
하지만 굳이 4번 네트워크를 왔다갔다 할 이유가 있나? 싶어서 최종적으로는 아래와 같이 구현했다.
채점서버 -> 도커 (코드 실행 요청)
// 채점 중...
도커 -> 채점서버 (코드 실행 완료, 응답)