필수 속성과 검증 시점
필수 속성(Required property)은 값이 null이면 안 되는 객체 유형(Object type)의 속성입니다. 배열은 기본적으로 적어도 한 원소가 있어야 합니다. Object Storage V2에서 지원하며 기반 데이터와 액션(Action)의 편집에 검증을 적용합니다.
이 필수 조건은 인터페이스의 필수 매핑과 다릅니다. 인터페이스는 구현할 속성의 매핑을 요구하고, 여기에서는 속성값을 검사합니다.
설정과 인덱싱
Ontology Manager에서 기존 속성을 열거나 Create Property로 새 이름, 자료형과 설명을 입력합니다. Configuration의 Required를 켜고 Save한 뒤 재인덱싱 결과를 확인합니다.
기반 열에 null이 있어도 온톨로지 정의 저장 자체는 성공할 수 있습니다. 실제 값 검사는 인덱싱 때 수행하므로 재인덱싱이 실패합니다. 입력 열의 null을 해결하거나 업무 요구에 맞지 않는 필수 설정을 해제해야 합니다.
액션이 null이나 허용하지 않는 빈 배열을 쓰려고 하면 적용 시 검증에 실패합니다.
빈 배열을 허용하는 필수 속성
필수 배열에 빈 배열을 허용하도록 설정할 수 있습니다. 이 경우 null은 거절하지만 []는 허용합니다. 강제적 접근 통제 속성처럼 값은 존재해야 하지만 빈 표지 목록을 허용하는 구성에 사용할 수 있습니다.
속성에 직접 연결한 배열 매개변수(Parameter)를 액션에서 비워 두면 빈 배열을 기록합니다. 빈 배열을 허용한 필수 속성이라면 이 편집이 성공합니다. 사용자가 반드시 원소를 지정해야 하는 업무라면 빈 배열을 허용하지 않습니다.
여러 기반 데이터소스의 예외
여러 데이터소스가 객체 하나를 구성할 때에는 필수 속성의 원천에 해당 객체가 존재하는지가 중요합니다. 가상의 Movie 유형과 필수 Genre를 예로 들면 다음과 같습니다.
데이터소스 1
| Movie Id | Title | Box office | Regions |
|---|---|---|---|
| 101 | The Adventure Begins | 200m | ["USA", "Canada", "UK"] |
| 102 | Love in the City | 75m | [] |
| 103 | Galactic Battles | 500m | ["USA", "UK", "Australia"] |
데이터소스 2
| Movie Id | Budget | Genre, 필수 | Director |
|---|---|---|---|
| 101 | 50m | Adventure | Michael John Smith |
| 102 | 20m | Romance | Jane Doe |
| 103 | 150m | Sci-Fi | 값 없음 |
새 영화를 두 데이터소스에 넣으면서 두 번째 원천의 Genre 값을 비우면 인덱싱에 실패합니다.
반면 데이터소스 1에만 다음 행을 추가하고 데이터소스 2에는 추가하지 않으면 인덱싱이 성공할 수 있습니다.
| Movie Id | Title | Box office | Regions |
|---|---|---|---|
| 104 | Happy Ending | 150m | ["UK", "FRANCE"] |
최종 객체는 다음 값을 가지며 필수 Genre에도 값이 없을 수 있습니다.
| 속성 | 값 |
|---|---|
| Movie Id | 104 |
| Title | Happy Ending |
| Box Office | 150m |
| Regions | ["UK", "FRANCE"] |
| Budget | 값 없음 |
| Genre | 값 없음 |
| Director | 값 없음 |
액션 편집도 같은 원천 경계를 따릅니다. 데이터소스 1에 연결된 속성만 생성하거나 수정하면 성공할 수 있습니다. Budget처럼 데이터소스 2의 속성을 추가하면 그 원천에도 객체가 존재하게 되므로 Genre를 함께 설정해야 합니다. 그렇지 않으면 액션이 실패합니다.
따라서 필수 속성이 있는 유형의 모든 조회 결과에서 값이 항상 존재한다고 가정하지 않습니다. 다중 원천의 객체 존재 범위와 데이터소스별 보안도 함께 확인합니다.