- 인쇄
- PDF
Cloud Functions 개념
- 인쇄
- PDF
Cloud Functions를 이용하는 전체 시나리오를 학습하기에 앞서 Cloud Functions에 대한 중요한 몇 가지 개념을 설명합니다. 설명하려는 주요 개념은 다음과 같습니다.
Cloud Functions 개념의 원활한 이해를 위해 용어를 참고해 주십시오.
네임스페이스
네임스페이스는 사용자가 이용 신청 시 사용자별로 할당되는 고유의 영역을 의미하며, 실제로는 난수 형태로 생성되는 문자열입니다. Cloud Functions의 패키지, 액션, 트리거와 같은 모든 리소스는 네임스페이스 하위에 생성되기 때문에 이용 해지 시 네임스페이스에 속한 모든 리소스는 일괄 삭제됩니다. 만약 다시 이용 신청을 하게 되면 새로운 네임스페이스가 할당됩니다.
네임스페이스는 이러한 성격으로 인해 사용자별 사용량 측정 및 과금 계산의 기준이 됩니다.
액션
액션은 사용자가 정의하는 상태 비저장(Stateless) 코드의 코드 조각(Snippets)을 의미합니다. 액션은 JavaScript, Swift, Java, Python, PHP 등 다양한 언어로 작성할 수 있습니다. 네이버 클라우드 플랫폼의 Cloud Functions에서는 액션 작성에 사용할 수 있는 언어는 Cloud Functions 사용 준비에서 확인이 가능합니다.
액션은 사용자에 의해 호출되거나 이벤트에 반응하여 실행될 수 있으며, 다른 액션의 결과를 입력으로 받아 시퀀스로 실행될 수도 있습니다. 액션의 Input과 Output은 모두 키-값(key-value) 형태의 json 값입니다. 액션이 명시적으로 실행되거나 특정 이벤트의 결과로 실행될 때마다 액티베이션이 생성됩니다. 액티베이션에 대한 설명은 액티베이션을 참고해 주십시오.
액션 컨테이너
각각의 액션은 서로 독립된 컨테이너상에서 구동됩니다. 액션이 실행될 때마다 각각의 액션을 위해 생성된 컨테이너에서 사용자가 정의한 코드가 실행되고 결과가 전달되는 방식입니다. 한번 생성된 컨테이너는 바로 종료되지 않고 일정 시간 동안 유지되다가 동일한 액션이 실행되면 재사용됩니다. 그 후에는 자동 삭제되기 때문에 다른 사용자에게 공유하거나 재활용되는 보안상의 문제는 발생하지 않습니다.
액션이 처음 실행될 때 컨테이너 생성에 대략 50~200ms 가량 소요될 수 있으며, 이 시간을 단축하기 위해서 'pre-warming'이라는 기법이 적용되어 있습니다. 'pre-warming' 기법을 활용하여 미리 특정 언어의 액션 컨테이너를 구동시켜 놓을 수 있습니다.
시퀀스
시퀀스는 시퀀스 액션과 동일한 의미입니다. 시퀀스 액션은 다양한 언어로 작성된 여러 개의 액션들을 순차적으로 실행합니다. 선행 액션에 정의된 코드에서 json 형식으로 리턴된 결과를 후행 액션의 액션 파라미터값으로 전달받게 됩니다.
액션 로직에서 선행 액션 결과에 따라 분기하여 간단한 워크플로우를 구현할 수 있습니다.
액티베이션
액티베이션은 액션이나 트리거의 실행 결과를 의미합니다. 액티베이션에는 실행 결과와 메타 데이터가 포함되어 있습니다. 하나의 액션을 실행할 때마다 하나의 액티베이션이 생성되며, 액티베이션마다 고유한 ID를 가지기 때문에 Activation ID로 각각을 구분할 수 있습니다. Activation ID는 32자리로 구성된 임의의 alpha-numeric 값입니다.
실행 결과
실행 결과 예제 코드와 실행 결과의 각 구성 항목에 대한 설명은 다음과 같습니다.
{
"namespace": "U749rOIuHnuy",
"name": "rp",
"version": "0.0.1",
"subject": "U749rOIuHnuy",
"activationId": "626c0dfabf274aa7ac0dfabf270aa759",
"start": 1517461496130,
"end": 1517461496451,
"duration": 321,
"response": {
"status": "success",
"statusCode": 0,
"success": true,
"result": {
"status": "ok"
}
},
"logs": [],
"annotations": [
{
"key": "path",
"value": "U749rOIuHnuy/package/action"
},
{
"key": "waitTime",
"value": 33
},
{
"key": "kind",
"value": "nodejs:16"
},
{
"key": "limits",
"value": {
"logs": 1,
"memory": 256,
"timeout": 60000
}
},
{
"key": "initTime",
"value": 262
}
],
"publish": false
}
namespace
: 액션(트리거)이 속한 네임스페이스로 사용자와의 계약에 의해 할당된 고유 공간name
: 액션(트리거)의 이름activationId
: 액션(트리거) 실행 결과에 대한 고유 IDstart
: 액션(트리거) 실행을 시작한 시각(ms)end
:액션(트리거) 실행을 종료한 시각(ms)duration
: 액션(트리거) 실행에 소요된 시간(ms)response
: 액션(트리거) 실행 결과(상태). 액션(트리거) 실행에 대한 최종 리턴값은result
필드로 전달logs
: 사용자가 액션(트리거) 내에서 출력한 로그annotations
: 액션(트리거)과 관련된 정보publish
: 액션(트리거) 공유 여부
액션 실행 시 result
옵션을 사용하면 위 구성 항목 중 result
에 해당하는 정보만 반환됩니다.
메타 데이터
모든 액션에는 실행과 관련된 메타 데이터가 기본적으로 제공됩니다. 메타 데이터 예제 코드와 메타 데이터의 각 환경 변수에 대한 설명은 다음과 같습니다.
function main(params) {
return {
payload: {
namespace: process.env.__OW_NAMESPACE,
name: process.env.__OW_ACTION_NAME,
activation: process.env.__OW_ACTIVATION_ID,
deadline: process.env.__OW_DEADLINE
}
};
}
__OW_NAMESPACE
: 현재 실행 중인 액션의 실행 결과가 저장될 네임스페이스 정보__OW_ACTION_NAME
: 현재 실행 중인 액션의 전체 이름__OW_ACTIVATION_ID
: 현재 실행 중인 액션의 Activation ID__OW_DEADLINE
: 액션이 실행될 수 있는 최종 시간
트리거
트리거는 Cloud Functions에서 연동할 수 있는 클라우드 서비스나 외부 서비스의 이벤트를 통해 액션을 실행할 수 있는 이벤트 전달 객체를 의미합니다. 즉, 이벤트를 입력받는 채널로 사용되는 것이며 예컨대 다음과 같은 상황에 대해 트리거를 생성할 수 있습니다.
- 주소가 업데이트될 때
- 문서가 웹 사이트에 업로드될 때
- 이메일을 전송할 때
- GitHub 내 (저장된) 코드에 변경 사항이 발생했을 때
- 배포 작업이 종료됐을 때
- IoT 디바이스에서 이벤트가 발생했을 때
사용자가 등록한 이벤트가 발생할 경우 해당 이벤트에 따라 1개 이상의 액션을 병렬로 실행시킬 수 있으며, 트리거를 실행할 때 전달되는 이벤트의 데이터는 각 액션의 실행 파라미터로 전달됩니다.
네이버 클라우드 플랫폼 내부 또는 외부에서 발생한 이벤트들은 트리거를 통해 액션과 연결되며, 액션에서는 이러한 이벤트들에 응답하는 작업을 수행할 수 있습니다. 트리거와 액션을 연결하면 트리거 이벤트가 실행될 때마다 액션은 트리거의 이벤트 파라미터를 사용하여 함께 실행됩니다.
동일한 트리거이지만 여러 개의 다른 액션과 연결할 수도 있습니다. 시퀀스 액션도 연결이 가능합니다. 트리거는 패키지에 속할 수 없지만 패키지에 포함되어 있는 액션을 호출하는 것은 가능합니다.
트리거는 키-값(key-value) 쌍으로 이루어진 딕셔너리(Dictionary)를 사용하여 동작시킬 수 있습니다. 딕셔너리는 이벤트를 지칭하기도 합니다. 액션과 마찬가지로 하나의 트리거를 실행할 때마다 하나의 액티베이션이 생성되며, 액티베이션마다 고유한 ID를 가지기 때문에 Activation ID로 각각을 구분할 수 있습니다.