본문으로 건너뛰기

모델을 거버넌스하기: 버전 관리, 변경 통제, 그리고 온톨로지 스튜어드십

📍 현재 위치: 제7부 · 유지보수, 발행, FAIR — 모델이 만들어진 뒤에도 신뢰할 수 있게 유지하는 단계입니다. 디지털 스레드는 강력하지만, 우리가 인정했듯이 표류하기 쉽습니다. 이 장은 모델을 여러 해에 걸쳐 진실하게 유지하는 일 — 영리한 그래프를 신뢰할 수 있고 유지 관리되는 시스템으로 바꿔 주는 거버넌스 — 에 관한 것입니다.

이전 장은 하나의 경고로 끝났습니다. 그래프는 거버넌스되지 않으면 표류하는 파생된 관점일 뿐이며, 모델은 그것을 유지하는 규율만큼만 신뢰할 수 있다는 것입니다. 그 경고는 1부 이래로 줄곧 메아리쳐 왔습니다 — 일관됨은 올바름이 아니고, 검증됨은 측정됨이 아니며, 모델은 산출물이 아니라 실천(practice)이라는 것입니다. 이 장은 그 실천을 정면으로 마주합니다. 규제 환경의 온톨로지는 한 번 작성하고 마는 파일이 아닙니다. 그것은 버전이 관리되어야 하고, 통제 아래 변경되어야 하며, 수십 년에 걸쳐 이어질 수 있는 제품 수명 내내 관장되어야 하는 통제된 자산입니다. 그 거버넌스를 제대로 해내는 것이야말로, 출시를 걸 수 있는 모델과 조용히 썩어 가는 모델을 가르는 차이입니다.

쉽게 말하면

사전은 인쇄된 날 완성되는 것이 아닙니다 — 언어는 변하며, 좋은 사전은 유지 관리됩니다. 새 단어가 추가되고, 옛 단어는 고어로 표시되며(절대 조용히 삭제되지 않습니다. 그랬다가는 그 단어를 쓴 모든 책이 깨지니까요), 모든 판본에 날짜가 매겨지고 추적됩니다. 온톨로지(ontology)는 당신의 공정을 위한 사전이며, 똑같은 스튜어드십이 필요합니다. 변경을 제안하는 절차, 옛 의미를 결코 깨지 않는다는 규칙, 모든 릴리스에 붙는 버전, 그리고 그것을 책임지는 관리자 말입니다. 이 장은 좋은 사전 관리자가 되는 일에 관한 것입니다 — 규제 대상 제조에서, 조용히 바뀌는 의미는 곧 조용히 거짓말하는 기록이기 때문입니다.

이 장에서 다루는 내용

우리는 온톨로지를 통제된 산출물(controlled artifact)로 다룹니다. 버전이 관리되고, 변경이 통제되며, 관장되는 것으로요. 우리는 폐기하되 삭제하지 않는다(deprecate, don't delete)는 으뜸 규칙(IRI 영속성), 이 분야가 사용하는 협의회 거버넌스(council governance) 모델, 하류 스키마가 표류하지 못하게 하는 LinkML 기반 단일 출처 저작(single-source authoring), 그리고 개방형 표준이 당신이 직접 짓도록 남겨 두는 GxP 래퍼(GxP wrapper)우수 실천(Good-practice) 검증·변경 통제 외피(GxP는 GMP, GLP를 비롯해 제약 업무를 규율하는 "Good x Practice" 규제 품질 체제 전반을 가리킵니다) — 를 다룹니다. 우리는 하나의 온톨로지 변경을 해부하고, 그 메커니즘들을 모델의 새 에디션을 위한 go/no-go 출하 게이트(release gate)로 모으며, 거버넌스란 기술이 뒷받침할 뿐인 사회적 문제라는 정직한 진실로 마무리합니다.

폐기하되 결코 삭제하지 않는다: 의미의 영속성

온톨로지 거버넌스의 첫 번째 규칙은 제4부의 식별자 규율에서 곧장 따라 나옵니다. IRI(개념을 가리키는 영구적 웹 식별자)는 한 번 발행되면 영구적이라는 것입니다. bp:monomerPct가 언젠가 무언가를 의미했다면, 그 IRI는 영원히 그것을 계속 의미해야 합니다. 기록, 결과, 그리고 출하된 로트가 그것을 참조하기 때문입니다. 한 개념이 대체될 때, 당신은 그 IRI를 삭제하지 않습니다 — 당신은 그것을 폐기(deprecate)합니다. 즉 owl:deprecated "true"^^xsd:boolean로 표시하고(클래스라면 owl:DeprecatedClass로, 속성이라면 owl:DeprecatedProperty로 타입을 지정하고), 은퇴 사유를 skos:historyNote(또는 skos:changeNote / skos:editorialNote)로 기록하며, bp:replacedBy로 그 대체물을 가리킨 채 해석 가능한 상태로 남겨 둡니다. (참고로 SKOS에는 자체 폐기 플래그가 없습니다 — skos:deprecated라는 용어는 존재하지 않습니다 — 그래서 SKOS 개념 체계도 skos:historyNote와 상태 관례로 똑같이 개념을 은퇴시킵니다.) 추론기가 당신에게 강요하는 한 가지 미묘함이 있습니다. owl:deprecated주석(annotation)이라는 것입니다. 기술 논리 추론기는 그것을 완전히 무시합니다 — 폐기된 클래스도 이전과 정확히 똑같이 개체를 분류합니다 — 그래서 폐기는 논리에 대한 변경이 아니라 편집자, 문서, CI에 보내는 신호입니다. 이것이 이 장의 논지 전체를 축소판으로 보여 줍니다. 거버넌스는 논리 이 아니라 논리 주위의 규율입니다. IRI를 삭제하는 것은, 모든 옛 기록이 인용하는 페이지를 파쇄하는 온톨로지판 행위입니다. 과거 데이터는 여전히 그곳을 가리키는데, 이제 아무것도 없는 곳을 가리키게 되는 것이죠. 이것이 온톨로지가 덮어쓰는(overwrite) 대신 성장하고 주석을 다는(grow and annotate) 이유이며, 10년 된 배치 기록이 여전히 그것이 작성된 어휘에 비추어 해석될 수 있는 이유입니다. 의미의 영속성은 현학이 아닙니다. 규제 대상 아카이브에서 그것은 판독 가능한 기록과 미아가 된 기록 사이의 차이입니다. 그리고 이 공장에서 그 대가는 보존상의 것만이 아니라 운영상의 것이기도 합니다. 바로 그 bp: IRI들이 히스토리언, MES 레시피, LIMS 결과 적재기가 결속하는 대상입니다 — 실행 예제의 historian_to_rdf.py, opcua_to_rdf.py, b2mml_to_rdf.py는 살아 있는 태그, 설정값, 배치 기록을 바로 이 용어들에 매핑합니다. bp:monomerPct를 다시 의미 짓거나 삭제하면, 당신은 옛 기록 하나를 미아로 만드는 데 그치지 않습니다. 오늘의 배치를 수집하는 매핑을 조용히 깨뜨립니다 — 먼지 쌓인 사건이 아니라 진행 중인 데이터 무결성 사건입니다.

이것이 어휘 자체를 버전이 관리되고 통제된 산출물로 각인하는 이유입니다. 실행 예제의 bp: 어휘는 owl:versionInfo 문자열을 지닌 온톨로지 선언으로 시작합니다 — 거버넌스의 가장 기본적인 행위로서, 모든 적재가 자신이 어떤 판본의 의미에 비추어 추론되었는지를 정확히 알 수 있게 합니다. 이 파일은 이제 세 번째 판에 이르렀고, 그 선언은 바닥만이 아니라 사용 중인 변경 통제 어휘 전체를 보여 줍니다.

# bioproc.ttl
bp: a owl:Ontology ;
rdfs:label "Bioprocess running-example vocabulary" ;
owl:versionInfo "2.1.0" ;
owl:versionIRI <https://example.org/bioproc/2.1.0> ;
owl:priorVersion <https://example.org/bioproc/2.0.0> ;
rdfs:comment "Local vocabulary for a CHO mAb process modeled end to end; aligns up to BFO/IOF/AFO/OBI/QUDT/RO/PROV in align.ttl. v2.0.0 grew the v1.0.0 genealogy-spine model to real-world depth across every unit operation, the full release CQA panel, serialization, and distribution. v2.1.0 added the 'from the wire to the graph' boundary: unit-bearing QUDT QuantityValues on the realized setpoints, the ISA-95 equipment hierarchy, the IEC 63278 Asset Administration Shell of the vessel, and the ISO IDMP substance identity — with OPC UA / B2MML / ASM source artifacts mapped in by the standalone scripts. See the governance chapter for the change record." .

버전 문자열만으로는 규율의 바닥일 뿐, 규율 그 자체는 아닙니다. 그리고 이 선언은 나머지 OWL 변경 통제 어휘가 실제로 일하는 모습을 보여 줍니다. owl:versionIRI 판본의 영구 주소를 못박고, owl:priorVersion은 그것이 대체한 2.0.0 판본으로 거슬러 링크하며, 그 판본은 다시 원래의 1.0.0에서 자라난 것입니다. 주석은 두 번의 상향을 서술합니다. 1.0.0 → 2.0.0 상향은 주(major) 버전 상향이었습니다. 실행 예제가 계보 척추에서 실세계 수준의 깊이로 성장한 것이죠 — 모든 단위 공정에 그 물질과 공정이 주어지고, 전체 출하 패널이 모델링되며, 직렬화와 유통이 추가되었습니다 — 새로운 주 판본을 정당화할 만큼 깊은 변경입니다. 2.0.0 → 2.1.0 상향은 부(minor) 버전 상향이었습니다. 전선에서 그래프로 경계를 추가했죠 — 실현된 설정값에 붙는 단위를 지닌 QUDT 수량값, ISA-95 장비 계층, IEC 63278 자산 관리 셸, ISO IDMP 물질 식별자를, OPC UA / B2MML / ASM 출처 산출물을 매핑하여 — 이전 용어를 깨거나 제거하지 않은 채로 말입니다. 이것이 바로 주 버전이 아니라 부 버전 상향을 받을 자격을 주는 것입니다. 각 단계가 덮어쓰기가 아니라 상향이었기에, 모든 이전 판본은 여전히 이름이 붙어 있고 여전히 해석 가능합니다. 은퇴한 용어도 마찬가지로, 제거되는 대신 owl:deprecated "true"^^xsd:boolean로 표시되고(owl:DeprecatedClass로 타입이 지정되며) skos:historyNote와 그 대체물을 가리키는 bp:replacedBy 포인터가 달립니다. 그것의 실제 예가 아래에 있습니다.

변경 통제와 협의회 거버넌스

모델에 대한 변경은 공장이 기술되는 방식에 대한 변경이며, GxP 환경에서 그것은 파일을 조용히 편집하는 것이 아니라 통제된 행위입니다 [3]. 거버넌스된 온톨로지에는 변경 절차가 있습니다. 제안, 영향 평가(이 용어가 어떤 기록, 형상, 질의에 영향을 미치는가?), 도메인과 모델을 모두 이해하는 사람들의 검토, 버전 상향, 그리고 에 대한 기록이 그것입니다. 이는 데이터 거버넌스 규율을 스키마(온톨로지 자체의 구조 모델) 자체에 적용한 것입니다 — 공리 장이 공리에 마땅하다고 말한 바로 그 엄정함입니다. 공리란 실재에 대한 결정이기 때문입니다.

실행 예제는 그러한 변경 하나를 실제 트리플로 담고 있습니다 — 바로 위의 2.0.0 상향을, GxP 변경이 마땅히 그래야 하는 방식으로 기록한 것입니다. 옛 별칭 클래스 bp:monomerPurity는 — 사물화된 순도 클래스(로트가 지니는 독립적 품질 개체)에서 스칼라 데이터타입 속성(로트에 붙는 단순 수치 리터럴)으로 다시 타입이 지정되며 — 출하 게이트가 이제 검사하는 형태인 bp:monomerPct로 대체되었습니다. 삭제되는 대신, 그것은 폐물로 표시되어 그 대체물을 가리키며, 변경 자체는 제안, 영향 평가, 서명된 승인으로 포착됩니다.

# instances.ttl — a worked, change-controlled deprecation (deprecate, don't delete)
bp:monomerPurity a owl:DeprecatedClass ; rdfs:label "SEC monomer purity (DEPRECATED alias)" ;
owl:deprecated true ;
obo:IAO_0100001 bp:monomerPct ; # IAO 'term replaced by'
bp:replacedBy bp:monomerPct ;
skos:historyNote "Deprecated in v2.0.0; superseded by the datatype property bp:monomerPct. Never silently overwritten — see the change record below." .

bp:CHG-2026-014 a bp:ChangeProposal ; rdfs:label "change proposal: add full release CQA panel + serialization (v2.0.0)" ;
bp:isAbout bp:Spec-DS-mAb-A .
bp:IA-2026-014 a bp:ImpactAssessment ; rdfs:label "impact assessment for CHG-2026-014" ;
bp:isAbout bp:CHG-2026-014 .
bp:CA-2026-014 a bp:ChangeApproval ; rdfs:label "change approval record for CHG-2026-014" ;
bp:isAbout bp:CHG-2026-014 ; bp:approvedBy bp:SIG-steward .

폐기를 안전하게 만드는 두 주석에 주목하세요. obo:IAO_0100001(OBO의 "term replaced by" 관계로, 여기서 그 링크가 사적 관례가 아니라 표준이 되도록 재사용됨)과, 의도상 그것에 정렬된 지역 속성 bp:replacedBy입니다. 폐물이 된 IRI에 도달한 질의나 사람은 그 의미가 어디로 갔는지 정확히 안내받으며, bp:monomerPurity를 인용했던 과거 기록은 여전히 해석됩니다. ChangeProposal / ImpactAssessment / ChangeApproval 트리플은 종이 자취입니다 — 무엇이 바뀌었고, 무엇에 영향을 미쳤으며, 누가 그것을 승인했는지 — 위키에 남겨 두는 대신 일급 정보 산출물로 모델링한 것입니다.

이 거버넌스 용어들이 어디에 사는지를 짚어 둘 만합니다. 그것들은 덧붙임이 아닙니다. bp:ChangeProposal, bp:ImpactAssessment, bp:ChangeApproval, bp:Signature는 모두 rdfs:subClassOf bp:InformationArtifact입니다 — 사양이나 결과와 같은 정보 내용 개체 가지(BFO 일반 의존 연속체(generically dependent continuant) / IAO 정보 내용 개체) 아래에 자리하며, 이는 정확히 옳습니다. 변경 기록은 공정의 일부가 아니라 공정에 관한 정보이기 때문입니다. 그리고 그 종이 자취를 한데 묶는 관계 bp:isAboutalign.ttl에서 rdfs:subPropertyOf obo:IAO_0000136(IAO 'is about')로 상향 정렬되어, 변경 로그는 모델의 나머지와 동일한 연속체/발생체 규율을 물려받습니다. 이 종이 자취는 또한 책이 제6부에서 연 고리를 닫습니다. 영향 평가의 핵심 질문 — 이 용어가 어떤 질의에 영향을 미치는가? — 은 바로 23개 역량 질문이 기계적으로 답하는 것입니다. 따라서 규율 잡힌 변경 절차는 버전이 상향되고 승인이 서명되기 전에 수용 스위트를 다시 실행하여(cq-catalog.json에 대한 validate.py) 모든 CQ가 여전히 PASS하는지 확인하는 것으로 끝납니다. 그 스위트가 변경 통제 아래 모델의 회귀 테스트입니다.

이 실행 예제는 의도적으로 고른 것입니다. CHG-2026-014가 이 장의 예제인 까닭은 그것이 가장 큰 변경이어서가 아니라, 모든 거버넌스 메커니즘을 한꺼번에 행사하기 때문입니다 — 은퇴(그래서 폐기하되 삭제하지 않음을 볼 수 있고), 재타입(사물화된 클래스가 스칼라 속성이 되며), 그리고 등록된 출하 사양에 대한 손댐(그래서 보고 의무와 수용 스위트가 둘 다 작동에 들어옴) 말입니다. 순수한 추가였다면 폐기 쪽을 결코 보여 주지 못했을 것이고, 형식적인 이름 변경이었다면 결코 규제기관에 닿지 않았을 것입니다. 따라서 이 단 하나의 변경이 전체 절차를 하나의 예제 위에서 보이게 만듭니다.

CHG-2026-014은 어떻게 거버넌스되었는가. 변경 기록은 서술형 산문이 아닙니다. 그것은 거버넌스된 모델이 따르는 문자 그대로의 순서이며, 그 절차가 다음 변경에서도 재현 가능하도록 이 구체적인 변경 위에서 한 번 걸어 볼 만합니다.

  1. 제안하고 정당화하라. bp:ChangeProposal(bp:CHG-2026-014)을 발행하고 그것이 무엇을 하는지와 왜 하는지를 진술합니다 — 사물화된 bp:monomerPurity 별칭을 스칼라 데이터타입 속성 bp:monomerPct로 재타입하고 전체 출하 CQA 패널을 추가한다 — 제안은 그것이 변경하는 산출물, 여기서는 bp:Spec-DS-mAb-Abp:isAbout으로 가리킵니다. 어떤 용어를 건드리기 전에 제안이 먼저 존재합니다.
  2. 영향을 평가하라. bp:ImpactAssessment(bp:IA-2026-014)를 발행하여 제안을 bp:isAbout으로 가리키고, 그 하나의 핵심 질문 — 이 용어가 무엇에 영향을 미치는가? — 을 기록, SHACL 출하 형상, 그리고 질의에 걸쳐 답합니다. 그 질문은 손으로 답하지 않습니다. 그것은 바로 23개 역량 질문이 기계적으로 답하는 것이며, 그래서 영향 평가는 그것들을 다시 실행함으로써 닻을 내립니다.
  3. 수용 스위트를 실행하라 — 녹색을 유지해야 한다. cq-catalog.json에 대해 validate.py를 실행하여 변경된 모델에 비추어 모든 CQ가 여전히 PASS하는지 확인합니다. 출하 게이트 질문 CQ-08은 이 변경이 깨뜨려서는 안 되는 바로 그 질문입니다. 단 하나의 CQ라도 회귀하면, 제안은 버전이 상향되는 대신 재작업됩니다. 그 스위트가 변경 통제 아래의 회귀 테스트입니다.
  4. 폐기하되 삭제하지 마라. 옛 용어를 제자리에서 은퇴시킵니다. bp:monomerPurityowl:deprecated true로 표시하고(owl:DeprecatedClass로 타입을 지정), skos:historyNote를 기록하며, obo:IAO_0100001 / bp:replacedBybp:monomerPct를 가리켜, 폐물이 된 IRI가 여전히 해석되고 그 의미가 어디로 갔는지 말하게 합니다.
  5. 버전을 매기고 변경 이력을 남겨라. 이것이 출하 패널과 한 용어의 형태를 건드렸으므로, 적어도 주(major) 버전 상향을 받을 자격이 있습니다. owl:versionInfo "2.0.0"을 각인하고, 새 owl:versionIRI를 못박으며, owl:priorVersion을 그것이 대체한 판본으로 거슬러 링크하고, 온톨로지 rdfs:comment에 변경을 서술합니다. 아무것도 제거하거나 다시 의미 짓지 않은 변경은 — 후의 2.1.0 전선-에서-그래프로 추가처럼 — 부(minor) 버전 상향만 받습니다. SemVer는 무언가가 깨졌는지를 부호화합니다(시맨틱 버전 관리는 릴리스를 MAJOR.MINOR.PATCH로 번호 매깁니다. 깨뜨리는 변경 — 무언가가 제거되거나 다시 의미 지어짐 — 은 MAJOR를 올리고, 하위 호환되는 추가는 MINOR를 올리며, 의미를 바꾸지 않는 수정은 PATCH를 올립니다).
  6. 승인하고 서명하라. bp:ChangeApproval(bp:CA-2026-014)을 발행하여 bp:approvedBy bp:SIG-steward로 둡니다 — OBO나 IOF 규모에서는 상설 협의회의 것이 될, 명명되고 책임 있는 사인오프 말입니다. 그제서야 변경이 효력을 발휘합니다.

1, 2, 4, 6단계는 위 스니펫에 인쇄된 트리플이고, 3단계와 5단계는 그것들을 둘러싼 게이트입니다. 요점은 종이 자취와 절차가 같은 순서라는 것입니다 — 트리플을 위에서 아래로 읽으면 거버넌스 단계를 순서대로 읽는 셈입니다.

변경 통제 위원회에 앉아 본 사람이라면 이 변경에 관한 두 가지 사실이 중요합니다. 첫째, 그것이 무엇에 관한지를 보세요. bp:CHG-2026-014bp:isAbout bp:Spec-DS-mAb-A입니다 — 그것은 원료의약품 출하 사양을 건드립니다. 등록된 출하 사양에 대한 변경은 결코 순전히 내부적인 행위가 아닙니다. 그 성격에 따라 그것은 보건당국에 보고해야 하는 변경입니다 — FDA 사전 승인 보충 또는 연차 보고, EU 변경 신청 — 제품의 ICH Q12 수명주기 관리 프레임워크 하에서 파일에 명시된 확립된 조건에 비추어 평가됩니다 [4]. 그래서 거버넌스된 온톨로지는 위키가 답할 수 없는 질문에 답해야 합니다. 이 모델 변경들 중 어느 것이 보고 대상이며, 누구에게 보고하는가? 출하 사양, SHACL 형상, 그리고 용어가 건드리는 질의를 명명하는 영향 평가는, 규제 업무 검토자가 신고 범위를 정하는 데 필요한 바로 그 산출물입니다. 둘째, 패널에 CQA(중요 품질 속성 — 출하 사양이 한계를 설정하는, 단량체 순도와 같은 측정된 속성)를 추가하는 것과 같은 변경은 거의 언제나 비교가능성(comparability) 판단에 올라탑니다. 기술 이전을 가로질러 공정이 바뀔 때 — 실행 예제의 사이트 B로의 이전, 그 엔지니어링 런과 PPQ 확인 런 — 각 CQA의 의미는 고정된 채로 남아야, 변경 전후 로트가 ICH Q5E 하에서 비교 가능한 상태로 남습니다 [5]. 공정 변경을 가로지르는 그 의미의 안정성이야말로 폐기하되 삭제하지 않는다의 가장 깊은 이유입니다. IRI가 조용히 자신을 다시 의미 지은 CQA는, 10년 치 비교가능성 데이터를 하룻밤 사이에 통약 불가능하게 만들 것입니다.

산업 규모에서 통하는 모델은 협의회 거버넌스(council governance)입니다. OBO 파운드리가 입증했고 IOF와 그 바이오제약(BMIC) 그룹들이 채택한 모델이죠. 공유 어휘를 협의회가 발행된 설계 원칙에 따라 관장하므로, 어느 한 사람이나 벤더도 그 의미를 소유하지 않으며 변경은 그것에 의존하는 모든 이에 걸쳐 조율됩니다 [2]. 이것이 공유 온톨로지를 공유된 채로 유지하게 해 주는 것입니다 — 그 대안, 즉 모든 사이트가 저마다 자기 사본을 포크하는 것은 애초에 온톨로지를 정당화했던 사이트 간 상호운용성을 파괴하는 온톨로지 난립입니다. 실행 예제에서 그 협의회 역할은 명명된 하나의 서명으로 줄어듭니다. bp:CA-2026-014bp:approvedBy bp:SIG-steward로, 변경에 대한 지역 스튜어드의 전자 서명입니다. 그것은 의도적으로 작습니다 — OBO나 IOF 규모에서는 상설 위원회인 것을 하나의 서명이 대신하는 것이죠 — 하지만 거버넌스가 결국에는 공정 다이어그램이 아니라 책임을 지는 사람으로 귀결되어야 한다는 점을 보여 줍니다.

단일 출처 저작: 스키마가 표류하지 못하게 하라

미묘한 거버넌스 실패는 내부 표류(internal drift)입니다. 같은 Batch 개념이 OWL 클래스로, SHACL 출하 형상으로, 관계형 테이블로, JSON 스키마로 작성됩니다 — 네 개의 파일이고, 다음번에 누군가 하나를 편집하면서 나머지를 잊을 때 어긋날 네 번의 기회입니다. 오픈소스 책의 답은 LinkML입니다. 모델을 YAML로 한 번 저작하고 거기서 SHACL, JSON Schema, SQL DDL, OWL, 타입이 지정된 클래스를 생성하므로, 이 모두가 손으로 유지되는 대신 변경 통제 아래 하나의 거버넌스된 출처에서 재생성됩니다 [1]. 단일 출처 저작은 "네 개의 스키마를 동기화 상태로 유지하라" — 인간이 어김없이 실패하는 규율 — 를 "출처에서 재생성하라"는 빌드 단계로 바꿉니다. 이것은 이 장에서 가장 실용적인 거버넌스 도구입니다. 올바름의 일관된 부분을 자동화하여, 인간만이 할 수 있는 부분에 대한 인간의 검토만 남깁니다.

하나의 거버넌스된 온톨로지 변경을 해부하는 신분증: 변경과 그 근거를 진술하는 제안 행; 변경이 무엇에 영향을 미치는지 — 용어를 사용하는 기록, SHACL 형상, 질의, 하류 스키마 — 를 나열하는 영향 평가 블록; 옛 IRI가 owl로 표시되고 replacedBy 링크를 지닌 채, 제거되는 대신 해석 가능한 상태로 유지되는 모습을 보여 주는 폐기하되-삭제하지-않음 행; 날짜와 변경 이력과 함께 온톨로지 릴리스를 상향하는 버전 행; LinkML YAML이 한 번 편집되고 거기서 SHACL, JSON Schema, SQL, OWL이 재생성되는 모습을 보여 주는 단일 출처 행; 변경 통제 아래 서명이 담긴 검토·승인 행; 그리고 거버넌스된 변경(추적되고, 되돌릴 수 있으며, 깨지지 않음)과 조용한 파일 편집(추적되지 않고, 깨짐)을 대비시키는 배너. 거버넌스된 하나의 변경: 영향 평가와 함께 제안되고, 삭제가 아니라 폐기로 적용되며, 버전이 매겨지고 변경 이력이 남으며, 하나의 LinkML 출처에서 재생성되고, 변경 통제 아래 서명으로 승인됩니다 — 모델을 표류시키는 조용한 편집의 정반대입니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

온톨로지 출하 게이트: 버전을 끊기 전의 go/no-go

완제의약품 출하 게이트로트 하나가 출하될 수 있는지를 결정합니다. 온톨로지에도 자기만의 출하 게이트가 있어, 모델의 새 에디션이 출하될 수 있는지를 결정합니다. 그것은 한 층 위에서의 같은 발상이며, 이 책이 지은 거의 모든 것이 그 체크리스트의 한 줄씩을 공급합니다. owl:versionIRI가 발행되고 관리자가 bp:ChangeApproval에 서명하기 전에, 거버넌스된 프로젝트는 go/no-go 리뷰를 돌립니다 — 편집자가 적용하기를 기억해야 하는 산문이 아니라, 모든 줄 뒤에 실행 가능하거나 기록된 증거가 있는 체크리스트입니다.

게이트무엇을 점검하는가증거 / 산출물통과 조건
수용 스위트 녹색바뀐 모델에 대해 모든 역량 질문이 여전히 올바르게 답함cq-catalog.json에 대한 validate.py(23개 CQ)23/23 PASS; 스위트가 0으로 종료하며 빌드를 게이팅함
함정 스캔 깨끗어떤 모델링 안티패턴도 다시 들어오지 않음OOPS! 함정 스캔에 더해 바이오제약 안티패턴 점검(CQ-14, CQ-19, CQ-23)심각/중요 함정 없음; 안티패턴 CQ가 PASS
정체성 영속성어떤 IRI도 삭제되거나 조용히 재의미화되지 않음bioproc.ttl의 diff; 모든 은퇴는 owl:deprecated + bp:replacedBy폐기하되 삭제하지 않음 준수; 고아 참조 없음
버전 고정에디션이 명명되고 그 선행 버전과 연결됨owl:versionInfo, owl:versionIRI, owl:priorVersion존재하며 SemVer에 맞음(무언가 깨졌으면 major 상향)
영향 + 보고 대상 범위 확정변경이 무엇을 건드리는지 — 기록, 형상, 질의 — 와 그것이 보고 대상 규제 변경인지CQ 재실행으로 닻을 내린 bp:ImpactAssessment평가가 기록됨; 어떤 ICH Q12 신고든 범위가 정해짐
FAIR 수용 가능출판된 에디션이 여전히 Findable, Accessible, Interoperable, Reusable함FAIR 점수표직전 에디션 점수 대비 후퇴 없음
서명 완료명명되고 책임 있는 사람이 출하를 승인함bp:ChangeApproval bp:approvedBy bp:SIG-steward서명 존재(OBO/IOF 규모에서는 상설 협의회의 것)

모든 줄이 통과할 때에만 그 버전이 유효해집니다. 로트에 대해서 그렇듯, 이 게이트를 지나서도 두 가지 정직함이 남습니다. 첫째, SHACL 출하 게이트가 그렇듯 이 체크리스트는 에디션이 완전하고 잘 형성되었음을 증명할 뿐, 그 모델링 결정이 정확함을 증명하지 않습니다 — 녹색 스위트는 새로 추가된 공리가 현실을 기술한다고 말해 주지 못하고, 스위트가 시험하는 무엇도 깨뜨리지 않았다고만 말해 줍니다. 한 층 위에서의 같은 정합적임은 정확함이 아니다 한계입니다. 둘째, 게이트는 필요조건이지 충분조건이 아닙니다: 책을 닫는 정직한 평결이 여전히 적용되는데, 거버넌스되지 않은 팀에서는 통과된 게이트조차 누군가 마감에 쫓겨 그것을 건너뛰는 순간 부패하기 때문입니다. 출하 게이트는 온톨로지가 또 한 번의 에디션 동안 의지받을 자격을 얻는 곳이며, 그것을 매번 돌리는 규율이 바로 다음 절이 어떤 도구도 공급할 수 없다고 인정하는 그 거버넌스입니다.

미해결 과제: 거버넌스는 사회적 문제이며, GxP 래퍼는 당신이 직접 지어야 한다

정직한 어려움은, 이 중 어느 것도 기술 문제가 아니며 기술이 당신을 대신해 풀어 줄 수 없다는 것입니다. 폐기, 버전 관리, LinkML 생성은 메커니즘입니다. 누군가가 실제로 변경 절차를 따르는지, 스튜어드십 역할에 인력을 배치하는지, 공유 어휘를 포크하려는 유혹에 저항하는지는 조직과 문화의 문제입니다. OBO 파운드리의 성공은 흔히 기술적 성취로 오독되지만, 실은 대체로 거버넌스의 성취입니다 — 조율하기로 합의하고 여러 해에 걸쳐 지속한 공동체 말입니다. 대다수 온톨로지 프로젝트가 실패하는 까닭은 OWL이 틀려서가 아니라, 아무도 그것을 소유하지 않았고, 마감 압박 속에 변경 절차가 건너뛰어졌으며, 모델이 그것이 기술하던 공장으로부터 표류해 결국 아무도 신뢰하지 않게 되었기 때문입니다. 조직적 규율을 위한 추론기는 없습니다.

두 번째 빈틈은 오픈소스 책이 솔직하게 말하는 것입니다. 개방형 표준은 깔끔한 엔진을 줄 뿐, 검증된 시스템(validated system)을 주지 않습니다. RDF, OWL, SHACL, LinkML은 성숙하고 무료이지만, GxP 검증된 온톨로지 — GAMP에 따라 변경 통제되고, 적재가 완전하고 올바름이 자격 인정되며, 트리플스토어에 대한 공급자 책임이 있고, 전체 수명주기가 감사 추적되는 것 — 는 당신이 짓거나 사들이는 래퍼이지, 가져다 쓰는 기능이 아닙니다 [3]. 그리고 진화하도록 의도된 것을 검증하는 일은, 학습 모델이 그러하듯 전통적인 일회성 검증에 부담을 줍니다. 모든 모델 변경은 새로 검증되어야 할 객체이고, 검증은 결코 완전히 끝나지 않습니다. 그래서 이 장이 세우는 기준은 냉철하면서도 이 책 전체의 핵심입니다. 시간에 걸친 모델의 올바름은 개방형 표준이 뒷받침하되 공급하지는 않는, 거버넌스된 인간의 실천이며, 거버넌스되지 않은 온톨로지는 — 아무리 우아하더라도 — 표류하다 자신만만한 거짓말쟁이가 되는 부채입니다. 거버넌스는 기술에 딸린 지루한 부록이 아닙니다. 그것은 기술을 신뢰할 수 있게 만드는 바로 그것입니다.

같은 거버넌스, 두 진화하는 산출물: 온톨로지와 학습 모델

그 유비는 끝까지 그려 둘 만합니다. 동반 ML 책이 반대 방향에서 동일한 해법에 도달하며, 두 규율이 결국 같은 패턴이 두 겹의 외투를 걸친 것임이 드러나기 때문입니다. GMP 공장의 통계 모델 역시 자유롭게 학습하도록 허용될 수 없습니다. 산업과 규제기관이 수렴한 답은 PCCP(사전 결정 변경 관리 계획 — 모델이 어떻게 재학습될 수 있는지, 어떤 합격 기준에 대해, 실패 시 어떤 롤백으로인지를 사전 승인하여 명세한 문서)가 다스리는 잠긴 모델(locked model)이며, 그래서 재학습은 조용한 표류가 아니라 계획되고 문서화된 사건입니다. 둘을 나란히 놓으면 대응은 정확합니다. owl:versionIRI 더하기 폐기하되 삭제하지 않음이 진화하는 온톨로지에 대해 갖는 의미는, 잠긴 모델 더하기 그 PCCP가 진화하는 예측기에 대해 갖는 의미와 같습니다 — 둘 다 고정되고 명명된 판본을 못박고, 둘 다 제자리 덮어쓰기를 금하며, 둘 다 모든 변경을 서명된 기록을 남기는 통제된 행위로 만듭니다. 모든 변경에서 다시 실행되는 CQ 수용 스위트(위 3단계)는 MLOps 용어로 온톨로지의 회귀 테스트이며, 잠긴 모델이 새 버전으로 승격되기 전에 그 홀드아웃 게이트에 비추어 다시 채점되는 것과 정확히 같습니다 [3]. 여기서 거버넌스는 두 개의 문제가 아니라, 둘 다 가만히 있기를 거부하는 두 산출물에 적용된 하나의 문제입니다.

그래프가 모델의 그라운드 트루스일 때, 온톨로지 변경은 데이터 변경이다

더 깊은 연결은 반대 방향으로 흐릅니다. AI 프런티어에서 이 거버넌스된 그래프는 ML 시스템이 딛고 서는 그라운드 트루스(ground truth)입니다 — 검색 증강 모델이 그라운딩되는, SHACL로 검증되고 버전이 고정된 기반이며, 점점 더 모델이 학습하는 라벨링된 인스턴스 집합이기도 합니다. 이는 온톨로지 상향을 그 하류의 모든 것에 대한 문제로 재구성합니다. bp:monomerPurity를 사물화된 클래스에서 스칼라 bp:monomerPct로 재타입하는 것은 단지 IRI 하나를 은퇴시키는 데 그치지 않습니다. 그것은 그래프 위에서 학습된 모든 모델의 특징 계약(feature contract)을 바꾸므로, 거버넌스된 변경은 모델 자체의 변경 관리로 전파되어야 합니다 — owl:versionIRI 2.0.0에 고정된 모델 카드는 이제 낡았고, 옛 셰이프를 순회하던 검색 프롬프트는 조용히 아무것도 검색하지 못합니다. 이 인스턴스들 위에서 학습하는 모델의 정직한 테스트 또한 온톨로지가 명시적으로 만드는 바로 그 계보에 의해 제약됩니다. 그래프의 기록이 배치로 그룹화되어 있으므로(모든 값이 그 BATCH-2026-001 계보를 bp:derivedFrom), 행을 무작위로 분할하는 평가는 한 배치의 성격을 학습/시험 경계 너머로 누출시켜 점수를 부풀립니다. 그래서 인스턴스들 위에서 학습하는 일은 배치를 하나씩 빼는(leave-one-batch-out) 그룹 교차 검증, 즉 ML 책의 배치 그룹 분할을 요구합니다 — 온톨로지의 계보 척추야말로 애초에 그 그룹화를 계산 가능하게 만드는 것입니다. 그리고 검증의 역설은 그 경계에서 날카로워집니다. 추론된 그래프는 학습된 모델이 결코 가질 수 없는 논리적 보증을 지닙니다 — SHACL에 부합하는 출하 부분 그래프는 증명 가능하게 완전하고 제대로 타입 부여되어 있는 반면, 모델의 정확도는 언제나 그것이 우연히 본 배치들에 대한 추정일 뿐입니다. 따라서 이 장이 요구하는 거버넌스는 단지 MLOps와 유비적인 것이 아닙니다. 그것은 하류 모델을 신뢰할 수 있게 만드는 바로 그 층입니다. 거버넌스되지 않은 그래프에 그라운딩된 모델은 그 그래프가 쌓이도록 허용된 모든 표류를 물려받아 — 그것을 유창하게, 사실로서 되읊기 때문입니다.

왜 중요한가

이 책이 제시한 모든 보장 — 질의 가능한 계보, 강제 가능한 출하, 상호운용 가능한 의미 — 은 모델이 진실하게 유지된다고 조용히 가정했으며, 그 가정은 그 뒤에 있는 거버넌스만큼만 견실합니다. 버전을 매기고 제대로 폐기하면 10년 된 기록이 판독 가능한 상태로 남고, 통제 아래 변경하면 모델이 결코 조용히 거짓말하지 않으며, 단일 출처에서 저작하면 스키마가 서로 어긋날 수 없고, 협의회로 관장하면 공유 어휘가 공유된 채로 남습니다. 거버넌스를 건너뛰면, 공장에서 가장 정교한 그래프가 스프레드시트보다 더 빠르게 신뢰할 수 없게 됩니다. 그 자신만만한 구조가 자신의 부패를 숨기기 때문입니다. 거버넌스는 모델이 의지될 권리를 얻는 지점이며, 그래서 규제 환경은 그 아래에 깔린 데이터 무결성만큼이나 거버넌스를 요구합니다.

실제 현장에서는

협의회가 거버넌스하는 온톨로지는 입증된 모델입니다 — OBO 파운드리는 거의 20년간 생의학 온톨로지들을 조율해 왔고, IOF와 그 바이오제약 협의회는 같은 규율을 제조에 적용합니다 [2]. LinkML은 주요 데이터 조율 활동에서 운영 중이며, 하나의 출처에서 하류 스키마를 생성합니다 [1]. 그리고 GAMP 5 하의 전산 시스템 검증은 규제 대상 제조사가 이미 소프트웨어에 적용하는 확립된 프레임워크입니다 — 그것을 온톨로지와 그 적재까지 포괄하도록 확장하는 것이 현재 진행 중인 최전선입니다 [3]. 어떤 표준도 당신에게 건네주지 않는 것은 거버넌스하려는 의지입니다. 인력이 배치된 스튜어드십, 강제되는 변경 절차, 저항된 포크 말입니다. 그것은 경영진의 약속이며, 한 공장의 온톨로지가 5년 뒤 자산이 될지 아니면 아무도 신뢰하지 않는 방치된 그래프가 될지를 가르는 단 하나의 가장 좋은 예측 변수입니다.

개방형 표준이 결코 언급하지 않는 한 가지 규율은 주기적 검토(periodic review)입니다. GxP 품질 시스템에서 통제 전략과 그 통제 문서는 무언가가 바뀔 때만이 아니라 일정에 따라 재확인됩니다 — 그리고 공장의 통제된 어휘 그 자체인 온톨로지는 그 의무를 물려받습니다. 지속적 공정 검증 추세가 정상 운영 범위를 바꾸거나, 새로운 수지 공급사나 세포주 서브클론이 공정에 들어올 때, 누군가는 모델이 여전히 가동 중인 공장을 기술하는지 아니면 조용히 그것에 뒤처졌는지를 다시 물어야 합니다. 따라서 거버넌스 고리는 두 개의 고리입니다. 이 장이 해부한 사건 주도 변경과, 아무도 변경을 제기하지 않은 표류를 잡아내는 일정에 따른 검토 말입니다. 바닥에 비추어 결코 주기적으로 재확인되지 않는 모델은 바로 이 장이 경고하는 자신만만한 거짓말쟁이입니다 — 알아차리는 데 더 오래 걸릴 뿐입니다.

핵심 용어

  • 폐기하되 삭제하지 않는다(deprecate, don't delete) — IRI는 한 번 발행되면 결코 제거되지 않고 폐물로 표시되어 그 대체물을 가리키므로, 과거 기록이 해석 가능한 상태로 남는다는 규칙.
  • (모델의) 변경 통제(change control) — 온톨로지 변경을 조용한 파일 편집이 아니라 제안되고, 영향이 평가되고, 검토되고, 버전이 매겨지고, 서명된 행위로 다루는 것.
  • 협의회 거버넌스(council governance) — 공유 어휘를 조율 기구가 발행된 원칙(OBO 파운드리, IOF, BMIC)에 따라 관장하여, 아무도 그 의미를 소유하지 않고 변경이 조율된 채로 유지되게 하는 것.
  • 단일 출처 저작(LinkML)(single-source authoring) — YAML로 한 번 모델링하고 거기서 SHACL, JSON Schema, SQL, OWL을 생성하여, 하류 스키마가 표류하는 대신 재생성되게 하는 것.
  • GxP 래퍼(GxP wrapper) — 개방형 표준 엔진을 둘러싼, 검증되고 변경 통제되며 자격 인정된 시스템. 가져다 쓰는 것이 아니라 짓거나 사들이는 것.
  • 사회적 문제로서의 거버넌스(governance as a social problem) — 폐기, 버전 관리, 생성은 메커니즘인 반면, 소유, 규율, 포크에 대한 저항은 어떤 기술도 공급하지 못하는 조직적 약속이라는 인식.
  • 잠긴 모델 + PCCP(locked model + PCCP) — 온톨로지의 owl:versionIRI 더하기 폐기하되 삭제하지 않음을 거울처럼 비추는 ML 거버넌스 패턴(고정된 모델 더하기 그것이 어떻게 재학습될 수 있는지를 정한 사전 결정 변경 관리 계획). 둘 다 명명된 판본을 못박고 모든 변경을 통제되고 서명된 행위로 만든다.
  • 데이터 변경으로서의 온톨로지 변경(ontology change as a data change) — 거버넌스된 그래프가 모델의 그라운드 트루스일 때, 용어를 재타입하거나 폐기하는 것이 하류 모델의 특징 계약을 바꾸므로, 그 상향이 모델 자체의 변경 관리로 전파되어 배치를 하나씩 빼는 재검증을 촉발해야 한다는 원칙.
  • 온톨로지 출하 게이트(ontology release gate) — 모델의 새 에디션이 출하되도록 승인하는 go/no-go 리뷰: 23개 CQ 수용 스위트 녹색, OOPS!/안티패턴 스캔 깨끗, 어떤 IRI도 삭제·재의미화되지 않음, 버전 고정, 영향과 보고 대상 범위 확정, FAIR 점수표 후퇴 없음, 그리고 서명된 bp:ChangeApproval — 완제의약품 출하 게이트의 규율을 모델 자체에 적용한 것.

다음 이야기

우리는 모델을 거버넌스하여 그것이 진실하게 유지되도록 할 수 있습니다. 그러나 "공장에 충실함"은 "세상에 유용함"과 같지 않습니다 — 완벽하게 거버넌스된 그래프도 그것을 정당화했던 목표에서 여전히 실패할 수 있습니다. 다음 장 유지보수: 발행, 조립된 실타래, 그리고 FAIR는 FAIR 원칙을 열망에서 측정으로 바꾸고, 그래프가 진정으로 찾을 수 있고, 접근 가능하며, 상호운용 가능하고, 재사용 가능한지를 묻고, 표준 준수와 실제 FAIR함 사이에 잘 기록된 불편한 간극을 마주합니다.