무한 루프
·2017.01.23 17:00
핵심 내용
Repl.it은 무한 루프로 인해 브라우저가 멈추는 문제를 해결하기 위해 출력 속도 제한과 JavaScript 코드 변환 기법을 도입했다.
자세히 보기
Repl.it은 사용자 프로그램에 시간 제한을 두지 않는 설계를 채택하여 복잡한 프로그램이나 게임 구현을 지원한다. 하지만 이로 인해 무한 루프가 발생할 경우 브라우저가 멈추는 두 가지 주요 문제가 발생했다.
첫째는 과도한 출력 데이터로 인해 브라우저가 잠기는 현상이다. 이를 해결하기 위해 **pty(pseudo-terminal)**를 raw i/o 모드로 설정하고, Go로 작성된 프론트엔드 서버에서 출력 속도를 초당 20회로 제한하는 ticker를 도입했다.
둘째는 JavaScript 실행 시 브라우저가 잠기는 문제다. JavaScript는 UI와 동일한 단일 스레드에서 실행되므로 무한 루프가 발생하면 브라우저 전체가 멈춘다. Web Worker를 사용하는 방법이 있지만, 이 경우 브라우저 API 접근이 제한되는 한계가 있다.
따라서 Repl.it은 JavaScript 코드에 반복 횟수를 체크하는 카운터를 추가하는 코드 변환(Transformation) 방식과 다양한 **휴리스틱(Heuristics)**을 활용하여 사용자를 보호하고 있다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.