박스에 뭐든 다 던져 넣었더니, 필요한 걸 못 찾았다 — 온톨로지 설계 실수 6가지 실전 사례

박스에 뭐든 다 던져 넣었더니, 필요한 걸 못 찾았다 — 온톨로지 설계 실수 6가지 실전 사례

창고에 물건을 대충 던져 넣으면, 나중에 정작 필요한 걸 찾을 때 창고 전체를 뒤져야 한다 — 온톨로지도 똑같다

온톨로지 설계, 처음부터 잘하는 사람은 없다

온톨로지를 처음 설계할 때는 대개 “일단 데이터부터 넣고 보자”는 식으로 시작한다. 문제는 그렇게 쌓인 Object Type이 나중에 정리가 안 된 창고처럼 되어버린다는 점이다. 뭐가 어디 있는지, 같은 물건이 몇 군데 겹쳐 있는지 아무도 모른다.

Palantir 공식 문서는 이런 실수를 8가지 안티패턴으로 정리해두고 있다.[1] 이 중 “같은 고객을 세 가지 이름으로 부르는 문제”는 이미 다른 글에서 다뤘으니, 여기서는 나머지 실전에서 자주 마주치는 6가지를 정리한다.

실수 1: 뭐든 한 박스에 다 넣는다 — God Object

창고에 “자산”이라고 적힌 박스 하나를 만들어 놓고, 장비도 넣고, 소프트웨어 라이선스도 넣고, 부동산 문서도 넣고, 금융 상품 계약서도 넣는다고 해보자. 박스 하나만 열면 다 나오니 편해 보이지만, 실제로 뭘 찾으려면 박스 전체를 뒤져야 한다.

공식 문서가 드는 예시가 정확히 이거다 — 장비, 소프트웨어 라이선스, 부동산, 금융상품을 전부 하나의 Asset Object Type으로 욱여넣는 경우다.[1] 이게 바로 God Object다. 해결책은 각각을 별도 Object Type으로 쪼개고, 공통으로 필요한 속성(예: “감가상각 대상인가”)은 인터페이스로 묶는 것이다.[1]

실수 2: ETL 부산물까지 다 옮겨 담는다 — Kitchen Sink

창고 정리를 한다면서 이삿짐 상자에 붙어 있던 운송장 라벨, 포장 테이프 조각까지 같이 보관하는 사람은 없다. 그런데 온톨로지에서는 이게 자주 벌어진다. CRM 데이터를 온톨로지로 옮기면서 _crm_extracted_at, _crm_batched_at 같은 ETL 처리 메타데이터까지 그대로 속성으로 끌고 오는 경우다.[1]

이런 필드는 비즈니스 사용자에게 아무 의미가 없다. 원본 시스템의 기술적 흔적일 뿐이다. 공식 문서의 원칙은 명확하다 — 비즈니스 또는 기술적 가치가 분명한 속성만 의도적으로 선별해서 담는다.[1]

실수 3: 망치 하나로 모든 걸 두드린다 — Golden Hammer

정리를 잘하는 사람도 도구를 잘못 쓰면 창고가 엉망이 된다. 못을 박아야 할 곳에 스크루드라이버를 쓰고, 나사를 조여야 할 곳에 망치를 쓰는 식이다. 온톨로지에서는 Action Type파이프라인을 헷갈려 쓰는 경우가 여기에 해당한다.

공식 문서는 대량 배치 처리를 Action Type으로 구현하거나, 반대로 사용자가 직접 판단해야 하는 자동 할당 업무를 파이프라인으로 처리하는 걸 예로 든다.[1] 원칙은 이렇다 — 사람이 판단해서 결정을 내리는 일에는 Action Type, 자동화된 대량 변환에는 파이프라인.[1] 도구를 작업 성격에 맞게 골라야 한다.

실수 4: 서랍 하나에 손잡이를 열 개 만든다 — Action Sprawl

서랍 하나 여는데 손잡이가 열 개씩 달려 있으면 오히려 헷갈린다. 온톨로지에서 “직원 이름 업데이트”, “이메일 업데이트”, “부서 업데이트” 액션을 각각 따로 만드는 게 이 경우다.[1]

실제로는 “직원 정보 수정”이라는 하나의 비즈니스 작업 안에 이름·이메일·부서 변경이 같이 일어나는 경우가 대부분이다. 공식 문서의 해법은 관련된 변경사항을 하나의 비즈니스 작업 단위 Action으로 번들링하는 것이다.[1]

실수 5: 옛날 영수증도 창고에 그대로 쌓아둔다 — Time Machine

계약서를 개정할 때마다 v1, v2, v3를 전부 별도의 독립된 물건처럼 창고 선반에 나란히 올려두는 경우가 있다. 공식 문서는 계약의 각 버전을 별도 Object로 만드는 걸 Time Machine 안티패턴으로 부른다.[1]

해결책은 계약을 하나의 Object로 유지하면서, 이력은 연결된 별도 이력 Object Type이나 시계열 속성으로 관리하는 것이다.[1] 버전 자체가 새로운 엔티티인 것처럼 다루면, “지금 유효한 계약이 뭐냐”는 질문에 답하기 위해 매번 최신 버전을 찾아 헤매야 한다.

실수 6: 라벨에 “물건”이라고만 써 붙인다 — The Misnomer

창고 선반에 “물건”, “것”, “종류”라고만 적어놓으면 나중에 아무도 뭐가 들었는지 모른다. 온톨로지에서 Item, value, type, date 같은 모호한 이름을 쓰는 경우가 이거다.[1] 공식 문서는 Product, monetaryValue, orderPlacedDate처럼 구체적이고 사람이 읽어서 바로 이해되는 이름을 쓰라고 권한다.[1]

그래서 창고를 어떻게 정리할 것인가 — 4가지 원칙

공식 문서는 위 실수들을 피하기 위한 설계 원칙을 우선순위 순으로 정리해두고 있다.[2]

  1. 현실을 모델링하지, 원본 데이터를 모델링하지 않는다. CSV 한 줄을 그대로 옮기는 대신(“OrderData”에 고객명·이메일·상품코드가 뒤섞인 형태), 주문·고객·상품을 별도 엔티티로 나눈다.[2]
  2. 세 번째 반복되면 리팩토링한다. 같은 구조를 두 번은 우연일 수 있지만, 세 번째부터는 패턴이다 — 즉시 통합하거나 인터페이스로 추상화한다.[2]
  3. 핵심은 보호하고, 확장은 열어둔다. 기존 Object Type에 새 속성을 계속 추가하는 대신, 별도 연결 Object Type이나 인터페이스로 확장한다. 예를 들어 장비에 인증 정보가 필요하면 Equipment를 건드리지 않고 Equipment Certification을 새로 연결한다.[2]
  4. 깊은 상속 대신 조합을 쓴다. 하나의 대상이 여러 성격(건물이면서 동시에 예약 가능한 자원인 경우 등)을 가질 때, 상속 체인을 깊게 파지 말고 Building, SchedulableResource 같은 인터페이스를 여러 개 조합한다.[2]

공식 문서는 이 원칙들이 “절대 법칙이 아니라 가이드”라고도 명시한다.[2] 마감이 급하면 일단 합리적인 선에서 구현하고 개선 계획을 남기는 것도 괜찮다 — 다만 명명, 의미의 명확성, 보안만큼은 타협하지 말라고 못박는다.[2]

FAQ

Q. 이 안티패턴들을 지금 당장 다 고쳐야 하나요? 아닙니다. 공식 문서도 트레이드오프를 인정합니다. 성능이나 마감 때문에 일부 타협은 가능하지만, 명명 규칙과 의미의 명확성만큼은 나중에 고치기가 훨씬 어려우니 초기에 신경 쓰는 게 낫습니다.

Q. God Object인지 아닌지 어떻게 판단하나요? “이 Object Type이 현실에서 서로 다른 두 가지 이상의 것을 가리키고 있는가”를 자문해보면 됩니다. 장비와 소프트웨어 라이선스를 둘 다 “Asset”이라 부르고 있다면 이미 God Object입니다.

Q. Kitchen Sink와 필요한 메타데이터는 어떻게 구분하나요? 비즈니스 사용자에게 그 속성의 의미를 설명할 수 있는지가 기준입니다. “이 값이 언제 배치 처리됐는지”는 엔지니어에게나 의미 있지, 현업 담당자에게는 의미가 없습니다.

참고자료

[1] Palantir, Ontology design: Anti-patterns, Foundry 공식 문서.

[2] Palantir, Ontology design: Best practices, Foundry 공식 문서.

다음으로 읽어볼 글

질문이나 지적할 부분이 있으면 문의로 알려주세요.

Questions or corrections? Let us know via Contact.

AI

AI map Ontology

기업 IT·데이터 조직에서 20년 넘게 실무를 해온 사람이 씁니다. 모든 사례는 익명화·일반화합니다. 소개 보기 →

AI

AI map Ontology

Written by someone with 20+ years in enterprise IT and data. All cases are anonymized and generalized. About us →

다음으로 읽어볼 글

개념을 이해했다면, 실제 설계와 활용 방법을 이어서 살펴보세요.

온톨로지 Foundry AIP 기업 AI 전략

Keep reading

Once you understand the concept, continue on to real design and usage patterns.

Ontology Foundry AIP Enterprise AI Strategy