포장과 일련번호 부여의 모델링: GS1과 단위 정체성
📍 현재 위치: 5부 · 충전·마감과 출하의 모델링 — 19장. 로트가 출하 허가를 받았습니다. 이 장에서는 그것을 세상으로 내보내기 위한 포장을 모델링합니다 — 의약품이 마침내 개별적으로 식별되는 단품이 되는 곳이자, 그래프의 정체성 시스템이 공급망 전체를 위해 만들어진 또 하나의 정체성 시스템과 만나는 곳입니다.
충전·마감 장은 단품 수준의 정체성이 다가오고 있다고 예고했습니다. 여기서 그것이 도착합니다. 일련번호 부여(serialization)는 — 전 세계 추적·이력관리 규제가 요구하는 것으로 — 판매 가능한 모든 단위에 전역적으로 고유한 식별자를 부여하고, 집계(aggregation)는 어떤 단위가 어떤 종이 상자에, 어떤 종이 상자가 어떤 케이스에, 어떤 케이스가 어떤 팔레트에 담기는지를 기록합니다 [3]. 처음으로 모델은 로트보다 아래로, 즉 단일 단품 수준으로 개별화합니다 — 그리고 그것을 우리의 bp: 온톨로지보다 앞서 존재하며 그와 별개로 서 있는 전역 정체성 시스템인 GS1 표준을 사용해 해야 합니다. 흥미로운 모델링 작업은 단품 정체성을 발명하는 것이 아니라, 서로 다른 목적으로 만들어졌지만 이제 같은 바이알을 기술하게 된 두 정체성 시스템을 조화시키는 것입니다.
지금까지 우리는 책의 한 인쇄 판본을 추적하듯 바이알의 배치(batch)를 추적해 왔습니다. 일련번호 부여란 모든 개별 사본에 자신만의 바코드를 부여하고, 어떤 사본이 어떤 상자에, 어떤 상자가 어떤 팔레트에 들어갔는지를 기록하는 것입니다 — 그래서 단 한 부의 사본도 인쇄소에서 매장 선반까지 따라갈 수 있게 됩니다. 의약품은 위조를 막고 리콜을 가능하게 하기 위해 반드시 이렇게 해야 합니다. 우리 모델에게 까다로운 점은 이것입니다. 세상에는 이미 이를 위한 바코드 시스템(GS1)이 자신만의 명명 방식을 갖고 존재하고, 우리 온톨로지에는 우리만의 방식이 있다는 것입니다. 이 장은 어느 쪽도 항복하도록 강요하지 않으면서 같은 바이알에 대해 둘이 서로 일치하게 만듭니다.
이 장에서 다루는 내용
우리는 GS1 아래의 일련번호 부여 단위(serialized unit), 봉쇄(containment) 구조로서의 집계 계층(aggregation hierarchy)(단품 → 종이 상자 → 케이스 → 팔레트), 그리고 포장과 출하를 기록하는 EPCIS 사건(EPCIS events)을 모델링합니다. 일련번호 부여 단위를 해부하고, 이 장의 무게를 두 정체성 시스템 — 온톨로지의 derivedFrom 계보와 GS1의 단품 키 — 을 조화시키는 데, 그리고 단품 수준 추적이 만들어 내는 사건 규모와 로트 대 단품의 긴장에 둡니다.
일련번호 부여는 단위에 전역 정체성을 부여한다
의약품 단위를 위한 GS1 일련번호 식별자는 제품 정체성 — GTIN(국제거래단품식별코드, Global Trade Item Number) — 과 고유한 일련번호(serial number)를 결합해 단품별 키(GS1 용어로 SGTIN)를 형성합니다 [1]. 모델링하면, 각 일련번호 부여 단위는 자신의 완제 의약품 로트로부터 derivedFrom인 물질 개체(material entity)입니다 — 그래서 이 책 내내 로트 수준에 머물러 있던 개별화(individuation)가 마침내 단품 수준까지 확장됩니다. 결정적으로, 일련번호 부여 단위는 자신의 품질과 계보를 로트를 통해 상속합니다. 그래프는 모든 바이알에 출하 결과를 다시 붙일 필요가 없습니다. 각 바이알이 DP-001로부터 derivedFrom이고, DP-001이 출하 판정을 지니고 있기 때문입니다. 이것이 바로 전이적 derivedFrom이 선언된 목적 그대로 작동하는 모습입니다 — 로트에서 한 번 입증된 속성이 만 번을 다시 진술하지 않고도 만 개의 단품으로 전파됩니다.
이를 풀어 쓰면, 일련번호가 부여된 바이알 하나는 데이터셋 안의 진짜 개체입니다 — bp:VIAL-DP-001-000042로, bp:SerializedUnit으로 타입이 지정되며(로트 수준 출하 게이트가 모든 바이알을 다시 검사하지 않도록 의도적으로 bp:DrugProduct가 아닙니다) — 출하 허가를 받은 로트 bp:DP-001로부터 bp:derivedFrom이고, 자신의 GS1 단품 키를 지니며, 안전한 skos:exactMatch로 SGTIN URN에 교차 연결됩니다:
@prefix bp: <https://example.org/bioproc#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
bp:VIAL-DP-001-000042 a bp:SerializedUnit ; rdfs:label "serialized vial 000042 of lot DP-001" ;
bp:derivedFrom bp:DP-001 ;
bp:hasIdentityKey bp:SGTIN-DP-001-000042 ;
skos:exactMatch <urn:epc:id:sgtin:0614141.812345.000042> . # SAFE cross-system match; the URN value is ILLUSTRATIVE (placeholder GS1 prefix/serial)
bp:SGTIN-DP-001-000042 a bp:GS1ItemKey ; rdfs:label "SGTIN for vial 000042" .
bp:derivedFrom이 owl:TransitiveProperty이기 때문에, 이 단 하나의 엣지로 충분합니다. 추론기는 바이알을 bp:DP-001을 거쳐 bp:DS-001까지, 그다음 진짜 단위 공정별 중간 산물들 — POLpool-001, VFpool-001, VIpool-001, PApool-001, CLAR-001, BATCH-2026-001, SEED-001, SEEDFLASK-001 — 을 거쳐, 다시 세포은행 WCB-CHO-001, MCB-CHO-001, RCB-CHO-001까지 거슬러 따라갑니다. DS-001에서 시작한 계보 추적은 11개의 조상을 반환하며, 로트의 bp:releaseStatus "PASS"와 그 98.611 % 단량체 측정값은 바이알에 다시 진술되지 않고도 바이알에서 도달할 수 있습니다.
집계(aggregation)는 두 번째 구조입니다. 일련번호 부여 단위는 종이 상자에, 종이 상자는 케이스에, 케이스는 팔레트에 담기며, 각 층위는 derivedFrom과는 구별되는 부모-자식 봉쇄(containment) 관계입니다(종이 상자는 자신의 바이알로부터 파생되는 것이 아니라 그것을 담습니다). 데이터셋에서 이것은 진짜 bp:contains 속성입니다 — 그 자체로 owl:TransitiveProperty이지만, 봉쇄는 가변적이고 계보가 아니기 때문에 의도적으로 derivedFrom의 하위 속성이 아닙니다:
# Aggregation hierarchy: vial -> carton -> case -> pallet (containment, NOT lineage).
bp:CARTON-001 a bp:Carton ; rdfs:label "carton C-001" ; bp:contains bp:VIAL-DP-001-000042 .
bp:CASE-001 a bp:Case ; rdfs:label "case CS-001" ; bp:contains bp:CARTON-001 .
bp:PALLET-001 a bp:Pallet ; rdfs:label "pallet P-001" ; bp:contains bp:CASE-001 .
queries/containment.rq의 포장 봉쇄 추적은 "이것은 지금 이 순간 무엇 안에 담겨 있는가?"라는 질문에 bp:contains+로 답하며, 이는 계보 추적의 derivedFrom+을 비춘 거울입니다. 봉쇄를 계보와 별개로 모델링하면 두 가지 서로 다른 질문에 답할 수 있는 상태가 유지됩니다. "이것은 무엇으로 만들어졌는가?"(계보)와 "이것은 지금 이 순간 무엇 안에 담겨 있는가?"(봉쇄)입니다 — 그리고 후자는 포장이 열리고 재포장됨에 따라 바뀌지만, 계보는 결코 바뀌지 않습니다.
EPCIS 사건: 공급망은 일어남으로 말한다
추적·이력관리는 근본적으로 사건(events)에 관한 것입니다 — 이 단위가 이 장소에서 이 시각에 저 케이스에 담겼다, 이 팔레트가 저 유통업체로 출하되었다. GS1의 EPCIS 표준은 바로 이러한 사건을 위한 어휘이며, 온톨로지 용어로 보면 그것은 발생자(occurrents)의 모델입니다. 각 포장, 출하, 입고는 참여자(단품들), 위치, 시각을 가진 하나의 일어남입니다 [2]. 데이터셋은 이 셋 모두를 진짜 개체로 담고 있습니다 — bp:COMMISSION-001(하나의 bp:CommissioningEvent), bp:AGGREGATE-001(하나의 bp:AggregationEvent), bp:SHIPEVENT-001(하나의 bp:ShippingEvent) — 각각은 bp:EPCISEvent의 하위 클래스이고, bp:EPCISEvent는 그 자체로 bp:Process의 하위 클래스이며, 각 사건은 bp:eventHasParticipant를 통해 바이알에 연결됩니다:
# EPCIS events as occurrents continuous with the manufacturing processes.
bp:COMMISSION-001 a bp:CommissioningEvent ; rdfs:label "commission vial 000042" ;
bp:eventHasParticipant bp:VIAL-DP-001-000042 .
bp:AGGREGATE-001 a bp:AggregationEvent ; rdfs:label "aggregate vials into carton" ;
bp:eventHasParticipant bp:VIAL-DP-001-000042 .
bp:SHIPEVENT-001 a bp:ShippingEvent ; rdfs:label "ship pallet P-001" ;
bp:eventHasParticipant bp:VIAL-DP-001-000042 .
이것은 상위 척추(spine)의 발생자 측면과 자연스럽게 정렬됩니다 — bp:EPCISEvent가 bp:Process이기 때문에, EPCIS의 커미셔닝이나 집계 사건은 제조 공정과 나란히 자리하며, 그래서 동일한 모델이 의약품을 만드는 일과 옮기는 일에 걸쳐 펼쳐집니다. 따라서 일련번호 부여 이야기는 별도로 덧붙인 시스템이 아닙니다. 그것은 제조 그래프의 발생자가 공장 담장을 넘어 공급망 안으로 계속 이어지는 것입니다.
일련번호 부여 단위를 풀어 본 모습: 온톨로지 IRI와 상호 연결된 GS1 단품 키가 자신의 로트로부터 파생되고(출하 품질을 전이적으로 상속하며), 계보와 구별되는 봉쇄 계층 안에 중첩되어 있으며, EPCIS 사건이 공급망 발생자로 모델링되어 있습니다.
저자가 AI의 도움을 받아 직접 제작한 그림입니다.
미해결 과제: 두 정체성 시스템, 그리고 단품의 규모
깊은 난제는 정체성 조화(identity reconciliation), 즉 1부에서 다룬 정체성의 미해결 절반이 이제 가장 첨예한 형태로 드러난 것입니다. GS1 키와 온톨로지 IRI는 둘 다 정당한 전역 정체성 시스템으로, 서로 다른 공동체가 서로 다른 일을 위해 설계한 것입니다. GS1은 거래와 추적·이력관리를 위해, RDF IRI는 의미적 상호 운용성을 위해서입니다. 둘은 서로 바꿔 쓸 수 없고, 어느 한쪽이 다른 쪽을 포섭하지도 않습니다. 모델은 둘이 어떻게 관계 맺는지를 결정해야 합니다 — SGTIN은 온톨로지 개체의 속성인가, 아니면 SGTIN과 IRI는 매핑(mapping)이 공동 지시 대상(co-referent)으로 선언하는 두 이름인가? 성급한 owl:sameAs로 이를 잘못 처리하면 1부가 경고한 오염을 무릅쓰게 되고, 제대로 하면 하나의 바이알은 상호 운용 가능한 두 이름을 가진 하나의 사물이 됩니다. GS1과 RDF 정체성을 잇는 정착된 단일 패턴은 없으며, 이는 해결되어 가져오기만 하면 되는 문제가 아니라 살아 있는, 실재하는 통합 문제입니다.
이것은 바로 식별자 장이 그렸던 owl:sameAs 대 skos:exactMatch 선택이며, 이제는 바이알의 온톨로지 IRI와 그 GS1 단품 키 사이의 선택입니다. 아래 SGTIN은 urn:epc:id:sgtin: URN으로 쓰였고 예시로 표시되었습니다 — 이 데이터셋에서 GS1 키는 정규의 해소 가능한 IRI를 갖지 않으므로, 그 연결은 더 안전한 skos:exactMatch입니다. 이것은 owl:sameAs가 그러하듯 양방향의 모든 사실을 융합하지 않으면서 두 이름이 대응한다는 것을 기록합니다:
@prefix bp: <https://example.org/bioproc#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
# The SGTIN URN VALUE is ILLUSTRATIVE (placeholder GS1 prefix/serial);
# GS1 has no canonical resolvable IRI here.
# SAFE — the GS1 item key and the ontology IRI line up, without claiming
# entity identity, so a bad cross-system match degrades this one mapping
# rather than propagating false facts across the whole lineage.
bp:VIAL-DP-001-000042 skos:exactMatch <urn:epc:id:sgtin:0614141.812345.000042> .
여기서의 규율은 식별자 장의 것이며, 전체 공정에서 가장 소비자와 맞닿은 가장자리에 적용됩니다. 두 시스템이 동일한 개체를 지시한다고 확신하지 못하는 한 더 약한 연결에 손을 뻗으십시오. GS1 키와 온톨로지 IRI 사이의 성급한 owl:sameAs야말로 공급망에서 가장 많이 스캔되는 식별자가 그것에 의미를 부여하는 계보를 오염시킬 수 있는 정확한 경로이기 때문입니다.
두 번째 어려움은 규모(scale)입니다. 단품 수준 추적은 개체 수를 자릿수 단위로 늘립니다 — 하나의 로트가 수만 개의 일련번호 부여 단품이 되고, 각각이 커미셔닝·집계·출하 사건을 생성하며, 집계는 공급망을 따라 내려가면서 깨지고 다시 만들어지므로(케이스가 열리고 단위가 재포장되며) 집계 해제(disaggregation) 사건도 생성됩니다. 그 모든 것을 하나의 의미 그래프에 담는 것은 거의 실용적이지 않습니다. 실제로 일련번호 부여 데이터는 전용 대용량 추적·이력관리 시스템(흔히 EPCIS 저장소)에 살고, 온톨로지 그래프는 모든 단품 사건을 받아들이는 대신 로트와 집계 구조를 참조합니다. 이것은 다시 색인 대 적재(index-versus-payload) 경계이며, 이번에는 공급망 사건을 위한 것입니다. 그래프는 계보와 로트-단품 다리를 담고, 사건의 소방 호스(firehose)에 대해서는 추적·이력관리 시스템을 가리킵니다. 정직한 기준은 이렇습니다. 단품 정체성과 집계는 모델링할 수 있고 제조에서 공급망으로 이어지는 발생자 연속성은 실재하지만, 규모가 똑같이 삼키지 말고 색인하라는 규율을 강요하며, GS1-IRI 조화는 여전히 진짜로 끝나지 않은 통합 과제로 남아 있습니다.
왜 중요한가
일련번호 부여는 계보가 환자가 받는 개별 단위에까지 도달하는 곳으로, 하류 공정 전체가 쌓아 온 단품 수준 개별화를 완성하며, 제조 그래프가 공급망에 연결되느냐 아니면 하역장에서 멈추느냐가 갈리는 곳입니다. SGTIN-로트 다리를 모델링해 품질과 계보가 전이적으로 상속되게 하면, 현장에서 스캔된 단 하나의 바이알이 자신의 로트, 자신의 원료의약품을 거쳐 세포은행까지 거슬러 추적될 수 있습니다 — 환자에서 기원까지 이어지는 온전한 실타래입니다. GS1과 IRI 정체성을 깔끔한 조화로 모델링하면 두 세계가 상호 운용되고, 그르치면 전체 공정에서 가장 소비자와 맞닿은 식별자가 충돌하거나, 그것에 의미를 부여하는 계보로부터 떨어져 떠돌게 됩니다. 이 장은 추적성이 단위별이자 전역적인 것이 되는 곳입니다.
실제 현장에서는
GS1 아래의 일련번호 부여와 집계는 EPCIS를 통해 보고되며, 추적·이력관리 규제 — 미국 의약품 공급망 보안법(Drug Supply Chain Security Act)과 EU 위조의약품지침(Falsified Medicines Directive)을 포함해 — 가 의무화하고, 모든 상업용 의약품에 대해 살아 있는 일상 운영입니다 [1][2][3]. 그 인프라는 거대한 규모로 존재합니다. 표준화되지 않은 것은 그것을 제조 지식 그래프에 의미적으로 결합해, 단위의 공급망 정체성과 그 생산 계보가 스프레드시트의 로트 번호로 이어진 두 시스템이 아니라 하나로 연결된 이야기가 되도록 만드는 일입니다. GS1과 시맨틱 웹 정체성을 조화시키는 일은 표준 공동체에서 진짜 과제로 인정받고 있으며, 바로 이 책의 계보 그래프와 세상의 추적·이력관리 시스템이 만나야 하는 최전선입니다. 7부는 GS1을 더 넓은 생태계 안에 놓습니다 — Allotrope가 실험실을, IOF 온톨로지가 공정 현장을 차지하듯 패키지를 차지하는 수렴된 식별 백본(2D 데이터매트릭스에 인코딩된 GTIN·일련번호·GLN과, 사건 교환을 위한 EPCIS)을 말입니다.
핵심 용어
- 일련번호 부여(Serialization) — 판매 가능한 각 단위에 전역적으로 고유한 식별자(GS1 SGTIN: GTIN 제품 키에 고유 일련번호를 더한 것)를 부여하는 것으로, 추적·이력관리 규제가 요구한다.
- GTIN / SGTIN — GS1 국제거래단품식별코드(제품 정체성)와 그것을 일련번호화한 단품별 형태.
- 집계 / 봉쇄(Aggregation / containment) — 단품 → 종이 상자 → 케이스 → 팔레트의 포장 계층으로,
derivedFrom계보와 구별되는 봉쇄 관계로 모델링되며 포장이 열리고 재포장됨에 따라 가변적이다. - EPCIS — 공급망 사건(커미셔닝, 집계, 출하)을 위한 GS1 표준으로, 제조 공정과 연속적인 발생자로 모델링된다.
- 두 정체성 조화(Two-identity reconciliation) — GS1 단품 키와 온톨로지 IRI(둘 다 전역 정체성 시스템)를 성급한
owl:sameAs없이 관계 맺어, 바이알이 상호 운용 가능한 두 이름을 가진 하나의 사물이 되게 하는 미해결 문제. - 단품 수준 규모(Item-level scale) — 단위별 추적이 일으키는 자릿수 단위의 개체·사건 폭증으로, 그래프가 로트와 집계 구조를 색인하는 한편 사건의 소방 호스에 대해서는 대용량 추적·이력관리 시스템을 참조하도록 강요한다.
다음 이야기
의약품은 일련번호가 부여되고, 집계되고, 출하 준비를 마쳤습니다 — 모든 단위가 고유하게 식별되고 자신의 계보에 연결되었습니다. 5부의 마지막 장 유통과 환자까지의 콜드체인 모델링은 단위들을 공장 바깥으로 완전히 따라갑니다 — 온도 통제 유통으로, 조직 경계를 넘어, 환자를 향해 — 그리고 디지털 실타래가 자신을 만든 그래프를 떠나 당신이 통제하지 못하는 시스템에 실려 가야 할 때 무슨 일이 벌어지는지를 마주합니다.