Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  1. 정의

...

NodeType에 종속되는 스키마이고 NodeType이 가지게 되는 트랜잭션이다. 여기서 말하는 트랜잭션이란 목록 조회, 상세 조회, 데이터 등록, 데이터 수정, 데이터 삭제 등을 말한다.

...

Event가 정의되면 솔루션 API 가 제공된다. (예시) /adm/[NodeType의 tid]/[Event의 event]

...

솔루션 관리자 UI 구성 시 Presentational Component 의 Button 사용이 달라진다.

  1. 속성정의

...

속성

...

필수

...

기본값

...

설명

...

event

...

필수

...

  1. Event의 ID 이므로 중복되어서는 안된다.

  2. 솔루션 API URL의 마지막 path 이다.

  3. 카멜 표기법을 기준으로한다.

...

name

...

필수

...

  1. Event 명

...

label

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

  2. 솔루션 관리자 UI 구성시 Button 명으로 사용된다.

...

eventType

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

“direct”

: Form 또는 List 형태의 페이지에서 사용할 때

“form”: Form 형태의 페이지에서 사용할 때

“link”: 단순 페이지 이동시

“view”: 조회 성격의 이벤트일 때(목록 조회, 상세 조회 등)

...

noneExecute

...

  1. 실제로 데이터를 업데이트하는 이벤트가 아니라 주로 조회만 하는 이벤트인 경우 true로 설정.

  2. true인 경우 트랜잭션 처리를 안하고 POST외에 GET으로도 이벤트 직접 호출 가능

...

enablePageTypes

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

“list” : List 형태의 페이지에서 사용할 때

“view” : Form 형태의 페이지에서 사용할 때

...

enableFormTypes

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

“createForm” : 등록 Form 페이지에서 사용할 때

“updateForm” : 수정 Form 페이지에서 사용할 때

“view” : 상세 Form 페이지에서 사용할 때

...

linkType

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

  2. 링크 유형을 정의한다.

  3. eventType이 link 일 때 적용된다.

“modal” : Modal을 호출한다.

“page” : 페이지 이동

“window” : 탭을 열어 페이지 이동

...

linkUrl

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

  2. 페이지 이동 url을 정의한다.

  3. eventType이 link 일 때 적용된다.

...

callbackLinkUrl

...

  1. 솔루션 관리자 UI 구성시에만 적용된다.

  2. 이벤트를 실행하고 이동할 url을 정의한다.

...

eventActions

...

EventAction 을 Array 로 정의

...

eventListeners

...

EventListeners 를 Array 로 정의

  1. 예시

  1. JSON

{

“typeId”: “nodeType”,

“parentId”: “root”,

“tid:”: “ctsBasAptM”,

“repositoryType”: “node”,

“typeName”: “공항기초”,

“historyable”: true,

“propertyTypes”: [],

“events: [

{

“event”: “list”,

“name”: “List”,

“label”: “목록”,

“noneExecute”: false,

“eventType”: “link”,

“enablePageTypes”: “createForm”,

“linkType”: “page”,

“linkUrl”: “/admin/custom/testBoard/list”

},

{

“event”: “create”,

“name”: “Create”,

“label”: “등록”,

“noneExecute”: false,

“eventType”: “form”,

“enablePageTypes”: “list”,

“enableFormTypes”: “createForm”,

“linkType”: “page”,

“linkUrl”: “/admin/custom/testBoard/createForm”,

“callbackLinkUrl”: “/admin/custom/testBoard/list”

}

]

}

  1. Schema Event Action

    1. 정의

  1. Event 에 종속되는 스키마이고 Event가 가지게 되는 작업이다.

  2. 하나의 Event는 여러 개의 Event Action 을 가질 수 있다.

  1. 속성정의

...

속성

...

필수

...

기본값

...

설명

...

action

...

필수

...

  1. Event Action의 ID 이므로 중복되어서는 안된다.

  2. 카멜 표기법을 기준으로한다.

...

actionType

...

필수

...

  1. Event Action의 유형을 정의한다.

“service” : Java Class 와 바인딩

“update” : DBMS INSERT, UPDATE, DELETE Query 실행

“select” : DBMS SELECT Query 실행

“call” : DBMS Function 실행

...

datasource

...

  1. 사용할 dabasource

...

beforeAction

...

  1. true 이면 데이터 저장 전에 실행하는 action, validation 같은 용도로 활용한다.

  2. false 이면 데이터 저장 이후에 실행되는 action

...

actionBody

...

필수

...

  1. actionType의 정의에 따라 입력방식이 달라진다.

  2. actionType = “service” 일 경우

[Class annotation의 Service명].[메소드명]

  1. actionType = “update” 일 경우

DBMS INSERT, UPDATE, DELETE Query 를 입력한다.

파라미터는 {{:파라미터명}} 으로 받을수 있다.

예시)

/[NodeType의 tid]/[Event의 event]?userId=1234

SELECT * FROM user WHERE id = {{:userId}}

  1. actionType = “select” 일 경우

DBMS SELECT Query 를 입력한다. 파라미터 바인딩 방식은 actionType이 “update” 일 경우와 같다.

  1. actionType = “call” 일 경우

DBMS의 Function을 입력한다.

...

orderNo

...

  1. Event 실행시 Event Action 들이 순차적으로 실행되는 순서

  1. 예시

  1. JSON

{

“typeId”: “nodeType”,

“parentId”: “root”,

“tid:”: “ctsBasAptM”,

“repositoryType”: “node”,

“typeName”: “공항기초”,

“historyable”: true,

“propertyTypes”: [],

“events: [

{

“event”: “list”,

“name”: “List”,

“label”: “목록”,

“noneExecute”: false,

“eventType”: “link”,

“enablePageTypes”: “createForm”,

“linkType”: “page”,

“linkUrl”: “/admin/custom/testBoard/list”,

“eventActions”: [

{

“action”: “listAction”,

“actionType”: “select”,

“datasource”: “test”,

“beforeAction”: false,

“actionBody”: “SELECT * FROM ctsBasAptM”,

“orderNo”: 1

}

]

},

{

“event”: “create”,

“name”: “Create”,

“label”: “등록”,

“noneExecute”: false,

“eventType”: “form”,

“enablePageTypes”: “list”,

“enableFormTypes”: “createForm”,

“linkType”: “page”,

“linkUrl”: “/admin/custom/testBoard/createForm”,

“callbackLinkUrl”: “/admin/custom/testBoard/list”,

“eventActions”: [

{

“action”: “createAction”,

“actionType”: “service”,

“datasource”: “”,

“beforeAction”: false,

“actionBody”: “contestService.create”,

“orderNo”: 1

}

]

}

]

...

이벤트(Event)

특정 노드 타입에서 실행되는 프로세스를 이벤트로 표현합니다. 이벤트는 Create, Update, Delete, Read, List와 같이 기본적으로 제공하는 기본 이벤트와 productList, cartProductList와 같이 특정 로직을 이용하여 조회하는 Query형 이벤트, addCart, addWish 등과 같이 특정 로직을 수행하는 Command형 이벤트로 구분합니다.

주요 속성

이벤트의 주요 속성은 다음과 같습니다.

pid

valueType

config

description

tid

PARENT

idable=true
referenceType= nodeType

해당 노드타입 아이디

event

STRING

idable=true

해당 이벤트를 표현하는 이벤트 아이디를 지정합니다.
ex) create, order

name

STRING

labelable=true

이벤트 명칭

eventType

CODE

Direct Execute, Has Form,
Link Page

이벤트 유형을 지정합니다.
Direct Execute : 바로 실행 가능한 이벤트
Has Form : create, update와 같이 폼에서 실행 가능한 이벤트
Link Page : 특정 페이지로 이동하기 위한 이벤트

trace

BOOLEAN

추적 기능 활성화 여부 설정합니다. trace 기능이 활성화 되면 별도의 로그로 저장됩니다.

noneExecute

BOOLEAN

실제 데이터를 조작하는 Comman형 여부를 체크합니다.

compensatingEvent

REFERENCE

해당 이벤트 실행에 에러가 발생하는 경우 보상으로 실행할 이벤트 지정

UI 관련 속성

Backoffice에서 이벤트를 처리하기 위한 주요 속성은 다음과 같습니다.

pid

valueType

config

description

buttonLabel

STRING

UI에서 보이는 명칭을 지정

enablePageTypes

CODES

List Page,
View Page, Create Form, Update Form, Search

노출 가능한 페이지 유형을 지정

linkType

CODE

Modal,
Page,
Window

링크 이벤트인 경우 링크에 대한 유형을 지정
Modal : Modal 팝업으로 링크
Page : 현재 페이지 전환
Window : 새창으로 링크

linkUrl

STRING

링크 이벤트인 경우 해당 링크 URL을 지정합니다.

linkUrlParams

STRING

링크 이벤트인 경우 해당 링크에 필요한 파라미터를 지정합니다. 이때 EL을 사용가능합니다. ex) id={{:id}}

callbackLinkType

CODE

Page,
Page In Component, Page In Modal

해당 이벤트 실행 후에 이동할 링크 유형을 지정합니다.
Page : 특정 페이지로 이동
Page In Component : 실행한 컴포넌트 내에서의 페이지 이동
Page In Modal : Modal 안에서 페이지 이동

callbackLinkUrl

STRING

콜백 페이지 이동에 필요한 URL을 정의합니다.

noneExecute

BOOLEAN

실제 데이터를 조작하는 Comman형 여부를 체크합니다.

option

PARTS

Validation, UI 옵션 등의 추가 옵션을 설정합니다.

enableCondition

PARTS

해당 이벤트의 활성화 여부에 대한 조건을 설정합니다.
ex) key:session.role, value:admin → 사용자의 롤이 admin일 경우만 해당 속성 활성화

이벤트 액션(EventAction)

ICE 에서는 특정 이벤트가 발생하였을때, 해당 노드타입내에서 트랜잭션에 묶여서 순차적으로 실행되는 것을 이벤트 액션으로 정의합니다.

주요 속성

pid

valueType

config

description

action

STRING

액션의 아이디

actionType

CODE

Service, Update,
Select,
Call,
API,
Process

이벤트 액션의 유형을 정의합니다.
Service : Java로 정의된 특정 서비스의 메소드를 실행
Update : DB의 Insert/Update 구문 실행
Select : DB의 Select 구문 실행
Call : DB의 CallableStatement 실행
API : 특정 API 실행
Process : 프로세스 빌더로 작성된 프로세스 실행

datasource

REFERENCE

referenceType=datasource

해당 Action에서 사용되는 Datasource를 선택

beforeAction

BOOLEAN

추가적인 Validation이나 기본값 처리와 같은 실제 이벤트가 실행되기 전에 필요한 전처리 작업 여부를 지정합니다.

actionBody

STRING

Action 실행에 필요한 구문을 해당 actionType에 맞춰서 지정합니다.
ex) service의 경우 : nodeTypeService.storeJson
update의 경우 : insert into nodeType (id, name) values({{:id}}, {{:name}})

orderNo

INT

액션 실행 순서를 정의


이벤트 리스너(EventListener)

ICE에서 특정 이벤트가 발생하였을때, 해당 이벤트에 대한 비동기 처리를 실행하는 것을 이벤트 리스너로 정의합니다.

주요 속성

pid

valueType

config

description

tid

PARENT

referenceType=nodeType

이벤트 리스터가 실행될 노드타입을 지정합니다. 해당 노드타입이 다른 마이크로서비스에 속해있으면 메세지 큐를 이용하여 전달합니다.

actionType

CODE

Service, Update,
Call,
Process

이벤트 리스너의 실행 유형을 정의합니다.
Service : Java로 정의된 특정 서비스의 메소드를 실행
Update : DB의 Insert/Update 구문 실행
Call : DB의 CallableStatement 실행
Process : 프로세스 빌더로 작성된 프로세스 실행

datasource

REFERENCE

referenceType=datasource

해당 Action에서 사용되는 Datasource를 선택

executeType

CODE

Single Server, All Server

Single Server : 해당 마이크로서비스의 서버중에서 하나의 서버에서만 실행
All Server : 해당 마이크로서비스 서버 모두에서 실행 ex) 캐시 삭제, 로그 정리 등

actionBody

STRING

Action 실행에 필요한 구문을 해당 actionType에 맞춰서 지정합니다.
ex) service의 경우 : nodeTypeService.storeJson
update의 경우 : insert into nodeType (id, name) values({{:id}}, {{:name}})

이벤트 트랜잭션 프로세스

ICE4에서 이벤트 처리는 동기화하여 트랜잭션을 처리하는 EventAction과 비동기로 분산처리를 지원하는 EventListener 2가지 기능을 상황에 맞춰서 구현해야 합니다.

...