NodeType
노드타입 (NodeType)
노드타입은 스키마의 entity를 나타내고 있으며, 스키마 설계시 기본이 되고 필수적으로 정의되어야 합니다. 노드타입은 하위로 메타데이터 속성을 정의하는 프로퍼티 타입과 로직을 처리하는 이벤트로 구성되어 있습니다.
저장소 유형(repositoryType)
repositoryType에 따라서 Infinispan 저장소로 사용할 수도 있고 RDBMS의 테이블과 바인딩 하여 사용할 수도 있습니다.
Node 저장소
Node 저장소는 내부적으로 오픈소스 DataGrid인 Infinispan(http://infinispan.org/)을 이용하여 저장합니다. 설정한 노드 타입별로 Infinispan 저장소를 가지게 되며 각 노드타입은 기본적으로 파일을 이용하여 데이터를 저장하고 있으며, eviction 설정에 따라서 메모리에 적재하여 성능을 보장합니다. 또한, Infinispan에서 지원하는 Lucene기반의 Hibernate Search를 이용하여 인덱싱 및 쿼리를 지원합니다.
Node 저장소와 관련된 노드타입 속성은 다음과 같습니다.
pid | valueType | config | description |
---|---|---|---|
eviction | INT | 메모리 적재 데이터 건수 지정(기본값 10,000), 해당 노드타입의 데이터가 eviction을 초과하면 eviction 사이즈 만큼만 메모리에 적재되고 나머지는 필요시마다 파일을 저장소에서 읽어서 메모리에 적재합니다. 이때, 신규 메모리 적재를 위해서 기존 메모리에 있던 데이터 중에서 LRU 정책에 따라서 사용빈도가 낮은 데이터를 메모리에서 삭제하게 됩니다. | |
standaloneIndex | BOOLEAN |
| 단독 저장 파일 및 인덱싱 사용 여부를 정의합니다. 대량의 데이터가 저장되는 노드타입과 Facetable이나 Sortalbe을 추가로 필요로하는 노드타입은 단독 인덱싱을 사용하여야 합니다. |
targetGroup | REFERENCE | referenceType=nodeType | 만약 해당 노드타입이 특정 Group 노드타입에 소속인 경우에 group 노드타입의 아이디를 설정해야 합니다. |
Local 저장소
Local 저장소는 Node 저장소와 동일하게 Infinispan 저장소를 이용하여 저장합니다. Node 저장소와의 다른 부분은 서버간의 데이터 동기화 없이 해당 서버에만 저장한다는 점입니다. 일반적으로 Local 저장소는 로그와 같이 대량의 데이터가 생성되고, 나중에 분석하는 경우에 사용됩니다.
Group 유형
Group 저장소 유형은 저장소 유형이 Node인 다수의 노드 타입의 검색이나 참조를 위해서 대표 노드 타입을 이용하여 인덱싱 및 쿼리를 제공합니다. 이때, Group에 속한 개별 노드타입은 targetGroup에 해당 Group 노드 타입을 지정하여야 합니다.
pid | valueType | config | description |
---|---|---|---|
groupType | CODE | code= | 그룹 노드타입의 인덱싱 유형을 지정합니다. |
Data 저장소
Data 저장소는 노드타입 스키마-SQL 매핑을 통하여 DB에 저장하며 현재는 MySQL, Maria, MS-SQL, Oracle, DB2를 지원합니다.
Data 저장소를 이용하기 위해서는 다음과 같이 datasource와 tableName을 정의해야 합니다. 그러면, ICE에서는 데이터 저장시에 DB 테이블 스키마를 조회하여 CRUD 쿼리를 자동 생성하고 실행하게 됩니다. Node 저장소를 사용하는 경우에 datasource와 tableName를 정의하면 Infinispan 저장소와 DB 저장소를 동시에 지원하게 됩니다.
pid | valueType | config | description |
---|---|---|---|
datasource | REFERENCE | referenceType=datasource | 데이터를 저장하기 위한 DB 커넥션 정보를 정의하는 datasource 노드타입을 지정합니다. |
tableName | STRING | datasource로 지정된 DB에 해당 노드타입과 연관된 테이블 명을 저장합니다 | |
useJoin | BOOLEAN |
| Join 기능 사용여부를 지정합니다. |
joinTable | STRING |
| Join을 사용하는 경우 Join할 대상 테이블을 지정합니다. |
joinColumn | STRING |
| Join에 사용할 컬럼명을 지정합니다. |
joinQuery | STRING |
| 자동 쿼리 생성 기능으로 Join쿼리를 만들 수 없는 경우에 사용할 Join 쿼리를 직접 정의합니다. |
Logic 유형
repositoryType을 logic으로 설정하고, serviceName을 SpringBoot 기반으로 LogicRepository를 implement하도록 개발된 서비스 명칭으로 설정하면 기본적인 CRUD 및 list API 호출시에 해당 서비스를 호출하여 처리합니다.
LogicRepository 인터페이스는 다음과 같습니다.
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);
}
|
주요 속성
저장소 유형(Repository Type)과 관련된 속성 이외의 주요 속성은 다음과 같습니다.
pid | valueType | config | description |
---|---|---|---|
microservice | REFERENCE | referenceType=nodeType | 해당 노드타입이 소속된 마이크로서비스를 지정합니다. |
i18n | BOOLEAN |
| 해당 노드타입의 다국어 처리 지원 여부를 지정합니다. |
historyable | BOOLEAN |
| 해당 노드타입의 히스토리 처리 지원 여부를 지정합니다. |
uniqueFields | STRING |
| 자동 생성 아이디를 가진 노드타입의 스키마 로딩 기능을 이용하기 위하여 아이디 필드 이외에 유니크한 필드를 정의 |
authorityRule | CODE | code= | 권한 자동 생성에 관련된 룰을 정의합니다. |
filter | STRING |
| 해당 노드타입의 데이터 조회 API 제공시 기본적으로 적용되는 검색 조건을 정의합니다. |
jsonStore | BOOLEAN |
| 해당 노드타입의 JSON 저장 기능 지원 여부를 정의합니다. |
statistic | BOOLEAN |
| 해당 노드타입의 통계 분석 기능 지원 여부를 정의합니다. |
trace | BOOLEAN |
| 해당 노드타입의 추적 기능 지원 여부를 정의합니다. |
workflow | REFERENCE |
| 해당 노드타입의 워크플로우를 지정합니다. |
노드 저장 프로세스
Cache 동기화 프로세스