Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

노드타입은 컨텐츠의 entity를 나타내고 있으며, 저장소 유형, 히스토리와 같은 주요 기능에 대한 설정 기능을 제공합니다.

저장소 유형(repositoryType)

노드를 저장하기 위해서 사용하는 저장소에 따라서 저장소 유형을 지정할 수 있습니다.

Node 저장소 

Node 저장소는 내부적으로 오픈소스 DataGrid인 Infinispan(http://infinispan.org/)을 이용하여 저장합니다. 설정한 노드 타입별로 Infinispan 저장소를 가지게 되며 각 노드타입은 기본적으로 파일을 이용하여 데이터를 저장하고 있으며, eviction 설정에 따라서 메모리에 적재하여 성능을 보장합니다. 또한, Infinispan에서 지원하는 Lucene기반의  Hibernate Search를 이용하여 인덱싱 및 쿼리를 지원합니다.Node 저장소와 관련된 노드타입 속성은 다음과 같습니다.

...

Group 유형

Group 저장소 유형은 저장소 유형이 Node인 다수의 노드 타입의 검색이나 참조를 위해서 대표 노드 타입을 이용하여 인덱싱 및 쿼리를 제공합니다. 이때, Group에 속한 개별 노드타입은 indexGroup에 해당 Group 노드 타입을 지정하여야 합니다.

Data 저장소

Data 저장소는 노드타입 스키마-SQL 매핑을 통하여 DB에 저장하며 현재는 MySQL, Maria, MS-SQL, Oracle을 지원합니다.Data 저장소를 이용하기 위해서는 다음과 같이 datasourcetableName을 정의해야 합니다. 그러면, ICE에서는 데이터 저장시에 DB 테이블 스키마를 조회하여 CRUD 쿼리를 자동 생성하고 실행하게 됩니다. Node 저장소를 사용하는 경우에 datasourcetableName를 정의하면 

...

Logic 유형

repositoryType을 logic으로 설정하고, serviceName을 SpringBoot 기반으로 LogicRepository를 implement하도록 개발된 서비스 명칭으로 설정하면 기본적인 CRUD 및 list API 호출시에 해당 서비스를 호출하여 처리합니다.LogicRepository 인터페이스는 다음과 같습니다.

Code Block
languagejava
titleLogicRepository
collapsetrue
package net.ion.ice.core.logic;

import net.ion.ice.core.context.QueryContext;
import net.ion.ice.core.node.Node;

import java.util.List;
import java.util.Map;

public interface LogicRepository {
    List<Map<String, Object>> list(QueryContext context);
    Map<String, Object> read(String id);
    int create(Node node);
    int update(Node node);
    int delete(String id);
}

ServiceGroup

해당 노드타입이 제공하는 microservice를 지정합니다.

History 제공 (historyable)

특정 노드타입의 히스토리 관리 기능을 제공하고 싶은 경우 historyable 속성을 true로 설정하여야 합니다. 

히스토리 저장

히스토리 제공 노드타입(historyable=true)의 노드에 event가 발생하여 데이터가 변경되면 신규 히스토리 버전이 생성 및 저장됩니다. 각 히스토리는 다음과 같은 항목으로 이루어져 있습니다

  • historyId : 히스토리 ID 값 - 해당 노드의 ID + _ + 버전 으로 구성
  • id : 노드의 아이디
  • event : 데이터 변경이 발생한 이벤트
  • triggerEvent : 다른 이벤트 실행 과정에서 해당 이벤트를 발생시킨경우에 이전 이벤트를 표시
  • version : 해당 히스토리 버전
  • modifier : 해당 히스토리 발생 유저
  • changed : 해당 히스토리 생성 일시
  • changes : 변경 내역
  • properties : 해당 버전의 데이터

히스토리 조회

생성된 히스토리를 조회하기 위해서는 다음과 같은 형식의 API를 호출해야 합니다. /adm/{{:typeId}}/history?id={{:id}}이렇게 호출된 API 결과는 다음과 같습니다.

Code Block
languagejs
titlehistory sample
collapsetrue
    "items": [
	     {
            "historyId": "test2_4",
            "id": "test2",
            "event": "update",
            "triggerEvent": "rollback",
            "version": 4,
            "modifier": "system",
            "changed": "20180724184414",
            "changes": {
                "categoryName": {
                    "en": "Test2"
                },
                "created": "2018-07-24T09:44:14.000+0000",
                "changed": "2018-07-24T09:44:14.000+0000",
                "testPt": "test"
            },
            "properties": {
                "created": "2018-07-24T09:44:14.000+0000",
                "changed": "2018-07-24T09:44:14.000+0000",
                "categoryName": {
                    "en": "Test2-1"
                },
                "testPt": "test2",
                "parentCategory": "test1",
                "categoryId": "test2",
                "orderNo": null,
                "categoryType": "content",
                "itemViews": null,
                "owner": "system",
                "authority": "system"
            }
        },
        {
            "historyId": "test2_3",
            "id": "test2",
            "event": "update",
            "triggerEvent": null,
            "version": 3,
            "modifier": "system",
            "changed": "20180724184433",
            "changes": {
                "categoryName": {
                    "en": "Test2-1"
                },
                "testPt": "test2"
            },
            "properties": {
                "categoryName": {
                    "en": "Test2-1"
                },
                "testPt": "test2",
                "parentCategory": "test1",
                "categoryId": "test2",
                "orderNo": null,
                "categoryType": "content",
                "itemViews": null,
                "created": "2018-07-24T09:44:14.000+0000",
                "owner": "system",
                "changed": "2018-07-24T09:44:14.000+0000",
                "authority": "system"
            }
        },
        {
            "historyId": "test2_2",
            "id": "test2",
            "event": "update",
            "triggerEvent": null,
            "version": 2,
            "modifier": "system",
            "changed": "20180724184426",
            "changes": {
                "testPt": "test"
            },
            "properties": {
                "testPt": "test",
                "parentCategory": "test1",
                "categoryName": {
                    "en": "Test2"
                },
                "categoryId": "test2",
                "orderNo": null,
                "categoryType": "content",
                "itemViews": null,
                "created": "2018-07-24T09:44:14.000+0000",
                "owner": "system",
                "changed": "2018-07-24T09:44:14.000+0000",
                "authority": "system"
            }
        },
        {
            "historyId": "test2_1",
            "id": "test2",
            "event": "create",
            "triggerEvent": null,
            "version": 1,
            "modifier": "system",
            "changed": "20180724184414",
            "changes": {
                "parentCategory": "test1",
                "categoryName": {
                    "en": "Test2"
                },
                "categoryId": "test2",
                "orderNo": null,
                "categoryType": "content",
                "itemViews": null,
                "created": "2018-07-24T09:44:14.000+0000",
                "owner": "system",
                "changed": "2018-07-24T09:44:14.000+0000",
                "authority": "system"
            },
            "properties": {
                "parentCategory": "test1",
                "categoryName": {
                    "en": "Test2"
                },
                "categoryId": "test2",
                "orderNo": null,
                "categoryType": "content",
                "itemViews": null,
                "created": "2018-07-24T09:44:14.000+0000",
                "owner": "system",
                "changed": "2018-07-24T09:44:14.000+0000",
                "authority": "system"
            }
        }
    ]

히스토리 롤백

과거 히스토리 버전으로의 롤백은 다음과 같은 형식의 API를 호출하면 됩니다.  /adm/{{:typeId}}/rollback?id={{:id}}&version={{:version}}

...

PropertyType

...

Event

...

API

...

Child pages (Children Display)