IDL/Programming

IDL Task 소개 (Part 2)

이상우_idl 2018. 5. 10. 23:30
728x90
반응형

(지난 회차에서 이어집니다)


그러면, 오늘은 먼저 지난 회차 게시물에서 언급되었던 my_calc_task.task라는 파일에 관하여 좀 더 자세히 살펴보겠습니다. 이미 언급했듯이 이 파일의 내용은 JSON 형식을 따르도록 되어 있습니다. 그리고 그 내용을 보면 섹션별로 역할이 구분이 되어 있습니다. 기본적으로는 태스크키(Task Keys)에 해당되는 부분이 가장 앞에 위치하고, 그 뒤에 파라미터키(Parameter Keys)에 해당되는 부분들이 이어지는 구조입니다. 실제로 이 파일의 내용은 다음과 같습니다.


{

  "name": "my_calc_task",

  "base_class": "IDLTaskFromProcedure",

  "schema": "idltask_1.0",

  "routine": "my_calc_task",

  "display_name": "My Calculation Task",

  "description": "A task for my custom calculation.",

  "parameters": [

    {

      "name": "a",

      "direction": "input",

      "type": "float",

      "display_name": "A",

      "required": true,

      "description": "The first value for my calculation."

    },

    {

      "name": "b",

      "direction": "input",

      "type": "float",

      "display_name": "B",

      "required": true,

      "description": "The second value for my calculation."

    },

    {

      "name": "result",

      "direction": "output",

      "type": "float",

      "display_name": "Result",

      "required": true,

      "description": "The result of for my calculation."

    }

  ]

}


여기서 전반부에 붉은색으로 표시된 부분이 태스크키(Task Key)에 해당됩니다. 여기서는 name, base_class, schema, routine, display_name, description, parameters 등 총 7개의 세부항목들이 명시되어 있습니다. 이러한 세부항목 하나하나는 key-value의 쌍으로 존재하는 형태입니다. 예를 들어 name은 키(key)에 해당되고 "my_calc_task"는 이 키에 대응되는 값(value)입니다. 이렇게 key-value의 쌍으로 구성되는 자료의 형태를 딕셔너리(Dictionary, 사전) 자료형이라고 부르는데, 실제로 많은 프로그래밍 언어들이 이러한 형태의 자료형(data type)을 지원합니다. IDL에서도 이러한 범주에 해당되는 해쉬(Hash)라는 자료형이 이미 지원되고 있습니다. 그래서 JSON 형식의 파일도 그 안에 포함된 실제 내용은 딕셔너리(Dictionary) 형태의 key-value 형식을 따르도록 구성된다고 보시면 됩니다.


잠깐 얘기가 옆으로 샌 느낌이 있는데, 어쨌든 태스크키(Task Keys) 부분에서 구체적으로 어떤 항목들이 명시되어야 하며 각각의 의미가 무엇인가에 대해서는 IDL 도움말에서 Environment -> IDL Tasks -> Custom IDL Tasks -> Task Definitions 섹션의 첫번째 테이블에 자세히 소개되어 있습니다. 이 테이블의 모습은 다음과 같습니다.



이 테이블에서는 각 키의 명칭과 세부 설명이 첫번째 및 세번째 컬럼에 나와있습니다. 그리고 두번째 컬럼은 Required라고 되어 있는데,해당 키를 필수적으로 명시해야 하는가의 여부가 Yes 또는 No로 구분되어 있습니다. 통상적으로는 모든 종류의 키들을 명시하는 것이 좋겠지만, 필요에 따라서는 Required가 No인 것들은 생략할 수도 있습니다. 이 테이블에 있는 내용을 제가 굳이 여기서 모두 일일이 소개할 필요까지는 없을 것 같습니다. 다만 핵심적인 사항들만 골라서 다음과 같이 정리해보았습니다.


1) name과 routine 키에 대응되는 문자값은 서로 같아야 합니다. 둘 다 결국은 태스크를 정의하는 소스코드의 이름과 동일해야 하기 때문입니다.

2) base_class 키에 대응되는 문자값은 항상 "IDLTaskfromProcedure"가 되어야 한다고 보면 됩니다.

3) schema 키에 대응되는 문자값은 .task 파일의 형식에 대한 버전(version) 이름이라고 보면 됩니다. IDL 8.5.2에서는 "idltask_1.0"이었고 IDL 8.7에서는 "idltask_1.1"이 되었습니다. 물론 이 값은 미래에 나올 다음 버전의 IDL(8.8? or 9.0?)에서는 또 변경될 수도 있습니다. 하지만 적어도 현 시점에서는(IDL 8.7 기준)의 어떤 버전의 task definition에 맞춰서 .task 파일의 내용을 작성했느냐에 따라 이 값을 반드시 "idltask_1.0" 또는 "idltask_1.1"이라고 명시해야 합니다. 사실 1.0과 1.1 사이의 차이는 revision이라는 키가 추가되었다는 차이 뿐입니다. 두 버전 사이의 차이에 대해서는 IDL 도움말에서 Environment -> IDL Tasks -> Task Schema History 섹션의 내용을 참조하면 됩니다.

4) display_name과 description 키는 그냥 설명용 주석 정도의 의미를 갖는다고 보면 됩니다.


그리고 parameters라는 키가 등장하는데, 이 키는 따로 설명해야 할 것 같습니다. 이 키에 대한 설명을 보면 "A LIST of HASHs"라고 되어 있습니다. 즉 IDL의 HASH라는 자료형의 값들 여러 개가 모여 있는 LIST라는 자료형의 데이터가 parameters 키에 대응되어야 한다는 의미입니다. 실제로 .task 파일의 내용에서 parameters 키에 대응된 내용을 보면 큰 꺽쇠괄호([])안에 집합괄호({})로 묶인 여러 항목들이 보입니다. 꺽쇠괄호는 LIST에 해당되고 집합괄호는 HASH에 해당됩니다. 그리고 각각의 HASH는 이 태스크에서 정의되는 각각의 인자에 대응됩니다. 우리가 지금 다루고 있는 .task 파일의 전체 내용에서 예를 들어 다음과 같이 붉은색으로 표시된 부분을 봅시다.


{

  "name": "my_calc_task",

  "base_class": "IDLTaskFromProcedure",

  "schema": "idltask_1.0",

  "routine": "my_calc_task",

  "display_name": "My Calculation Task",

  "description": "A task for my custom calculation.",

  "parameters": [

    {

      "name": "a",

      "direction": "input",

      "type": "float",

      "display_name": "A",

      "required": true,

      "description": "The first value for my calculation."

    },

    {

      "name": "b",

      "direction": "input",

      "type": "float",

      "display_name": "B",

      "required": true,

      "description": "The second value for my calculation."

    },

    {

      "name": "result",

      "direction": "output",

      "type": "float",

      "display_name": "Result",

      "required": true,

      "description": "The result of for my calculation."

    }

  ]

}


이 부분은 첫번째 인자인 a에 해당되는 세부 내용들입니다. 태스크에서 정의되어 사용되는 모든 인자들에 대하여 이와 같은 형식의 내용이 명시되어야 합니다. 이 내용은 파라미터키(Parameter Key)에 해당되는데, 구체적으로 어떤 항목들이 명시되어야 하며 각각의 의미가 무엇인가에 대해서는 IDL 도움말에서 Environment -> IDL Tasks -> Custom IDL Tasks -> Task Definitions 섹션의 두번째 테이블에 자세히 소개되어 있습니다. 이 테이블은 좀 길어서 제가 여기에 따로 삽입하지는 않겠습니다. 다만 주요 항목들에 대한 핵심적인 사항들만 정리해보면 다음과 같습니다.


1) name키에 대응되는 문자값은 인자의 이름이며, 소스코드에서 정의된 이름과 동일해야 합니다.

2) direction 키에 대응되는 문자값은 인자가 입력용(input)인지 출력용(output)인지를 나타냅니다.

3) type 키에 대응되는 문자값은 인자값의 자료형(data type)을 나타냅니다. 예를 들어 실수일 경우 "float" 정수일 경우 "integer"가 됩니다.

4) required 키에 대응되는 값은 해당 인자가 필수적으로 사용되어야 하는가 여부를 나타내는 true 또는 false의 논리값이 됩니다.

5) display_name과 description 키의 내용은 그냥 설명용 주석 정도의 의미를 갖는다고 보면 됩니다.


따라서 이 내용을 참조하면, 나머지 인자들에 해당되는 내용에 대해서도 이해가 가능합니다. 즉 인자 b에 관한 내용은 인자 a에 관한 내용과 거의 유사합니다. 그러나 인자 result의 경우는 계산의 결과값을 담는다는 특성상 direction 키의 값이 "output"으로 설정되어 있습니다. 그리고 결과값을 담는 인자로서의 역할을 반드시 해야하기 때문에 required 키의 값이 true로 설정되어 있습니다.


그래서 이와 같은 형식의 내용을 담는 .task 파일이 .pro 파일과 공존해야만 태스크(task)로서의 역할을 제대로 수행할 수 있습니다. 그리고 .task 파일의 내용은 태스크키(Task Key)에 해당되는 부분과 파라미터키(Parameter Key)에 해당되는 부분으로 나눌 수 있는데,파라미터키에 해당되는 부분들의 갯수는 태스크에서 사용되는 인자의 갯수와 같습니다. 그리고 태스크에서 사용되는 인자들은 소스코드인 .pro 파일에서는 키워드(keyword)의 형태로 정의되고 .task 파일에서는 파라미터(parameter)의 형태로 명시됩니다. 물론 두 파일의 인자 정의 내용은 서로 맞아야 합니다. 지금의 예제에서는 a, b, result 등 세개의 인자들이 사용되고 있기 때문에, 이 인자들에 대한 정의 내용이 .pro 및 .task 파일 사이에서 서로 맞아떨어져야 한다는 점을 반드시 유념해야 합니다.


그래서 이런 방식으로 .pro 및 task 파일을 작성하고 서로간의 일관성을 유지하게 해야 한다는 점 등이 아무래도 좀 익숙하지 않고 복잡해 보일 수도 있겠지만, 또 한편으로는 기본적인 틀을 그대로 사용하고 규칙을 따라준다면 크게 어려운 내용은 아니지않나 생각도 됩니다. 그리고 .task 파일의 내용에 대한 이와 같은 형식은 어떤 버전의 IDL을 기반으로 하느냐에 따라 조금씩 다릅니다. 실제로 IDL Task의 개념이 처음 도입되었던 8.5.2 버전 당시의 형식 기준과 현재 8.7 버전에서의 그것은 또 다릅니다. 물론 차후에 출시될 IDL에서도 달라질 가능성은 충분히 있습니다. 하지만 앞서 언급했던 schema 키에 버전이름 값을 제대로 명시해주고, 그 버전에 맞는 형식으로 .task 파일을 구성하면 된다는 점만 잘 염두에 두면 될 것 같습니다. 물론 이를 위해서는 IDL 도움말에서 IDL Task에 관한 내용을 잘 참조하는 것도 중요합니다.


이상 오늘은 .task 파일의 형식과 내용에 관한 소개를 해보았습니다. IDL Task에 관한 내용은 후속 게시물에서 계속 이어나갈 예정입니다. 아마도 다음 회차에서는 이와 같이 완성된 태스크 파일들을 설치하여 라이브러리처럼 활용하는 방법을 비롯하여 이와 연관된 이슈들을 함께 언급하게 될 것 같습니다.

반응형