2011년 7월 5일 화요일

[node.js] Evaluation

굳이 node.js로 표현해야 할지 아니면 Java Script로 통합해서 표현해야 될 지는 모르겠지만, 하여간 evaluation, 즉 코드에서 코드 실행시키기(?)

단순히 코드로 표현하자면 이런 것.
eval('console.log(\'This is SPARTA!\');');
Python의 Evaluation 보다는 뭔가 굉장히 단순하고 편하다. 인자(parameter)를 그냥 스트링 내부에 바로 적어버리면 되니깐.

eval()을 이용하면 반환(리턴)값을 바로 받을 수 있다.
var a = eval('1 + 1');
a는 2가 들어가게 된다.

require() 를 사용할 때도 내부 인자는 문자열로 넘긴다. 그렇다면 좀 재미있는 짓을 해 볼 수 도 있겠지.
function req_and_run(mod, api, args) {
  var modobj = require('./' + mod);
  var result = eval('modobj.' + api + '(' + args + ')');
  return result;
}

req_and_run('testmodule', 'testfunc', '1, 2, 3');
마지막 줄의 의미는 testmodule을 require 한 후 testmodule.testfunc(1, 2, 3) 을 실행시킨다는 것과 동일하게 동작시킨다는 것이다.

정말 할 일 없을 때 만들 수 있는 코드같다. 하지만 특정 프레임웍(Framework)을 만들 때는 굉장히 편한한 개발환경을 구축해 줄 수도 있기에 알아두면 좋다.

물론 eval이나 require를 동적으로 실행시키는 경우 인젝션(injection, 가로채기) 공격에 매우 취약해 진다는 점에 유의해야 하니 스트링을 검사해서 문제를 미리 걸러내는 지혜가 필요할 것이다.

댓글 없음 :