- 인쇄
- PDF
Node.js
- 인쇄
- PDF
Node.js 형식의 액션을 생성하고 다양하게 활용하는 방법과 예제를 소개합니다.
액션 생성
JavaScript로 작성한 코드는 여러 개의 함수를 포함할 수 있지만 Main 함수는 프로그램의 시작점으로써 반드시 선언되어야 합니다. 이 점을 고려하여 이름과 장소를 포함하여 "Hello World"를 출력하는 JavaScript 형식의 간단한 예제 코드 hello.js
는 다음과 같습니다.
function main(params) {
var name = params.name || 'World';
var place = params.place || 'Naver';
return {payload: 'Hello, ' + name + ' in ' + place + '!'};
}
위에서 작성한 코드를 사용하여 콘솔에서 'hello'라는 이름의 액션을 생성하는 과정은 다음과 같습니다.
NodeJS 모듈로 패키징하여 액션 생성
코드를 작성하다 보면 여러 개의 파일을 만들어야 하거나 기본적으로 제공되는 라이브러리 외에 별도의 라이브러리를 사용해야 하는 경우가 있습니다. 이러한 경우 관련된 파일들을 하나의 모듈로 패키징하고, 패키징된 파일을 이용하여 액션을 생성할 수 있습니다. 간단한 예제를 통해 NodeJS 모듈로 패키징하여 액션을 생성하는 순서를 확인하면 다음과 같습니다.
- json 형식의
package.json
파일을 작성해 주십시오.{ "name": "my-action", "main": "index.js", "dependencies" : { "left-pad" : "1.1.3" } }
- 'left-pad'를 이용하는 간단한 'index.js' 파일을 작성해 주십시오.
function myAction(args) { const leftPad = require("left-pad") const lines = args.lines || []; return { padded: lines.map(l => leftPad(l, 30, ".")) } } exports.main = myAction;
npm install
명령으로 'left-pad' 라이브러리를 설치하고, ZIP 파일을 생성해 주십시오.$ npm install $ zip -r action.zip *
- ZIP 파일 생성 시 'package.json' 파일은 반드시 ZIP 파일의 루트(root)에 위치해야 함
- 콘솔에서 3.의 ZIP 파일을 사용하여 액션을 생성해 주십시오.
- 콘솔에서 액션을 실행하고 결과를 확인해 주십시오.
현재, npm install
실행 시 설치된 Dependency 중에 바이너리 파일이 포함된 경우에는 액션이 정상적으로 실행되지 않습니다.
비동기 액션 생성
비동기(Asynchronous) 동작하는 액션을 생성할 수 있습니다. 비동기적으로 동작하는 JavaScript 함수의 경우 main
함수가 종료된 이후에 Activation 결과값을 반환해야 하는 경우가 있습니다. 이러한 경우 액션 내에서 Promise
를 반환함으로써 해결할 수 있습니다. 비동기 액션인 asyncAction
을 생성하는 예제 코드는 다음과 같습니다.
예제 코드와 같이 실행할 경우 리소스를 독점하여 지나친 과금의 원인이 될 수 있으니 주의하여 참고해 주십시오.
function main(args) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({ done: true });
}, 2000);
})
}
main
함수에서Promise
를 반환하고 있습니다. 이는 액션의 실행이 아직 완료되지 않았고 미래에 완료될 것임을 나타냅니다.setTimeout
함수에 의해 2초 후에 Callback이 실행됩니다. Callback 내resolve()
함수가 실행되는 시점에 Promise가 만족되며 액션 실행이 정상적으로 완료됩니다. 만약reject()
함수를 호출하는 경우 액션이 비정상적으로 완료되었음을 알 수 있습니다.- 콘솔에서 동일하게
asyncAction
을 생성하여 실행한 다음 액션의 실행 결과 정보를 확인해보면 다음과 같이start
와end
간의 Timestamp가 약 2초 정도 차이가 나는 것을 확인할 수 있습니다.