2007/04/26 13:35
Posted by
serialx Posted in
" 개발 "
요즘 끊임없는 코드와의 술래잡기를 하고있다. 아니- 정확히 말하자면 술래잡기라는 게임이 있는데, 이 게임을 웹으로 올려 사람들이 들어와, 자신의 AI를 테스트해보고, 다른 사람들이 올린 AI 와 술래잡기를 하는 그런 환경을 제작하고 있다.
문제는, 많은 사람들이 짐작하고 있겠지만, 바로 유저 AI 코드를 서버쪽에서 실행해야 한다는데에 있다. 이는 보안상 매우 취약한것이 사실이므로 이를 막기 위해서 많은 보안 요소를 도입해야 했다. 유저나 서버 코드가 모두 파이썬이므로, 파이썬에서 파이썬 코드를 불러와 실행하게 한다. 그런데, 유저는 아주 단순한 연산만 가능하게 포장해야 하므로 다른 필요없는 것들을 유저가 접근하지 못하도록 해야한다.
처음에는 간단했다. import 라는 키워드를 막으면 거의 모든 문제를 해결할 수 있을줄 알았다. (import 라는 키워드는 파이썬에서 다른 모듈을 불러올 때 사용한다)
하지만 그것으로 끝나지 않았다. 선배가 그럼 '''exec "__imp"+"ort__"''' 는 어떻게 막겠냐고 하자, 내가 정말 할말이 없어지더라..
정말.. 술래잡기라는 게임을 웹에서 사람들이 대전하는 형식으로 개발하자고 했던 내 아이디어 자체가 불가능한 것이였던것 같다. 사용자가 올린 봇끼리 n번씩 대결한다고 할때 기하급수적으로 늘어나는 대결 횟수와.. 한판을 시뮬레이션 하는데에 드는 서버 코스트까지.. 이리저리 계산해도 불가능한 수치가 나왔다.
하지만 그 수치에 아랑곳하지 않고 이렇게까지 개발을 밀어부쳤는데.. 이제 사용자 코드 실행이라는 어려운 난제에 부딛히게 되었다.
결국.. 인터넷에서 찾은 safe evaluation 모듈을 이용해 나름 깔끔한 구현을 찾으려고 했다. 그런데 이놈을 사용하려고 하니, 막상 클래스 정의같은것도 힘들고. 이래저래 제한사항이 많다.
결국 내가 짰던 술래잡기 게임 framework 를 갈아엎어야 하는 상황이 되었다. -_-;;
어떻게 해야할까.. 누가 좀 살려주세요. ;ㅁ;
Trackback
Trackback Address :: http://serialx.net/trackback/90
Comments