ThinkTank 소개
ThinkTank는 개발자를 위한 알고리즘 문제 풀이 기반 소셜 플랫폼입니다. 사용자들은 다른 사용자가 만든 문제를 풀어보고, 직접 문제를 만들어 공유할 수 있으며, 이러한 상호작용을 통해 코딩 테스트 실력을 향상시킬 수 있습니다. 또한, 좋아요 및 댓글을 통해 문제 풀이와 실력 향상에 도움을 주고받을 수 있는 사이트입니다.
깃허브: https://github.com/ChangMinPark2/ThinkTank_BE
사이트 링크 (접속 후 HTTP로 바꿔주시면 사용 가능합니다): http://d26i62iijbw0u2.cloudfront.net
채점 플로우
<ThinkTank 사이트에서 채점이 필요한 부분>
1. 사용자가 문제를 생성할 때
2. 사용자가 다른 사용자가 만든 문제를 풀 때
1번이 필요한 이유는 만약 자신이 만든 문제의 테스트케이스가 올바르지 않을 경우 해당 문제는 정답이 없는 문제이기 때문입니다.
플로우로 보여드리겠습니다.
요구 사항
사용자 코드를 안전하게 채점하기
사용자 코드를 채점하는 것은 저번 사이드 프로젝트를 해보면서 경험해 보았습니다.
2024.03.30 - [구름톤 트레이닝 풀스택 회고] - ⛅️[구름톤 트레이닝 풀스택 6회차] - 13주 차 회고⛅️
채점 서버를 구현하다 보니 정말 고려해야 할 사항이 많았는데 그중 가장 중요한 점이 코드를 안전하게 채점하는 것입니다.
안전하게 채점한다 ?
해당 요구사항을 생각하게 된 이유는 만약 악의적인 사용자가 시스템을 손상시키는 코드를 작성한다거나, 데이터 탈취 코드, 자원 남용 코드, 네트워크 공격 코드 등을 받게 되면, 전체 서비스에 악영향이 끼친다고 판단해서 저는 서비스를 손상시키지 않고 안전하게 채점해야 한다는 요구사항을 생각하게 되었습니다.
저의 해결 방법으로는 독립된 공간에서 자바의 경우 사용자 코드를 컴파일하고 실행시키기입니다.
독립된 공간에서 컴파일하고 실행시키는 방법으로써 저는 익숙한 Docker Container를 생각해냈습니다.
도커 컨테이너를 이용해 실행한 플로우 입니다.
하지만 문제점이 생겼습니다. 도커 컨테이너는 한 번 실행되고, 종료되면 컨테이너가 종료됩니다.
저의 경우 컨테이너가 종료 시 삭제시키는 명령어를 추가해 줬는데, 만약 N 개의 테스트케이스가 있는 문제를 채점한다면, 총 N 개의 도커 컨테이너가 생성되고 삭제되는 문제가 발생했습니다.
JMMETER를 통한 부하 테스트로 1초 동안 50명 정도 동시에 요청을 보내보니, 몇 개는 맞아도, InterruptedException 예외가 발생하면서 실패하는 것을 확인했습니다.
이 문제에 대한 해결법은 다음 포스트로 작성하겠습니다.
'구름톤 트레이닝 풀스택 회고' 카테고리의 다른 글
[D'art-gallery] 선착순 쿠폰(1) - 대용량 트래픽, 동시성 이슈 (0) | 2024.06.11 |
---|---|
[ThinkTank] 채점서버 (2) - N개의 테스트케이스를 실행시키기 (0) | 2024.05.06 |
⛅️[구름톤 트레이닝 풀스택 6회차] - 16주 차 회고⛅️ - [WEB IDE 프로젝트] (0) | 2024.04.20 |
⛅️[구름톤 트레이닝 풀스택 6회차] - 13주 차 회고⛅️ (0) | 2024.03.30 |
⛅️[구름톤 트레이닝 풀스택 6회차] - 12주 차 회고⛅️ (0) | 2024.03.25 |