1-1. Modeling

Modeling에 필요한 Action과 Concept을 배우고 자동판매기 캡슐의 모델링을 완성해봅시다!

자동판매기 캡슐의 모델링을 해보자!

자동판매기 캡슐은 사용자가 ‘차가운 커피 뽑아줘’라고 말을 하였을 때, 음료에 대한 정보를 보여주는 캡슐입니다. '차가운'이라는 음료수 상태 정보'커피'라는 음료수 이름 정보를 받아서 음료수 정보를 사용자에게 보여주도록 모델링 해봅시다!

모델링은 사용자의 말을 받아 어떠한 행동을 해야하는 지에 대한 골격을 만드는 역할을 합니다. 모델링은 ActionConcept으로 구성이 되어있습니다. 이 페이지에서는 자동판매기 캡슐의 모델링을 완성해보면서 Action과 Concept에 대하 배워보도록 하겠습니다.

먼저, Bixby Studio 왼쪽의 네비게이션바를 보면 위의 이미지와 같은 화면을 보실 수 있습니다.

models 폴더 하위에 actions와 concepts 폴더가 위치해있고 그 아래에는 각각 ActionConcept 파일이 위치해있는 것을 확인하실 수 있습니다.

이 파일들을 하나씩 훑어보면서 action과 concept에 대하여 알아보도록 하겠습니다.

1. Concept

Concept은 발화에서 사용할 데이터 혹은 사용자에게 보여줄 데이터를 저장하는 타입을 뜻합니다.

Concept은 Primitive type과 Primitive type을 조합하여 복잡한 데이터를 저장할 수 있는 Structure type으로 구성됩니다. Primitive type의 종류는 boolean, decimal, enum, integer, name, qualified, text 등이 있습니다. 이 중에서 가장 자주 쓰이는 몇가지 컨셉 타입들을 설명드리겠습니다.

  • enum: 문자열을 저장하는 concept 중 하나이며, 저장하려는 데이터가 고정된 범위에 있는 경우 사용합니다. vocab 파일이 필수로 있어야 하며 이를 통하여 단어 학습을 합니다. ex) 광역시(광주, 대전, 대구등...)

  • name: 문자열을 저장하는 concept 중 하나이며, 저장하려는 데이터가 일정한 범위에 있는 경우 사용합니다. vocab 파일이 필수로 있어야 하지 않지만, 이를 통하여 폭 넓은 단어 학습을 할 수 있습니다. ex) 가게 이름, 커피 이 등

  • text: 문자열을 저장하는 concept 중 하나이며, 저장하려는 데이터가 enum과 name에 속하지 않는 경우 사용합니다. vocab 파일을 사용할 수 없으며, 트레이닝 데이터를 통하여 단어 학습을 진행합니다.

  • integer: 숫자를 저장하는 concept 중 하나이며, 정수 데이터를 저장할 때 사용됩니다.

  • 그 외, Primitive type의 종류는 여기서 확인하시기 바랍니다.

이제 기초적인 concept에 대해서 배우셨으니, 자동판매기 캡슐을 살펴보며 실제 concept이 어떻게 사용되는지를 알아보도록 하겠습니다. 아래의 코드는 음료수 데이터입니다. 이 데이터가 DB에 저장되어 있다고 가정하고 이번 모델링 파트를 진행하겠습니다.

// 음료수 데이터
{   
    name: "콜라",  
    price: "2000원",  
    status: ['차가운'],  
    url: "images/bixby_launcher.png"
}
// DrinkStatus.model.bxb
enum (DrinkStatus) {  
  symbol (따뜻한)
  symbol (차가운)
}

DrinkStatus concept은 enum 타입으로 되어있는 것을 확인할 수 있습니다. 자동판매기의 경우, 뜨거운 음료와 차가운 음료를 뽑을 수 있습니다. 사용자들은 자동판매기 캡슐을 사용하기 위하여 ‘차가운 커피’ 혹은 ‘뜨거운 콜라’와 같은 말을 할 수 있습니다. 여기에서 DrinkStatus concept은 '차가운'과 '뜨거운'이라는 고정된 범위의 데이터를 얻기위하여 enum 타입을 사용하였습니다.

// Result.model.bxb
structure (Result) {  
    property (name) {    
        type (DrinkName)    
        min (Required) max (One)  
    }  
    property (price) {    
        type (Price)    
        min (Required) max (One)  
    }  
    property (status) {    
        type (DrinkStatus)    
        min (Required) max (One)  
    }
}

Result는 사용자가 말한 음료수에 대한 정보를 저장하기 위한 concept입니다. Data의 구조에 맞게 구성하기 위하여 Structure type을 사용하였습니다. Result는 음료 이름, 가격 그리고 음료상태를 저장할 수 있습니다.

// Price.model.bxb
text (Price) {
}

Price는 가격 정보를 저장하기 위한 concept입니다. 숫자 정보를 담는 integer concept을 사용해도 되지만, 예제 데이터를 보시면 ‘2000원’과 같은 텍스트 데이터가 저장되기 때문에 text concept을 사용하였습니다.

현재 DrinkName.model.bxb 파일에는 아무것도 적혀있지 않습니다. 이 부분에 들어갈 concept 타입을 고민하시고 작성하여 주세요. 구성 방법은 'Price.model.bxb' 파일을 참조하여 주세요. * 음료수 "이름"의 문자열을 저장하기 때문에 문자열 타입 enum, name, text concept 중 알맞은 타입을 선택하여 사용하여 봅시다.

2. Action

Action은 사용자의 의도를 실행하기 위하여 캡슐에서 해야할 작동 방식을 정의합니다 . 음료수 정보를 알려주는 것 또는 커피를 주문하는 것 등의 캡슐 작동을 정의합니다.

OrderDrink.model.bxb 코드를 보면서 action에 대하여 배워보도록 하겠습니다.

// OrderDrink.model.bxb
action (OrderDrink) {
  type(Search)
  collect {
    input (status){
      type ( ) // type을 선택하여 채우세요.
      min (Optional) max (One)
    }
    input (name) {
      type (DrinkName)
      min (Required) max (One)
    }
  }
  output (){ // 알맞은 output concept을 채우세요.
    on-empty{
      halt{
        dialog{
          template ("말씀하신 음료는 현재 없습니다.")
        }
      }
    }
  }
}
action (OrderDrink) {
}

Action 옆에 적혀있는 OrderDrink는 action의 이름입니다. Action의 목적에 맞게 이름을 작성하시는 것이 중요합니다.

type(Search)

Type은 action의 행동 종류를 말합니다. Type에는 search, calculation, fetch등이 있습니다. Type을 설정하실 때에는 action의 실제 행동과 가장 적합한 것을 골라서 적어주시면 됩니다. Type을 설정하지 않으면, 기본적으로 search 타입으로 자동 지정이 됩니다. 이에 대한 자세한 내용은 여기를 참조하세요.

collect {  
    input (status){
      type ( ) // type을 선택하여 채우세요.
      min (Optional) max (One)
    }
    
    input (name) {    
        type (DrinkName)    
        min (Required) max (One)  
    }
}    

Collect는 사용자로부터 입력 받을 데이터를 선언하는 부분입니다. 일반적으로 사용자의 말에서 캡슐이 동작할 때 필요한 데이터를 input으로 선언합니다.

Input 괄호에 들어갈 것은 input명이며, type은 이 input에 들어오는 데이터를 저장할 concept의 이름을 적어주시면 됩니다. min, max는 이 input으로 들어오는 데이터가 action 실행에 꼭 필요한지, 한 개만 필요한지 또는 그 이상이 필요한지를 지정할 때 사용합니다.

Action에 사용된 Type은 총 2가지 입니다. 하나는 action의 행동 종류를 지정하는 type이고 다른 하나는 input 데이터의 concept을 지정하는 type입니다.

output (){ // 알맞은 output concept을 채우세요.
}

Output action의 결과를 어떤 concept에 저장할 것인지를 선언하는 부분입니다. Action의 행동 결과를 저장할 concept의 이름을 적어주시면 됩니다.

on-empty{  
    halt{    
        dialog{      
            template ("말씀하신 음료는 현재 없습니다.")    
        }  
    }
}

On-empty부분은 action의 결과가 존재하지 않을때, 어떻게 행동할지에 대하여 선언하는 부분입니다. 이 부분에 대한 자세한 설명은 여기에서는 다루지 않겠습니다.

현재 OrderDrink.model.bxb 파일에는 input concept 하나가 완성되지 않았으, output이 비워져 있습니다. Action이 정상적으로 동작할 수 있도록 빈 곳을 채워주세요. *음료수 상태를 받는 DrinkStatus concept과 결과를 반환해야하는 Result concept을 action에 채워봅시다.

후후.. 모델링은 캡슐 구현 4요소중에서 최약체지...

모델링 구현이 완성되셨다면, 모델링에서 받은 데이터를 실제로 처리하는 비즈니스 로직을 구현해봅시다.

Last updated