[node.js] Evaluation
굳이 node.js로 표현해야 할지 아니면 Java Script로 통합해서 표현해야 될 지는 모르겠지만, 하여간 evaluation, 즉 코드에서 코드 실행시키기(?)
단순히 코드로 표현하자면 이런 것.
eval()을 이용하면 반환(리턴)값을 바로 받을 수 있다.
require() 를 사용할 때도 내부 인자는 문자열로 넘긴다. 그렇다면 좀 재미있는 짓을 해 볼 수 도 있겠지.
정말 할 일 없을 때 만들 수 있는 코드같다. 하지만 특정 프레임웍(Framework)을 만들 때는 굉장히 편한한 개발환경을 구축해 줄 수도 있기에 알아두면 좋다.
물론 eval이나 require를 동적으로 실행시키는 경우 인젝션(injection, 가로채기) 공격에 매우 취약해 진다는 점에 유의해야 하니 스트링을 검사해서 문제를 미리 걸러내는 지혜가 필요할 것이다.
단순히 코드로 표현하자면 이런 것.
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, 가로채기) 공격에 매우 취약해 진다는 점에 유의해야 하니 스트링을 검사해서 문제를 미리 걸러내는 지혜가 필요할 것이다.
댓글