리소스별로 실제 삭제가 하는 일
RealityConnect API에서 “삭제”는 무엇을 삭제하느냐에 따라 의미가 다릅니다. 일부 리소스는 복구 가능한 휴지통으로 이동하지만, 대부분은 완전히 제거됩니다. 이 페이지는 정리 로직이나 동기화 조정 로직을 설계할 때 참고할 리소스별 레퍼런스입니다.
리소스별 삭제 동작
섹션 제목: “리소스별 삭제 동작”| 리소스 | 삭제 | 복원 | 완전 삭제 |
|---|---|---|---|
| 데이터 노드(디비전, 사이트, 폴더, twin, 프로젝트, Data Bundle, Asset Library 등) | 소프트(휴지통으로 이동) | PATCH /v1/nodes/{nodeId}/restore | 삭제 후 30일 뒤 자동 실행, 또는 DELETE /v1/nodes/{nodeId}/hard로 즉시 실행 |
| POI | 하드 | 사용 불가 | 즉시 |
| 존 | 하드 | 사용 불가 | 즉시 |
| Box asset | 하드 | 사용 불가 | 즉시 |
| Model asset(RealityPlan) | 하드 | 사용 불가 | 즉시 |
| Asset Library 모델 | 하드(애셋이 여전히 참조하는 동안 차단됨) | 사용 불가 | 차단이 풀리면 즉시 |
| Asset Library 태그 | 하드 | 사용 불가 | 즉시 |
| 그룹 | 하드 | 사용 불가 | 즉시 |
| 그룹 멤버십 | 하드 | 사용 불가 | 즉시 |
| 초대(조직 또는 노드) | 하드(철회) | 사용 불가 | 즉시 |
| 객체 첨부 파일 | 하드(저장된 파일만 제거함) | 사용 불가 | 즉시 |
휴지통이 있는 것은 데이터 노드뿐입니다. 이 표의 다른 모든 리소스는 삭제 호출이 성공하는 즉시 사라지며, 서버 측 복구 경로가 전혀 없습니다.
데이터 노드: 소프트 삭제와 휴지통
섹션 제목: “데이터 노드: 소프트 삭제와 휴지통”DELETE /v1/nodes/{nodeId}는 노드를 소프트 삭제합니다. 즉, 제거되는 대신 조직의 휴지통으로 이동합니다. 휴지통에 있는 노드는 다음과 같습니다.
GET /v1/trash로 목록이 표시됩니다(페이지네이션 지원,deletedAt또는name으로 정렬 가능).PATCH /v1/nodes/{nodeId}/restore로 복원할 수 있으며, 복원 시 조직의 스토리지 할당량을 초과하게 되면409 StorageLimitExceeded로 실패할 수 있습니다.DELETE /v1/nodes/{nodeId}/hard로 완전히 삭제되거나, 휴지통으로 이동한 지 30일 후 자동으로 삭제됩니다.
복원과 완전 삭제 모두, 노드가 현재 휴지통에 없으면 409 NoNodeRemoved를 반환합니다. 여기에는 한 번도 삭제된 적 없는 노드 id는 물론, 이미 완전히 삭제되었거나 자동으로 정리된 노드 id도 포함됩니다.
노드를 완전히 삭제하면 휴지통에 있는 하위 항목과, 해당 서브트리 내 노드에 관련된 파생 항목 레코드도 함께 제거됩니다. 서브트리 밖에 있으면서 우연히 그 안의 무언가에서 파생된 노드는 영향을 받지 않습니다.
노드 삭제를 막는 요인
섹션 제목: “노드 삭제를 막는 요인”DELETE /v1/nodes/{nodeId}는 세 가지 이유로 409 Conflict로 거부될 수 있습니다.
| 코드 | 의미 | ?force=true로 우회 가능? |
|---|---|---|
NodeHasDerivatives | 노드에 먼저 제거해야 하는 파생 출력물(예: 처리된 결과)이 있습니다. 응답의 derivatives[]에 정확히 어떤 노드가 막고 있는지 나열됩니다. | 아니요 |
NodeHasBundleDependants | 노드의 Data Bundle에 종속 항목이 있습니다. | 아니요 |
NodeNotInDeletableState | 노드가 현재 처리 중이거나 처리에 실패했습니다(isProcessing / isFailed). | 예 |
force=true(쿼리 문자열로, 정확히 "true" 또는 "false")는 NodeNotInDeletableState만 우회합니다. 파생 항목이나 번들 종속 항목이 있는 노드는 먼저 해결해야 하며, 이를 우회할 방법은 없습니다. 전체 응답 형태와 권장 처리 방법은 오류 코드를 참고하세요.
Asset Library 모델은 이와 동일한 잠금의 더 단순한 버전을 갖습니다. DELETE /v1/asset-library/{ownerContextId}/models/{libraryModelId}는 애셋이 여전히 해당 모델을 참조하는 동안 409 Conflict를 반환합니다. 마지막 참조가 사라지면, 삭제는 노드의 소프트 삭제와 달리 하드하고 복구 불가능한 제거가 됩니다.
소프트 삭제된 노드와 탐색/검색
섹션 제목: “소프트 삭제된 노드와 탐색/검색”소프트 삭제된 노드는 즉시, 예외 없이 GET /v1/nodes/{id}/browse와 GET /v1/nodes/search에서 빠집니다. 두 엔드포인트 모두 휴지통에 있는 노드를 포함하는 파라미터가 없습니다. 휴지통에 있는 노드를 볼 수 있는 유일한 방법은 GET /v1/trash이며, 복원해야만 다시 탐색과 검색이 가능해집니다.
노드 계층 구조와 검색 자체가 어떻게 동작하는지는 노드 유형 및 계층 구조와 Business Object 및 노드 검색을 참고하세요.
다음은?
섹션 제목: “다음은?”- 이 페이지에서 참조한 모든 코드를 포함해, 이름이 지정된 전체 오류 코드 목록은 오류 코드를 참고하세요.
- POI, 존, 애셋, 첨부 파일을 지정하는 데 쓰이는
contextId를 해석하는 방법은contextId가 허용하는 값을 참고하세요.