본문으로 건너뛰기
5분

컬렉션과 데이터셋

데이터가 어디에 담기고, 컬렉션이라는 단위가 왜 필요한지 설명합니다.

D.Hub에서 다루는 모든 데이터는 컬렉션 안에 놓입니다. 컬렉션은 폴더가 아니라 하나의 목적을 공유하는 작업 공간입니다. 프로젝트 관리에 필요한 원본 표, 가공 파이프라인, 온톨로지, 대시보드가 한 컬렉션 안에 모여 있고, 권한도 컬렉션 단위로 정리됩니다.

컬렉션 안에서 실제 행과 열을 가진 표가 데이터셋입니다. 데이터셋은 파일 하나가 아니라 스키마와 이력을 가진 관리 대상이고, 다른 자산이 데이터셋을 참조하는 방식으로 연결됩니다.

폴더가 아니라 작업 공간

폴더는 파일을 담기만 합니다. 어떤 파일이 어떤 파일에서 나왔는지, 누가 볼 수 있는지는 폴더 바깥의 문제입니다.

컬렉션은 그 바깥의 문제를 함께 가집니다. 한 컬렉션은 서로 참조하는 자산의 묶음이자 권한이 걸리는 단위이며, 파이프라인이 입력과 출력을 고를 수 있는 범위입니다. 파이프라인이 데이터셋을 읽어 엔티티에 적재하려면 그 데이터셋과 엔티티가 같은 컬렉션에 있어야 합니다. 컬렉션을 나눈다는 것은 파일을 정리하는 일이 아니라 함께 쓰일 자산의 경계를 정하는 일에 가깝습니다.

데이터셋은 계약을 가집니다

데이터셋을 만들 때 정하는 스키마는 표시용 설명이 아니라 지켜야 하는 계약입니다. 컬럼 이름, 데이터 타입, NULL 허용 여부가 이후 모든 연결의 전제가 됩니다.

이 계약은 데이터가 컬렉션 안에서 이동할 때 드러납니다. 참여 기록의 join_dt가 문자열이고 대상 속성이 Timestamp라면 그 차이를 어딘가에서 변환해야 합니다. 원본에 빈 값이 들어올 수 있는데 대상이 NULL을 허용하지 않으면 적재가 실패합니다. 데이터셋을 파일이 아니라 계약으로 보면, 이런 실패가 갑작스러운 오류가 아니라 미리 확인할 수 있는 조건이 됩니다.

컬렉션 경계가 함께 정하는 것

컬렉션을 하나 만들면 그 컬렉션의 온톨로지 스코프도 하나 생깁니다. 엔티티와 관계는 컬렉션 트리에 개별 항목으로 보이지 않지만, 소속 컬렉션이 반드시 정해져 있습니다. 컬렉션 경계는 다음 세 가지를 한꺼번에 정합니다.

무엇을어떻게 정하는가
권한누가 이 묶음을 보고 편집할 수 있는지가 컬렉션 단위로 결정됩니다
의미컬렉션 하나에 온톨로지 스코프 하나가 대응합니다
조합 가능 범위파이프라인과 대시보드가 함께 고를 수 있는 자산의 범위가 됩니다

세 가지가 같은 선을 공유하기 때문에, 컬렉션을 나누는 결정은 권한 설계이자 모델 설계입니다.

하나로 둘지 나눌지

같은 사람들이 같은 목적으로 함께 쓰는 데이터라면 한 컬렉션에 둡니다. 서로 참조할 일이 잦은데 컬렉션이 갈려 있으면 파이프라인과 온톨로지에서 매번 경계를 넘는 비용이 생깁니다.

반대로 공개 범위가 다른 데이터는 나눕니다. 팀 전체가 보는 프로젝트 집계와 인사 담당만 여는 직원 원본이 한 컬렉션에 있으면 권한을 그 안에서 다시 쪼개야 합니다. 나누는 기준은 데이터의 종류나 크기가 아니라 누가 함께 쓰는가입니다.