본문으로 건너뛰기

데이터 무결성과 ALCOA+

📍 현재 위치: 우리는 구조와 의미를 갖춘 채로 시스템 사이에서 데이터를 옮기는 법을 배웠습니다. 이제 더 어려운 질문을 던질 차례입니다 — 데이터가 도착했을 때 그 기록을 신뢰할 수 있을까요?

이전 장 연결성과 상호운용성 표준(Connectivity and Interoperability Standards)에서는 바이오 의약품 제조 데이터가 기계와 협력사 사이에서 어떻게 흐르는지를 — OPC UA, MTP, SiLA 2, AnIML과 Allotrope, B2MML/ISA-95 — 보여 주었고, 바이트를 옮기는 일과 의미를 보존하는 일 사이에 뚜렷한 선을 그었습니다. 그러나 그보다 더 깊은 선이 하나 더 있습니다. 어떤 기록은 완벽하게 형식이 갖춰지고, 의미적으로 풍부하면서도, 전혀 신뢰할 수 없는 상태로 도착할 수 있습니다. 센서 측정값이 슬그머니 수정되었다면, 불합격 시험을 합격할 때까지 반복했다면, 두 명의 작업자가 하나의 로그인을 공유해서 누가 무엇을 했는지 아무도 모른다면 — 그 데이터는 잘 다듬어진 거짓말입니다. 이 장은 데이터를 단지 전송 가능하게 만드는 것이 아니라 참되게 만드는 일에 관한 것입니다.

쉽게 말하면

데이터 무결성(data integrity)을 법정에서 증거의 보관 연속성(chain of custody)에 비유해 보세요. 증거가 존재하는 것만으로는 충분하지 않습니다 — 누가, 언제 그것을 다루었는지, 한 번도 조작되지 않았는지, 그리고 배심원이 보는 것이 진품인지를 입증해야 합니다. 배치 기록(batch record)은 어떤 의약품이 올바르게 만들어졌다는 증거입니다. 데이터 무결성은 그 증거를 믿을 수 있게 만드는 보관 연속성입니다.

이 장에서 다루는 내용

우리는 데이터 무결성을 정의하고, 규제 당국이 왜 그것을 제품 품질의 토대로 다루는지를 살펴봅니다. 신뢰할 수 있는 데이터의 아홉 가지 속성인 ALCOA+를 아홉 가지 설계 요건으로 풀어 보고, 그것들이 어떻게 하나의 감사 추적 기록의 열(column)들로 응축되는지 지켜봅니다. 데이터 무결성이 무너지는 흔한 방식들과 ALCOA+ 아키텍처가 그 각각을 어떻게 무력화하는지, 이를 해결하기 위해 한데 모인 전 세계적 지침의 물결, 사후에 단속하기보다 설계 단계에서부터 무결성을 갖춰 넣는다는 개념, 그리고 조직 경계를 넘어 실시간으로 무결성을 한데 묶어 유지한다는, 진정으로 미해결인 문제를 두루 살펴봅니다.

데이터 무결성이 의미하는 바, 그리고 그것이 토대인 이유

데이터 무결성(data integrity)은 데이터가 생성되는 순간부터 처리와 저장을 거쳐 최종적으로 보관(archiving)되고 검색되기까지 — 그 전체 수명 동안 — 완전하고, 일관되며, 정확하게 유지되는 정도입니다 [2]. 그 수명 주기 자체는 별도의 장 데이터 포인트의 수명 주기의 주제입니다. 여기서 우리가 묻는 것은 값이 어디로 이동하는가가 아니라, 그 여정의 각 단계가 값을 신뢰할 수 있게 남기는가입니다. 규제 당국은 이를 사무적인 사소한 절차로 다루지 않습니다. 그들은 이를 제품 품질의 기반암으로 다루는데, 어떤 의약품이 안전하게 만들어졌다는 증거란 결국 그것을 만드는 동안 생성된 데이터이기 때문입니다. 환자는 항체를 직접 검사할 수 없습니다. 규제 당국은 1년간의 제조를 다시 돌려볼 수 없습니다. 둘 다 기록에 의존해야 합니다. 기록을 신뢰할 수 없다면, 안전성이나 유효성에 관한 어떤 주장도 신뢰할 수 없습니다 [1].

세계보건기구(World Health Organization)는 이를 분명하게 표현합니다. 데이터 무결성을 보증하려면 적절한 품질 및 리스크 관리 시스템과 우수 문서화 관행(good documentation practices)이 데이터 수명 주기 전반에 걸쳐 적용되어야 한다는 것입니다 [4]. 유럽 의약품청(European Medicines Agency)은 한 걸음 더 나아가, 데이터 무결성을 제약 품질 시스템의 근본적 요건이라고 부르며, 이것이 종이 기록과 전자 기록에 똑같이 적용되고, 고위 경영진과 조직의 품질 문화가 책임져야 할 사안이라고 말합니다 [5].

ALCOA와 ALCOA+: 신뢰할 수 있는 데이터의 해부

아홉 가지 설계 요건으로서의 ALCOA+

ALCOA+를 사후에 감탄할 아홉 개의 형용사가 아니라, 시스템이 첫 기록을 쓰기 전에 충족해야 하는 아홉 가지 설계 요건으로 읽는 편이 도움이 됩니다. 아래의 각 속성은 결국 데이터베이스 어딘가의 구체적인 열, 제약 조건, 또는 통제로 귀결됩니다 — 이것이 바로 오픈소스 구현 코드로 ALCOA+ 무결성 구축하기가 그것들을 렌더링하는 방식입니다. 아홉 가지 속성이 하나의 감사 추적 테이블의 열들이 됩니다. 목록을 읽고, 그다음에 그 테이블을 읽으십시오.

ALCOA라는 약어는 1990년대에 미국 FDA 내부에서 우수 실험실 관리 기준(Good Laboratory Practice, 미국 연방규정집(Code of Federal Regulations) 제21편인 21 CFR Part 58에 따른 비임상 안전성 시험 — 의약품을 사람에게 시험하기 전에 수행하는 동물 및 실험실 연구 — 규정)을 담당하던 관리자 스탠 울런(Stan Woollen)이, 좋은 데이터가 어떤 모습인지에 관한 자신의 발표를 정리하기 위한 개인적 기억법으로 만들었습니다 — 원래는 데이터 품질을 돕는 수단이었으나 이후의 지침이 이를 데이터 무결성의 근간으로 채택했습니다 [8]. 이는 귀속 가능(Attributable), 판독 가능(Legible), 동시 기록(Contemporaneous), 원본(Original), 정확(Accurate)을 뜻합니다. 이후의 지침은 네 가지 속성을 더 추가했는데 — 완전(Complete), 일관(Consistent), 영속(Enduring), 가용(Available) — 이로써 ALCOA+가 됩니다 [2]. 각각을 바이오리액터 — 의약품을 만들기 위해 살아 있는 세포를 배양하는 통제된 용기 — 에 근거해 살펴보겠습니다.

  • 귀속 가능(Attributable)누가 무엇을 하거나 기록했는지, 그리고 언제 했는지를 알 수 있습니다. 작업자가 공급 속도(feed rate)를 조정하면, 기록은 그 사람의 이름을 밝혀야 합니다. 이것이 공유 로그인이 금지되는 이유이며, 전자 서명(electronic signature) — 요구되는 통제가 충족될 때 손으로 쓴 서명과 법적으로 동등한 것 — 이 읽을 수 있는 평이한 형태로 서명자의 정자 이름, 날짜와 시각, 그리고 서명의 의미(예: 검토(reviewed), 승인(approved), 작성(authored))를 반드시 표시해야 하는 이유입니다 [3]. 구속력 있는 전자 서명의 전체 기제 — 고유성, 부인 방지(non-repudiation), 그리고 서명 매니페스트(signature manifest) — 는 다음 장의 주제입니다. 여기서는 그것이 오로지 귀속 가능의 인간적 얼굴로서만 의미를 가집니다.
  • 판독 가능(Legible) — 기록은 읽을 수 있고 영구적이며, 보존 기간 내내 그 상태를 유지합니다. 지울 수 있는 연필 기재나, 10년 뒤에 아무도 열 수 없는 파일 형식은 이 시험을 통과하지 못합니다 [7].
  • 동시 기록(Contemporaneous) — 기록은 작업이 일어나는 바로 그때 작성되며, 몇 시간 뒤 기억으로부터 재구성되지 않습니다. pH 측정값은 측정한 시점에 기록되어야지, 교대 종료 시점에 소급해 채워 넣어서는 안 됩니다 [2].
  • 원본(Original) — 데이터는 최초로 수집된 것(또는 그것의 검증된 "진본 사본(true copy)")이지, 전사된 것이 아닙니다. 크로마토그래피 장비 자체의 원시 데이터 파일은 원본이지만, 노트에 손으로 베껴 적은 숫자는 그렇지 않습니다 [1].
  • 정확(Accurate) — 데이터는 올바르고, 진실되며, 오류가 없어서 실제로 일어난 일을 반영합니다 [4].

네 가지 "플러스" 속성이 그림을 완성하며, 각각 동일한 바이오리액터에 근거합니다 [2].

  • 완전(Complete) — 불합격 실행과 반복을 포함해 아무것도 삭제되지 않음: 시스템 적합성(system-suitability)에 실패한 크로마토그래피 실행은 슬그머니 누락되지 않고 보존됩니다.
  • 일관(Consistent) — 동기화된 시계로 사건이 진정한 시간 순서대로 기록됨: 공급 조정은 그것이 대응한 pH 일탈(excursion) 뒤에 기록되며, 결코 그 앞에 기록되지 않습니다.
  • 영속(Enduring) — 그 순간보다 오래 남는 내구성 있는 매체에 기록됨: 배치 기록은 접착식 메모지나 로컬 스프레드시트가 아니라 검증된 히스토리언과 데이터베이스 안에 살아갑니다.
  • 가용(Available) — 보존 수명 내내 검토를 위해 검색 가능함: 그것을 만든 분석가뿐 아니라 어떤 검토자나 실사관도 몇 년 뒤에 그 기록을 끄집어낼 수 있습니다.

이 네 가지는 뒷생각이 아닙니다 — 이 장의 뒷부분 절들이 그것들에 직접 안착합니다: 전후 쌍은 완전이고, 변경 불가능한 시퀀스는 일관입니다.

누가, 언제, 왜: 귀속의 삼요소

귀속 가능과 동시 기록을 하나로 묶고 — 원본에 가해지는 모든 변경을 기록함으로써 그 원본을 보호하는 — 메커니즘이 바로 감사 추적(audit trail)입니다. 누가, 언제, 무엇을, 그리고 (관련이 있는 경우) 왜 했는지를 안전하게 기록하는, 컴퓨터가 생성한 타임스탬프 기록입니다. 끄거나 슬그머니 변경할 수 없도록 보호되며, 거기에 가해진 어떤 변경도 그 자체로 기록됩니다 [3]. 구체적으로, 하나의 감사 추적 항목은 변경된 필드, 그 이전 값과 새 값, 변경한 사람, 정확한 타임스탬프, 그리고 사유를 기록합니다 — 예를 들면 캠페인의 로트 BATCH-2026-001에 대해 glucose_g_l4.10에서 4.85로, qc_flagfail에서 pass로, app_user jdoe에 의해 2026-06-13 14:07:22 UTC에 변경됨; 사유: 일탈(deviation) DEV-2207 정정과 같은 식입니다. 감사 추적은 "날 믿어"를 "로그를 확인해"로 바꿉니다.

그 타임스탬프는 그 뒤에 있는 시계만큼만 신뢰할 수 있습니다. 시스템은 NTP(네트워크 시간 프로토콜, Network Time Protocol)를 통해 시계를 동기화하며, 1초 미만의 장치 간 순서화가 필요한 고속 공정에는 PTP(정밀 시간 프로토콜, Precision Time Protocol, IEEE 1588)를 사용합니다. 모든 타임스탬프는 UTC로 저장되고 운영체제나 데이터베이스 시계에서 가져오며, 행을 쓰는 애플리케이션 계정이 설정할 수 없습니다. 이것이 바로 뒤에서 설명할 소급 기재(back-dating) 실패 양상을 무력화하는 것입니다. 기록하는 쪽은 값과 사유를 제공할 수 있지만, 시각은 제공할 수 없습니다.

그러한 모든 항목의 핵심에는 귀속의 삼요소(attribution triple), 즉 누가, 언제, 가 있습니다. 누가는 공유 계정이 아닌 단 한 명의 명명된 사람이어야 하며 — 실무에서는 둘로 나뉩니다. 행을 물리적으로 쓴 데이터베이스 역할(서비스 계정(service account) — 사람이 아니라 소프트웨어가 그 아래에서 실행되는 기계 신원)이 변경을 승인한 사람과 같은 경우는 드물기 때문입니다. 언제는 기록한 사람이 되돌릴 수 없는 시계에서 나와야 합니다. 는 실사관이 가장 먼저 찾는 열입니다. 문서화된 사유 없이 변경된 값은 규제 당국이 가장 답을 듣고 싶어 하는 질문을 불러오기 때문입니다. 바로 이 세 가지 사실이 데이터가 태어나 처음 귀속되는 지점입니다 — 감사 추적이 그 뒤로 보호해야 할 포착의 순간에 관해서는 데이터는 어디서 태어나는가를 보십시오.

전후 쌍: 원본의 보존

귀속은 누가를 알려 주지만, 그 자체로 값이 무엇이었는지를 보존하지는 못합니다. 그것은 전후 쌍(before-after pair)의 몫입니다 — 단지 변경되었다는 기록이 아니라, 변경된 레코드의 이전 상태와 새 상태를 모두 저장하는 것입니다. 차이(diff)("glucose: 4.10 → 4.85")는 취약하고 오독하기 쉽습니다. 레코드의 완전한 전후 이미지는 모호하지 않으며, 이것이 원본완전이 함께 요구하는 바입니다. 불합격 결과가 정정될 때, 불합격 값은 사라지지 않습니다 — 그것은 "이전"으로 보존되고, 정정은 "이후"가 되며, 각각이 고유한 사유를 지닙니다. 삭제 자체가 기록되는 사건인 이유가 바로 이것입니다. 데이터를 제거하는 것도 여느 변경과 같은 변경이며, 원본은 그것을 견디고 살아남아야 합니다.

변경 불가능한 시퀀스: 위조할 수 없는 순서

감사 추적이 보장해야 할 마지막 것은 순서입니다. 작심한 내부자가 행을 재정렬하거나, 하나를 끼워 넣거나, 중간 항목을 슬그머니 누락시킬 수 있다면, 모든 개별 행이 완벽해 보여도 일관 — 사건의 진정한 시간 순서 — 은 무너집니다. 두 가지 설계 조치가 시퀀스를 방어합니다. 첫째, 역사의 순서는 기록하는 사람이 아니라 데이터베이스가 부여합니다 — 애플리케이션이 덮어쓸 수 없는 단조 증가 시퀀스 번호(항상 증가하고 결코 반복되지 않는 번호)입니다. 둘째, 각 행은 그 앞의 행과 암호학적으로 연결됩니다 — 해시 체인(hash chain)으로서, 이전 행의 해시에 이번 행의 페이로드와 타임스탬프를 더한 것의 암호학적 해시(데이터로부터 계산되는 짧고 고정 길이인 지문으로, 입력의 단 한 글자만 바뀌어도 완전히 다른 지문이 나오는 것; 동반 구현에서는 SHA-256)가 현재 행에 접혀 들어가므로, 어떤 행을 삭제, 재정렬, 또는 재연결하면 체인이 깨지고, 검증기는 연결이 들어맞지 않게 되는 첫 행을 가리킬 수 있습니다. 오픈소스 장은 바로 이것을 prev_hash/row_hash 쌍과 verify_chain() 함수로 구현합니다. 아래의 해부는 그 열들이 살아가는 레코드를 보여 줍니다.

이는 변조를 불가능하게 만드는 것이 아니라 탐지 가능하게 만듭니다. 권한 있는 데이터베이스 슈퍼유저는 여전히 트리거를 비활성화하거나 테이블을 통째로 다시 쓸 수 있으며, 그렇기에 오프박스 로그 선적(off-box log shipping, 기록하는 쪽이 닿을 수 없는 저장소로 감사 추적을 복사하는 것), 직무 분리(separation of duties), 그리고 제한된 관리자 계정 — 모두 절차적 통제 — 이 체인을 뒷받침해야 합니다. 해시 체인은 평범한 내부자를 잡아냅니다. 그러나 그것만으로는 데이터베이스를 소유한 자를 막지 못합니다.

감사 추적 행의 해부

위의 네 가지 개념 — 귀속, 동시성, 전후 쌍, 그리고 변경 불가능한 연결 시퀀스 — 은 모두 하나의 레코드에 안착합니다. 그림은 추가 전용(append-only) 감사 추적 테이블 — 행을 추가할 수만 있고 결코 편집하거나 삭제할 수 없는 테이블 — 즉 동반 구현의 audit.change_log의 한 행을 해부하여, 그 열두 개의 열을 아홉 가지 ALCOA+ 속성에 대응시킵니다. 이를 열로 렌더링된 ALCOA+로 읽으십시오. 처음 일곱 개는 무엇을, 누가, 언제를 말하고, 다음 세 개는 이전, 이후, 를 담으며, 마지막 두 개는 시퀀스 전체를 변조-가시적(tamper-evident)으로 만드는 체인 링크입니다. 이것이 추상적인 속성이 되는 구체적인 SQL 행입니다 — 코드로 ALCOA+ 무결성 구축하기에서 필드별로 분해되는 바로 그 산출물입니다.

하나의 audit.change_log 행에 대한 신원 카드. 열두 개의 열 전체를 세 묶음으로 나누어 보여 줍니다: 귀속 블록(seq, ts, db_user, app_user, table_name, action, row_key), 초록색 전후 핵심(old_row, new_row, reason), 그리고 보라색 체인 링크 패널(prev_hash, row_hash). 각 열은 그 값과 그것이 충족하는 ALCOA+ 속성과 함께 표시됩니다. 하나의 audit.change_log 행을 신원 카드로: 열두 개의 열이 누가 무엇을 언제 왜 변경했는지, 완전한 전후 이미지, 그리고 그 행을 앞의 행에 묶는 해시 체인 링크(prev_hash 다음 row_hash)를 포착합니다 — 구체화된 ALCOA+입니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

신뢰할 수 있는 기록이 어떻게 구축되는지를 두 행에 걸쳐 보여 주는 6단계 좌에서 우로의 흐름도: 데이터 생성(센서 또는 작업자), 감사 추적이 누가와 언제를 포착, 원본 기록을 변경 없이 저장, 모든 변경을 사유와 함께 기록, 독립적인 감사 추적 검토, 그리고 마지막으로 출하 및 실사를 위한 신뢰할 수 있는 기록. 각 단계는 포착, 보존, 검토, 신뢰할 수 있는 기록으로 색상 구분되어 있습니다. ALCOA+ 수명 주기: 모든 사건이 포착되고, 귀속되며, 검토 가능합니다 — 그래서 최종 기록을 신뢰할 수 있습니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

통제된 청정실 내부 통제된 청정실(cleanroom). 물리적 환경을 통제해 제품을 보호하는 것과 꼭 마찬가지로, 데이터 통제는 제품을 입증하는 기록의 무결성을 보호합니다. 청정실. 이미지: UCL Mathematical and Physical Sciences, CC BY 2.0, Wikimedia Commons.

같은 기록을 형식적으로 모델링하기: PROV-O, SHACL, 그리고 SPARQL

귀속의 삼요소와 전후 쌍은 단지 좋은 데이터베이스 스키마인 것이 아닙니다. 그것들은 프로비넌스(provenance) — 누가 또는 무엇이 어떤 활동으로부터, 어떤 입력을 사용해 한 사실을 만들어 냈는지에 대한 형식적 기록 — 의 표준화된, 기계 판독 가능한 모델의 한 인스턴스입니다. W3C PROV-O(프로비넌스를 위한 웹 온톨로지 언어(Web Ontology Language) 온톨로지) 어휘는 귀속의 삼요소에 그 정확한 용어를 부여합니다: prov:Agent는 명명된 행위자이고, prov:Activity는 시간 속에서 일어난 변경 사건이며, 그 활동이 만들어 낸 값은 prov:wasAttributedTo로 그 에이전트에 귀속되고, prov:generatedAtTime으로 그것이 만들어진 순간이 찍히며, prov:wasDerivedFrom으로 그것이 대체한 값에 묶입니다. 이 장이 거듭 되돌아가는 누가, 언제, 는 PROV-O에서 prov:wasAttributedTo, prov:generatedAtTime, 그리고 입력(prov:used)이 그것이 작용한 이전 값들인 활동입니다 — 같은 모양을, 다른 어떤 시스템의 기계든 읽을 수 있게 쓴 것입니다. Book 4는 진행 중인 캠페인에 대한 실제 사례를 하나 담고 있습니다: 두 출처 시스템의 큐레이션된 조정(reconciliation)을, 두 개의 귀속된 주장을 prov:usedprov:Activity로 모델링하여, 몇 년 뒤의 낯선 사람도 사실뿐 아니라 누가 그것을 단언했는지를 볼 수 있도록 기록한 것입니다 — 개념화: 관계와 계보에 펼쳐지고 유지보수: 출판과 FAIR에서 실행되는 규율입니다. ALCOA+의 "모든 변경을 귀속하라"는 것은 정확히 PROV-O가 하는 일을, 제조 기록에 적용한 것입니다.

PROV-O가 어휘라면, SHACL 셰이프(shape)(셰이프 제약 언어, Shapes Constraint Language — 그래프 데이터가 요구되는 구조를 갖추었는지를 진술하고 자동으로 점검하는 언어)는 한 기록이 완료되었다고 주장하도록 허용되기 전에 ALCOA+의 완전일관을 강제하는 관문(gate)입니다. SQL NOT NULL 제약이 한 번에 한 열씩 존재를 강제하는 곳에서, SHACL 셰이프는 한 기록 전체에 대해 세계를 닫습니다: 그것은 단 하나의 선언으로, 명명된 사람 그리고 사유를 담지 않으면 어떤 변경도 유효하지 않다고 — 정확히 "누가와 왜가 없으면 어떤 변경도 없다"고 — 말할 수 있습니다. app_user 속성과 reason 속성에 대한 sh:minCount 1 같은 제약은 Complete 요건을 실행 가능하게 만든 것이고, SPARQL 기반 제약(sh:sparql, 셰이프가 타임스탬프가 데이터베이스 부여 시퀀스 번호와 어긋나는 어떤 행이든 표시하게 해 줍니다)은 Consistent 요건 — 사건을 그 진정한 순서대로 — 을, 검토자가 기억하는 희망이 아니라 그래프가 점검하는 규칙으로 바꾼 것입니다:

# 닫힌 세계 ALCOA+ 관문으로서의 SHACL 셰이프: 명명된 사람과 사유가 없으면 어떤 변경도 없다.
ex:ChangeRecordShape a sh:NodeShape ;
sh:targetClass ex:ChangeRecord ;
sh:property [
sh:path ex:app_user ;
sh:minCount 1 ;
sh:message "Complete: every change must name the human who authorized it." ] ;
sh:property [
sh:path ex:reason ;
sh:minCount 1 ;
sh:message "Complete: every change must carry a documented reason." ] .

세 열로 된 대응표. 인디고색 왼쪽 열은 하나의 audit.change_log 행의 네 컬럼 — app_user(jdoe), ts, old_row와 new_row(변경 전후 이미지), reason(DEV-2207 정정) — 을 보여줍니다. 보라색 화살표가 각각을 가운데 열의 W3C PROV-O 용어 — prov(누가), prov(언제), prov(이전 값), prov(변경 사건) — 에 대응시킵니다. 초록색 오른쪽 열은 SHACL 관문 배지 — ex, ex와 ex에 각각 sh 1을 둔 sh — 로, 닫힌 세계 Complete 관문으로 표시되며 PROV-O 열에서 들어오는 gates 화살표가 연결됩니다. audit.change_log 행을 W3C PROV-O 용어에 대응시키고, app_user와 reason 둘 다에 sh:minCount 1을 요구하는 SHACL NodeShape — 닫힌 세계 관문으로서의 ALCOA+ Complete, 누가와 왜가 없으면 어떤 변경도 없다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

이것은 Book 4가 출하 결정을 위해 구축하는 것과 동일한 닫힌 세계 규율입니다: 누락된 필수 사실은 열린 질문이 아니라 지금의 실패로 다루어집니다 — 검증: 출하 관문과 SHACL를 보십시오. 거기서는 동일한 기제가 기록이 불완전하거나 서명되지 않은 로트의 출하를 거부합니다.

그리고 일단 감사 추적이 테이블이 아니라 그래프가 되면, 그것을 검토하라는 규제 의무 — 아래의 규제 기대치로서의 감사 추적 검토에서 발전됩니다 — 는 답할 수 있는 역량 질문(competency question)(데이터가 답할 수 있어야 하는 평이한 자연어 질문으로, 쿼리로 실행됨)이 됩니다. "BATCH-2026-001에서 glucose_g_l을 누가, 언제, 왜 변경했는가?"는 더 이상 검토자가 로그북을 넘겨 보는 일이 아닙니다. 그것은 귀속되고 타임스탬프가 찍힌 정확한 행들을 반환하는 SPARQL(SQL이 테이블을 위한 것이듯, 그래프 데이터를 위한 표준 쿼리 언어) 쿼리입니다:

# 역량 질문으로서의 감사 추적 검토: 이 배치에서 누가, 언제, 왜 glucose_g_l을 변경했는가?
PREFIX prov: <http://www.w3.org/ns/prov#>
PREFIX ex: <https://example.org/audit#>
SELECT ?who ?when ?reason WHERE {
?change a ex:ChangeRecord ;
ex:batch ex:BATCH-2026-001 ;
ex:field "glucose_g_l" ;
prov:wasAttributedTo ?who ;
prov:generatedAtTime ?when ;
ex:reason ?reason .
} ORDER BY ?when

요점은 모든 공장이 RDF를 채택해야 한다는 것이 아니라 — 대부분은 동반 구현이 그러하듯 이 동일한 보증들을 관계형 데이터베이스에서 강제합니다 — ALCOA+의 누가/언제/왜와 그 완전/일관이 느슨한 산문이 아니라는 것입니다. 그것들은 정착된 시맨틱 표준에 깔끔하게 대응되며, 바로 그렇기에 Book 4가 모델링하는 감사 추적과 출하 관문은 두 층위로 표현된 같은 개념입니다: PROV-O는 각 사실이 어떤 종류의 것인지를 말하고, SHACL 셰이프는 그 기록이 신뢰되기 전에 그것이 존재하고 잘 형성되어 있음을 강제합니다.

변경이 조사가 될 때: 일탈 기록

정정된 값 하나는 감사 추적의 한 행입니다. 그러나 어떤 것이 승인된 공정에서 벗어날 때 — 규격을 벗어나 작동한 공급 펌프, 규격 외(out-of-specification, OOS) 분석 결과(여기서 분석(assay)이란 제품의 어떤 속성을 측정하는 실험실 시험을 말합니다), 청정실 일탈 — 그 변경은 그 자체로 정식 기록의 시작이 됩니다: 일탈 기록(deviation record)(그리고 그 시정이 영구적인 공정 변경일 때는, 거기서 비롯되는 시정 및 예방 조치(corrective and preventive action), 즉 CAPA)입니다. 이 장이 거듭 약속해 온 것 — 좋은 데이터 아키텍처가 조사를 몇 주에서 몇 분으로 바꾼다는 것 — 이 실제로 결실을 맺는 곳이 바로 여기입니다. 일탈 기록은 그것이 필요로 하는 모든 사실이 이미 귀속되고, 타임스탬프가 찍히고, 연결되어 있을 때에만 빠르게 조립되기 때문입니다.

일탈 기록을 또 하나의 해부 카드로 읽으십시오. 감사 추적 행과 마찬가지로 그것은 고정된 필드를 가지며, 그 행과 마찬가지로 그 가치는 그것이 홀로 저장하는 것이 아니라 무엇과 연결되는가에서 나옵니다.

  • 일탈 ID(DEV-2207) — 감사 추적의 reason 열이 가리켜 되돌아가는, 사람이 마주하는 손잡이로서, 검토자가 "이 값은 왜 변경되었는가?"에서 전체 조사로 한 번에 옮겨 갈 수 있게 합니다.
  • 배치 ID(BATCH-2026-001) — 일탈을 캠페인 로트에, 그리고 그 로트의 계보(genealogy)를 통해 그 사건이 건드렸을 수 있는 모든 상류 자재와 하류 결과에 묶습니다. 배치가 없는 일탈은 고아입니다.
  • 무슨 일이 일어났는지, 언제, 누가 발견했는지 — 감사 추적이 담는 것과 동일한 귀속의 삼요소이되, 이제는 필드가 아니라 사건 수준에서입니다: 동시 기록된 설명, UTC 타임스탬프, 그리고 공유 계정이 아닌 명명된 사람입니다.
  • 연결된 레코드증거가 되는 감사 추적 행, 원시 장비 파일, 그리고 분석 결과입니다. 조사는 이 사실들을 다시 입력하지 않습니다. 그것들을 참조하므로, 검토되는 것은 최초의 포착이며, 이로써 원본을 충족합니다.
  • 근본 원인, 영향, 그리고 처분 — 분석적 결론입니다: 무엇이 실패했는지, 어떤 제품에 영향을 미쳤는지, 그리고 배치가 출하되는지, 재작업되는지, 거부되는지입니다.
  • CAPA 참조 — 시정 및 예방 조치로 가는 전방 링크로서, 동일한 일탈이 알아채지 못한 채 재발할 수 없도록 고리를 닫습니다.

이를 ALCOA+에 가장 직접적으로 묶는 규율은 OOS 결과의 처리입니다. 분석이 불합격 숫자를 내놓을 때, 그 불합격 숫자는 데이터입니다 — 그것은 원본이고, 완전이며, 그저 재시험으로 지워 버릴 수 없습니다. 확인되거나 번복된 OOS 조사는 불합격 결과를 어떤 유효한 재시험과 나란히, 각각 고유한 사유와 함께 기록에 남깁니다 — 정확히 전후 쌍이 정정된 값의 "이전"을 남기는 것과 똑같이 말입니다. 이것이 "합격할 때까지 시험하기"를 긍정적으로 진술한 일반화입니다: 불합격 결과도 데이터이며, 신뢰할 수 있는 기록이란 그것을 남긴 기록입니다.

지금까지의 진행 사례는 상류 — 공급 속도, pH 측정값, 바이오리액터의 글루코스 정정 — 에 관한 것이었습니다. 그러나 무결성에 결정적인 레코드는 공정 전체에 걸쳐 존재하며, 하류 정제 트레인이 가장 날카로운 사례 일부를 담고 있습니다. BATCH-2026-001의 원료의약품(drug-substance) 로트에 대한 바이러스 여과 필터 무결성 시험(viral-filtration filter-integrity test)을 생각해 보십시오. 바이러스 여과는 크기 기반 제거 단계(바이러스 입자를 물리적으로 붙드는 작은 기공 막)이며, 그것이 주장하는 바이러스 제거(viral clearance)는 막이 온전했을 때에만 유효합니다 — 그래서 모든 필터에 대해 사용 후 무결성 시험(보통 기압 감쇠(gas-pressure-decay) 또는 버블 포인트(bubble-point) 측정)이 수행되며, 그 결과는 로트의 바이러스 안전성 주장이 의존하는 레코드입니다. 그 시험 결과는 작업자가 결코 합격할 때까지 반복할 수 있어서는 안 되는 종류의 값입니다: 무결성 시험에 불합격한 필터는 불합격한 분석을 그렇게 할 수 없는 것과 마찬가지로 재시험으로 합격시킬 수 없습니다. 한계선상이거나 불합격한 무결성 결과는 배치가 의지하고 있는 제거가 실제가 아닐 수 있다는 바로 그 신호이기 때문입니다. 양이온 교환(cation-exchange, CEX) 폴리싱(polishing) 단계에서도 마찬가지인데, 여기서는 출하 범위를 벗어난 전하 변이체(charge-variant) 주 피크(main-peak) 결과 — 항체의 번역 후 변형(post-translational modification)이 표류했다는 표시 — 가 OOS 조사를 엽니다. 그리고 UF/DF(한외여과/정용여과, ultrafiltration/diafiltration, 농축 및 완충액 교환 단계)에서도 마찬가지인데, 여기서는 최종 단백질 농도 측정값이 바이알당 용량을 정합니다. 이들 각각은 한 번 포착된 단일 값으로, 출하 결정이 거기에 기댑니다. 각각은 자신의 귀속 삼요소를 담아야 하고, 정정되는 경우 "이전"으로 살아남아야 하며, 불합격하면 기록에 남아야 합니다. 감사 추적 아키텍처는 그 값이 바이오리액터 탐침에서 왔는지 필터 무결성 시험기에서 왔는지 개의치 않습니다 — 원본완전 보증은 트레인 끝까지 내내 동일합니다.

일탈 및 CAPA 조사 기록에 대한 해부 카드로, 그 필드들을 보여 줍니다 — 일탈 ID DEV-2207, 배치 ID BATCH-2026-001, 설명, 발견자와 UTC 타임스탬프, 근본 원인, 영향, 처분, 그리고 CAPA 참조 — 그리고 그 기록을 바깥으로 배치 계보, 감사 추적 change_log 행들, 원시 장비 파일들, 그리고 그것이 의존하는 분석 OOS 결과에 연결하는 화살표들을 보여 줍니다. 해부 카드로서의 일탈 및 CAPA 기록: 그 필드들은 대부분 링크입니다 — 배치와 그 계보로, 감사 추적 행들로, 원시 파일들로, 그리고 OOS 결과로 — 바로 그렇기에 잘 연결된 아키텍처가 몇 주가 걸리는 조사를 몇 분이 걸리는 쿼리로 바꿉니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

데이터 무결성은 어떻게 무너지는가

규칙을 알면 실패 양상을 더 쉽게 알아챌 수 있습니다. 규제 지침과 수년간의 실사 적발 사례는 반복적으로 등장하는 문제들의 면면을 보여 줍니다 [1][3].

  • 공유 로그인. 여러 사람이 하나의 계정을 사용하면 귀속이 무너집니다 — 누가 기재했는지 알 수 없어 귀속 가능이 무력화됩니다 [1].
  • 비활성화되거나 검토되지 않는 감사 추적. 감사 추적이 꺼져 있거나, 켜져 있더라도 한 번도 검토되지 않으면 변경이 눈에 띄지 않습니다 — 이것이 바로 이제 지침이 감사 추적을 검토할 것을 기대하는 이유이며, 이 점은 아래의 규제 기대치로서의 감사 추적 검토에서 발전됩니다 [1].
  • "합격할 때까지 시험하기(testing into compliance)." 합격 결과가 나올 때까지 시험을 반복한 뒤, 그 결과만 보고하고 불합격은 폐기하는 것입니다. FDA는 이를 명시적으로 금지합니다. 불합격 실행을 삭제하는 것은 완전원본을 위반합니다 [1].
  • 통제되지 않는 스프레드시트와 하이브리드 기록. 결과가 감사 추적 없는 엑셀 파일이나 출력물에 살아 있어, 공식 기록과 작업용 기록이 갈라지고 어느 숫자가 권위 있는 것인지 아무도 알 수 없게 됩니다 — 원본완전을 무력화합니다 [1][2].
  • 비공식 또는 중단된 주입(injection). 크로마토그래피 데이터 시스템(샘플의 성분을 분리하고 측정하는 실험실 장비를 구동하는 소프트웨어)에서, 결과를 미리 보려고 시험 주입(injection) — 샘플 한 건의 분석 — 을 돌린 뒤 그것을 삭제하거나 저장하지 않는 것, 또는 감사 추적이 포착하지 못한 채로 시퀀스(sequence)(대기열에 들어간 주입들의 묶음)를 재처리하는 것입니다 — 원본, 완전, 그리고 동시 기록을 무력화합니다 [1][2].
  • 고아 데이터(orphaned data). 배치도, 샘플도, 명확한 소유자도 없이 기록된 결과 — 공식 기록과 대조할 수 없는, 머무를 곳이 없는 데이터입니다 [3].
  • 시계 조작. 시스템 시계를 바꿔 기재를 소급 처리하거나, 동기화되지 않은 시계를 운영해 사건의 진정한 순서를 알 수 없게 만드는 것으로, 동시 기록일관을 공격합니다 [3].
주의

이러한 실패의 다수는 극적인 사기가 아닙니다. 그것들은 마감 압박 속에서 지름길로 시작됩니다 — "오늘 밤만" 한 번 공유한 비밀번호, "컬럼이 평형화 중이었으니까" 한 번 다시 돌린 실행. 건강한 데이터 무결성 문화는 정직한 길을 쉬운 길로 만들어, 지름길이 결코 유혹이 되지 않게 합니다 [7].

공유 로그인, 비활성 감사, 소급 기재가 설계상 실패하는 방식

위의 실패 양상들은 서로 무관한 진기한 사례가 아닙니다. 각각은 설계 요건 가운데 하나가 무력화하도록 만들어진 바로 그 공격입니다. 나이브한 시스템과 ALCOA+ 아키텍처를 나란히 놓으면 패턴이 분명해집니다. 무결성을 선의에 맡길 때 슬그머니 성공하는 지름길은, 무결성이 데이터베이스에 갖춰 넣어질 때 예방되거나 변조-가시적이 됩니다. 모든 계정이 레코드에 찍히는 고유 신원일 때 공유 로그인은 이름 없는 행을 쓸 수 없습니다. 로그가 추가 전용이고 불합격 값이 이전-이미지에 살아남아 있을 때 불합격 실행은 삭제로 지울 수 없습니다. 순서가 데이터베이스가 부여한 시퀀스와 어떤 재정렬에도 깨지는 해시 체인으로 고정될 때 소급 기재는 타임라인을 위조할 수 없습니다.

세 가지 고전적 데이터 무결성 실패의 2열 비교. 장미색 왼쪽 열은 각 지름길이 나이브한 시스템에서 성공하는 모습을 보여 줍니다: 공유 로그인은 귀속을 붕괴시키고, 합격할 때까지 시험하기는 불합격 실행을 삭제하며, 시계 조작은 시간 순서를 위조합니다. 초록색 오른쪽 열은 같은 지름길이 ALCOA+ 아키텍처 아래서 실패하는 모습을 보여 줍니다: app_user 열을 가진 고유 계정이 귀속을 강제하고, old_row와 new_row를 가진 추가 전용 로그가 모든 실행을 보존하며, 데이터베이스가 부여한 시퀀스와 해시 체인이 순서를 변조-가시적으로 만듭니다. 같은 세 가지 지름길을, 선의에 맡길 때 대 시스템에 갖춰 넣을 때로: 무엇을 어떤 순서로 쓸 수 있는지를 작업자의 규율이 아니라 데이터베이스가 결정합니다. 저자가 AI의 도움을 받아 직접 제작한 그림입니다.

산업을 재편한 지침의 물결

2010년대에 잇따른 세간의 이목을 끈 데이터 무결성 적발 사례들이 전 세계 규제 당국으로 하여금 서로 수렴하는 지침을 발표하도록 촉발했습니다. 그 결과는 놀라우리만치 일관된 전 지구적 기대치입니다 [6].

지침기관연도
Questions and Answers: GMP — Data Integrity [5]EMA (EU)2016
Data Integrity and Compliance with Drug CGMP: Q&A [1]FDA (US)2018
'GXP' Data Integrity Guidance and Definitions [2]MHRA (UK)2018
Guideline on Data Integrity (TRS 1033, Annex 4) [4]WHO2021
Good Practices for Data Management and Integrity (PI 041-1) [3]PIC/S2021

이 지침 문서들은 홀로 서 있지 않습니다 — 그것들은 그 아래에 깔린 구속력 있는 규정들을 해석하고 보강합니다. 미국에서 전자 기록과 전자 서명은 21 CFR Part 11의 규율을 받고, 유럽 연합에서 제조에 사용되는 컴퓨터화 시스템은 EU GMP Annex 11에 해당합니다. 데이터 무결성 지침은 그 규칙들을 실무에서 어떻게 충족할지를 설명하며, 바로 그렇기 때문에 두 가지는 대개 함께 읽힙니다(다음 장에서 Part 11과 Annex 11을 직접 다룹니다).

참고

이 문서들은 서로 다른 기관에서 나왔지만 놀랍도록 비슷한 것을 말합니다. ALCOA+를 정의하고, 데이터를 그 전체 수명 주기에 걸쳐 관리하며, 리스크에 상응하는(commensurate with risk) 통제를 적용하고(환자 안전에 영향을 미치는 데이터에는 더 큰 엄밀함을), 무결성을 최고위층이 주도하는 품질 문화의 책임으로 다루라는 것입니다 [3][4]. 하나를 충족하는 회사는 대체로 모두와 정렬되어 있습니다.

설계에 의한 무결성

무결성을 갖춰 넣기: 기술적 통제 대 행동적 통제

현대적 사고에서 가장 중요한 전환은, 무결성이 사후에 검사로 들어오는 것이 아니라 설계 단계에서부터 갖춰 넣어져야 한다는 것입니다 [6]. 지침은 두 층위의 통제를 구분합니다. 기술적(시스템) 통제(technical controls)는 컴퓨터 자체에 의해 강제됩니다. 고유한 사용자 계정, 역할 기반 접근, 동기화된 시스템 시계(시간 동기화, time sync), 끌 수 없는 감사 추적, 그리고 일상적인 감사 추적 검토가 그것입니다 [2]. 행동적(절차적) 통제(behavioral controls)는 사람에 의해 강제됩니다. 교육, 우수 문서화 관행, 그리고 직원들이 오류를 숨기기보다 안전하게 보고할 수 있다고 느끼는 열린 문화가 그것입니다 [7]. 기술적 통제는 의지력에 의존하지 않기 때문에 더 강력하지만 — 어느 한 층위만으로는 충분하지 않습니다 [3].

두 층위가 모두 필요한 이유는 둘이 서로 다르게 실패하기 때문입니다. 기술적 통제는 정책을 시스템이 위반할 수 없는 속성으로 바꿉니다 — 추가 전용 테이블에는 애플리케이션이 취할 DELETE 경로 자체가 없습니다. 그러나 기술적 통제는 잘못 구성되거나, 권한 있는 내부자에 의해 우회되거나, 슬그머니 비활성화될 수 있습니다. 그렇기에 기술적 통제가 제 역할을 하는지 검토하는 것이 임무인 행동적 통제가 그 위에 얹혀야 합니다. 가장 강력한 설계는 기술적 층위를 기본값으로, 행동적 층위를 점검으로 삼지, 그 반대로 하지 않습니다.

두 층위 밑에는 당연하게 여기기 쉬운 세 번째 층위가 깔려 있습니다: 보안(security)입니다. 귀속 가능은 어떤 로그인이 그것이 명명하는 사람에게 속함을 입증하는 인증(authentication)만큼만 강력하고, 원본은 누구도 저장된 기록을 슬그머니 다시 쓰지 못하게 막는 접근 통제(access control)변조 저항성(tamper-resistance)만큼만 강력합니다. 보안 층위를 걷어 내면 나머지 ALCOA+는 연극이 됩니다 — 모두가 공유하는 비밀번호에 귀속된 완벽한 감사 추적이나, 누구나 데이터베이스 소유자로 로그인할 수 있는 서버 위의 추가 전용 테이블은 아무것도 입증하지 못합니다. 이것이 현대 지침에서 데이터 무결성과 정보 보안이 함께 쓰이는 이유입니다: 사용자를 사칭할 수 있는 공격자는 귀속 가능을 무력화하고, 저장소에 닿을 수 있는 공격자는 — 스키마가 아무리 우아하든 — 원본을 무력화합니다. 보안은 무결성의 이웃이 아닙니다. 그것은 무결성을 떠받치는 내력벽 가운데 하나입니다.

규제 기대치로서의 감사 추적 검토: QA 쿼리

깨질 수 없는 감사 추적을 구축하는 것은 의무의 절반일 뿐입니다. 이제 지침은 그 감사 추적이 데이터 자체에 적용되는 것과 동일한 엄밀함으로, 일상적인 배치 검토 및 출하의 일부로서 검토될 것을 기대합니다 [1][3]. 종이 세계에서 이는 검토자가 로그북을 넘겨 보는 일이었습니다. 데이터베이스 세계에서 그것은 품질 검토자가 실행하는 쿼리가 됩니다 — 이 배치 레코드에 대한 모든 변경을, 누가 각각을 언제 왜 했는지와 함께 보여 줘 — 그리고 해시 체인이 있는 경우 체인이 끊기지 않았는지 확인해. 아무도 결코 조회하지 않는 검토 가능한 감사 추적은 종이 위에만 존재하는 통제입니다. 동반 구현은 두 절반을 모두 구체화합니다. audit.change_log 행들은 "누가 무엇을 언제 왜 변경했는가" 쿼리에 답하고, verify_chain() 함수는 "끊기지 않았는가" 쿼리에 한 번의 호출로 답합니다 — 코드로 ALCOA+ 무결성 구축하기를 보십시오. 이 검토는 또한 QC 및 출하에서 고리를 닫는 일로서, 검토된 기록이 실제로 배치의 출하를 승인합니다.

왜 중요한가

데이터 관리에 있어서 ALCOA+는 철학이 아니라 물려받은 명세입니다: 규제 환경 안의 모든 히스토리언(historian, 공정 데이터를 보관하는 시계열 데이터베이스), LIMS(실험실 정보 관리 시스템, laboratory information management system), 그리고 데이터베이스는 이 보증들을 빚진 채로 태어나며, 그것들을 나중에 덧붙이는 아키텍처는 값비싼 재작업을 보장합니다 — 혹은 규제 당국이 "이것이 참이라는 것을 어떻게 압니까?"라고 물을 때 방어할 수 없는 기록을 보장합니다 [6].

ALCOA+는 이 책 전체를 관통하는 FAIR 흐름의 무결성 짝입니다: FAIR가 데이터를 찾고, 접근하고, 상호운용 가능하게 만들고, 재사용할 수 있는지를 묻는다면, ALCOA+는 일단 손에 넣은 데이터를 신뢰할 수 있는지를 묻습니다 — 그리고 가용은 이 두 개념이 맞닿는 지점입니다.

무결성은 신뢰할 수 있는 기계 학습의 기반이다

ALCOA+는 인간 검토자에게만이 아니라 그 기록으로 학습된 모든 모델에게도 중요합니다. 학습 모델은 과거 데이터에 맞춰진 함수입니다. 그 데이터가 원본이고 완전이 아니라면, 모델은 조용한 확신을 가지고 잘못된 교훈을 배웁니다. 가장 분명한 사례는 "합격할 때까지 시험하기"입니다: 불합격 실행이 슬그머니 삭제된 데이터셋으로 학습된 모델은 생존자 편향(survivorship bias)을 배웁니다 — 그것은 생존자만을 보고 공정이 결코 실패하지 않는다고 결론짓는데, 삭제된 실패들이야말로 그것이 필요로 했던 신호이기 때문입니다. 규격 외 응집체(aggregate) 결과를 한 번도 본 적 없는 모델은 그것에 대해 경고할 수 없습니다. 이것이 Book 5의 기계 학습 모음이 어떤 알고리즘 논의보다도 먼저 데이터 무결성을 신뢰할 만한 모델의 기둥으로 다루는 이유입니다 — 데이터, 연료를 보십시오: 귀속 가능한 프로비넌스가 없는 종이-디지털 혼합 데이터셋으로 학습된 소프트 센서는 단지 품질이 낮은 것이 아니라, 그 적합도 점수가 아무리 좋아 보여도 GMP 결정에는 허용될 수 없습니다.

귀속의 삼요소 자체가 글루코스 측정값이 아니라 모델 산출물에 적용되어 다시 나타납니다. 모델 계보(model lineage)(모델 프로비넌스(model provenance)라고도 함)는 어떤 데이터셋 버전, 어떤 코드, 어떤 초매개변수(hyperparameter)가 어떤 모델을 만들어 냈고, 어떤 모델이 어떤 예측을 만들어 냈는지에 대한 기록입니다 — ALCOA+의 누가/언제/왜를 학습된 객체로 확장한 것으로, MLOps 도구(학습 데이터셋을 그 콘텐츠 해시로, 난수 시드를, 그리고 적합된 전처리를 가중치와 함께 고정하는 모델 레지스트리)에 의해 기록됩니다. 학습 데이터를 명명할 수 없는 모델은 정확히 귀속되지 않은 레코드입니다: 그것을 재구성하거나, 방어하거나, 롤백할 수 없습니다. Book 5는 모든 모델을 그것이 학습한 정확한 데이터셋의 SHA-256에 고정함으로써 — 이 장의 해시 체인이 사용하는 것과 동일한 콘텐츠 해시 규율을 모델의 입력에 적용하여 — 이를 구체화하고, 재학습된 모델을 변경을 기록하는 사인(four-eyes) 관문을 통해서만 승격시킴으로써, 귀속되고 사유가 달린 감사 추적 항목의 모델 산출물 유사물을 만듭니다(MLOps와 수명 주기모델과 검증을 보십시오).

마지막으로, 무결성 개념은 예측 시점에 런타임 유사물을 가집니다. 센서 측정값에 대한 품질 플래그는 "이 값을 신뢰하지 마라"고 말합니다. ML에서의 대응물은 적용 영역(applicability domain) 플래그 — 새 입력이 모델이 학습한 데이터를 닮았는지를 점검하고, 입력이 학습 외피(envelope)를 벗어날 때 올리는 것 — 입니다. 분포 밖(out-of-distribution) 입력에 대해 이루어진 예측은 귀속되지 않은 레코드만큼이나 신뢰할 수 없습니다: 구조적으로는 그럴듯하고, 자신만만하게 틀리며, 행동에 옮기기에 안전하지 않습니다. 적용 영역 관문은 감사 추적이 레코드에 대해 하는 일을 예측에 대해 합니다 — 의지할 수 있는 값과 그렇지 않은 값을 구별하는 기제입니다 — 그렇기에 Book 5의 출하 및 소프트 센서 모델은 입력이 적격 범위를 벗어난 예측에 대해서는 보증하기를 거부합니다.

현실 세계에서

이것이 바로 상호운용성과 무결성을 함께 설계해야 하는 이유입니다. AnIML이나 Allotrope 같은 표준은 장비의 원시 데이터와 그 전체 맥락을 담아내어 원본완전을 충족하는 데 도움을 줄 수 있습니다 — 그러나 이는 파이프라인이 그 과정에서 필드를 슬그머니 변형하거나 누락시키지 않을 때에만 가능합니다 [6]. 실시간 실험실 데이터 통합 작업 — 공유 온톨로지(ontology)를 기준으로 장비 데이터를 실시간으로 스트리밍하는 것 — 은 바로 이 긴장에 직면해 있습니다. 여러 장비와 협력사로부터 데이터를 실시간으로 끌어오면서도 귀속, 시간 순서, 그리고 ALCOA+가 요구하는 끊김 없는 감사 추적을 보존하는 것입니다. 실시간 데이터는 그것이 실시간으로 신뢰할 수 있는 데이터일 때에만 자산이 됩니다.

실무에서 ALCOA+는 팀이 처음부터 직접 작성하는 경우가 드뭅니다 — 그것은 이미 현장에 있는 시스템들의 구성 가능하고 검증된 기능으로 도착하며, 바로 이곳에서 이 장의 추상 개념들은 누군가가 올바르게 설정해야 하는 버튼과 체크박스가 됩니다. 공정 측에서는, AVEVA PI System이 시계열 감사 추적을 담아내고 이벤트 프레임(event frame)을 사용해 배치나 일탈을 구간으로 묶어서, 신뢰할 수 있는 기록에 경계를 부여합니다. 실험실에서는, 크로마토그래피 데이터 시스템인 Waters Empower와 Thermo Chromeleon이 정통 ALCOA+ 집행자입니다: 동작별 감사 추적, 전자 서명, 그리고 모든 편집에 대한 필수 변경 사유(reason for change) — 정확히 이 장이 해부하는 귀속의 삼요소와 전후 쌍을, 제품으로 출하한 것입니다. 그리고 오케스트레이션 층위에서는, LIMS와 MES(제조 실행 시스템, manufacturing execution system)의 전자 서명 워크플로(LabVantage와 Thermo SampleManager LIMS, Siemens Opcenter Execution MES)가 레코드를 명명된 검토자와 승인자를 거쳐 라우팅하여, 귀속 가능과 감사 추적 검토 의무를 구성된 업무 프로세스로 바꿉니다. 어려운 부분은 더 이상 이 통제들을 만드는 것이 아닙니다. 그것들이 켜져 있고, 올바르게 범위가 지정되어 있으며, 결코 슬그머니 느슨해지지 않았음을 검증하는 일입니다.

감사 추적 및 전자 기록 역량은 맞춤 코드가 아니라 상용 제품의 구성된 기능이므로, GAMP 5 용어(업계의 위험 기반 검증 지침서)로는 대개 범주 4(Category 4) — 구성된 제품 — 이며, 감사 추적이 설치되고, 작동하며, 의도대로 성능을 낸다는 것을 증명하는 위험 기반 IQ/OQ/PQ(설치·운영·성능 적격성 평가, Installation, Operational, Performance Qualification)로 적격성 평가됩니다. 그 증명의 깊이는 모든 화면을 빠짐없이 다루는 것이 아니라 환자 안전 위험으로 정해집니다. 컴퓨터 소프트웨어 보증(Computer Software Assurance, CSA) — 검증에 대한 FDA의 위험 기반 재구성으로, 빠짐없는 스크립트 작성보다 비판적 사고를 앞세웁니다 — 아래에서, 무결성을 담지하는 기능들(감사 추적은 비활성화될 수 없고, 변경 사유는 필수이며, 타임스탬프는 사용자가 설정할 수 없다)은 엄격한 스크립트 기반 증명을 받는 반면, 외양상의 필드는 더 가벼운 점검을 받습니다. ALCOA+ 통제를 검증하는 일은 정확히 CSA의 "노력을 위험에 맞추라"는 규칙이 제값을 하는 곳입니다. 무결성 기능이 위험 척도의 맨 위에 자리하기 때문입니다. 그 기제는 전산화 시스템 검증: GAMP 5와 CSA로의 전환의 주제입니다. 그리고 이 기대치들은 이동합니다: 공정이 새 현장이나 CDMO로 이전될 때, 감사 추적 검토는 발신 공장에서와 마찬가지로 그곳에서도 배치 처분(disposition)의 일부이며, 무결성 통제는 수신 현장의 시스템에서 다시 적격성 평가되어야 합니다 — 무결성 의무는 그것이 처음 검증된 건물이 아니라 공정과 함께 움직입니다.

미해결 과제: 대규모 다자간 감사 추적 무결성

이 장의 아키텍처 — 고유한 귀속, 추가 전용 로그, 단일 데이터베이스가 검증하는 해시 체인 — 는 하나의 시스템 안에서, 운영자의 통제 아래서 깔끔하게 작동합니다. 현대의 바이오 의약품 제조는 점점 더 그렇지 않습니다. 연속(continuous) 또는 강화(intensified) 공정은 위탁 개발·제조 기관(CDMO), 분석을 대행하는 클라우드 실험실, 그리고 의뢰사 자체의 품질 시스템에 걸쳐 데이터를 실시간으로 스트리밍할 수 있습니다 — 세 조직, 세 개의 시계, 세 개의 감사 추적, 공유된 신뢰의 뿌리(세 당사자 모두가 신원과 타임스탬프를 보증하기 위해 의존하기로 합의한 단일 권위)는 없습니다. FDA의 데이터 무결성 지침은 이를 "개방 시스템(open system)" 문제로 다루며, 레코드가 발신 조직의 통제를 벗어날 때 추가적인 통제를 요구합니다 [1]. EU도 같은 방향으로 움직이고 있습니다. 2022년 EMA 개념 문서(concept paper)로 시작된 것 [9]이 이제는 구체적인 개정으로 이어졌습니다: EU GMP Annex 11의 개정 초안 — 개정된 Chapter 4와 함께 2025년 7월 7일에 의견 수렴을 위해 공개되었고, 의견 수렴은 2025년 10월에 마감되었으며, 최종 확정은 2026년 중반으로 예상됩니다 — 은 감사 추적 및 데이터 무결성 기대치를 네트워크화된, 클라우드, 다중 시스템 환경으로 명시적으로 확장하고 ALCOA+를 공식화합니다 [10].

진정으로 어려운 채로 남아 있는 것은 이것입니다. 조직 경계를 넘어 끊김 없고 시간 동기화된 감사 추적을 실시간으로 분배하고 검증하는, 수렴된 벤더 중립적 표준이 없습니다. 각 당사자는 자기 자신의 정직한 체인을 유지할 수 있지만, 그 체인들을 하나의 증명 가능하게-순서화된 레코드로 꿰매는 일은 미해결입니다. 세 가지가 한꺼번에 빠져 있습니다: 회선을 가로지르는 동기화된 시계; 클라우드 실험실의 사람이 의뢰사의 신원 시스템에 알려져 있지 않을 때의 합의된 귀속 의미론; 그리고 어떤 규제 당국이든 전체 다자간 레코드에 대해 실행할 수 있는 검증기입니다. 단일 데이터베이스 해시 체인은 "이 로그가 변조되었는가"에 답합니다. 그것은 아직 "이 세 개의 독립적인 로그가, 함께 취했을 때, 모든 사건을 그 진정한 순서로 포착했는가"에 답하지 못합니다. 그것이 수렴하기 전까지, 실시간 다자간 무결성은 기술적 보장이 아니라 계약과 감사 — 행동적 통제 — 에 의해 강제되며, 이는 바로 이 장이 홀로 의존하지 말라고 경고하는 더 약한 층위입니다. 그 간극을 메우는 일은 이 장과 다음 장 기록, 서명, 그리고 법: 21 CFR Part 11과 EU Annex 11의 법적 기제 사이에 놓인 미개척 영역(open frontier) 가운데 하나이며, 거기서 폐쇄 시스템 대 개방 시스템이 각각 무엇을 책임지는가의 문제가 직접 다루어집니다.

같은 긴장은 제조 현장으로 곧장 거슬러 올라가고 규제 당국의 책상으로 곧장 나아갑니다. 이 장이 기술하는 모든 귀속되고 변경 불가능한 레코드는 궁극적으로, 의뢰사가 실사에서 방어해야 하는 품질, 규제, 그리고 데이터 기반(backbone)에 공급됩니다. 무결성은 하나의 데이터베이스의 특성이 아닙니다. 그것은 디지털 스레드 전체가 처음부터 끝까지 지켜야 하는 속성입니다.

핵심 용어

  • 데이터 무결성(data integrity) — 데이터가 전체 수명 주기 동안 완전하고, 일관되며, 정확하게 유지되는 정도.
  • ALCOA — 귀속 가능(Attributable), 판독 가능(Legible), 동시 기록(Contemporaneous), 원본(Original), 정확(Accurate); 좋은 데이터의 원래 다섯 가지 속성.
  • ALCOA+ — ALCOA에 완전(Complete), 일관(Consistent), 영속(Enduring), 가용(Available)을 더한 것.
  • 감사 추적(audit trail) — 누가, 언제, 무엇을, 왜 했는지에 대한 안전하고 타임스탬프가 찍힌, 컴퓨터가 생성한 로그로서, 끄거나 슬그머니 변경할 수 없도록 보호됨.
  • 전자 서명(electronic signature) — 손으로 쓴 서명과 법적으로 동등한 컴퓨터 기재로서, 서명자의 정자 이름, 날짜와 시각, 그리고 서명의 의미(검토, 승인, 또는 작성)를 표시함.
  • 우수 문서화 관행(Good Documentation Practices) — 데이터를 올바르고 동시적으로 기록하기 위한 행동 규칙.
  • 기술적 통제(technical controls) — 시스템에 의해 강제되는 무결성 안전장치(고유 로그인, 시간 동기화, 감사 추적).
  • 행동적 통제(behavioral controls) — 사람에 의해 강제되는 무결성 안전장치(교육, 문화, 절차).
  • 합격할 때까지 시험하기(testing into compliance) — 합격할 때까지 시험을 반복하고 합격만 보고하는, 금지된 관행.
  • 리스크 상응 통제(risk-commensurate controls) — 환자 안전에 미치는 영향이 더 큰 데이터에 더 엄밀한 통제를 적용하는 것.
  • 귀속의 삼요소(attribution triple) — 모든 감사 추적 항목이 담아야 하는 누가, 언제, 로, 누가는 데이터베이스 역할과 승인한 사람으로 나뉜다.
  • 전후 쌍(before-after pair) — 단순한 차이(diff)가 아니라 변경된 레코드의 이전 상태와 새 상태(old_row/new_row)를 모두 저장하여, 모든 정정에도 원본이 살아남게 하는 것.
  • 해시 체인(hash chain) — 각 감사 추적 행이 그 앞 행의 암호학적 해시(동반 구현에서는 SHA-256)를 저장하여, 어떤 삭제·재정렬·재연결도 검증 가능한 체인을 깨뜨리는, 변조-가시적 시퀀스.
  • 일탈 기록 / CAPA(deviation record / CAPA) — 공정이 승인된 한계를 벗어날 때 개시되는 정식 조사 기록으로, 배치, 그 계보, 그리고 증거가 되는 감사 추적 행들로 되돌아가 연결됨. 시정 및 예방 조치(CAPA)는 그 뒤에 따르는 영구적 시정.
  • 규격 외(OOS) 결과(out-of-specification result) — 불합격 분석 결과로, 그 자체로 데이터임: 어떤 유효한 재시험과 나란히 결코 삭제되지 않고 기록에 남으며, 이것이 "합격할 때까지 시험하기"를 긍정적으로 진술한 것.
  • 무결성 기둥으로서의 보안(security as an integrity pillar) — 접근 통제, 인증, 변조 저항성은 ALCOA+를 떠받치는 내력벽임: 스키마가 아무리 좋든, 사칭은 귀속 가능을 무력화하고 저장소에 닿는 것은 원본을 무력화함.
  • PROV-O — W3C 표준 프로비넌스(provenance) 어휘. 귀속의 삼요소는 prov:wasAttributedTo(누가), prov:generatedAtTime(언제), 그리고 입력(prov:used)과 prov:wasDerivedFrom이 전후 파생(왜/무엇으로부터)을 포착하는 prov:Activity임.
  • SHACL 셰이프 / 관문(SHACL shape / gate) — 한 기록 전체에 대해 세계를 닫아, ALCOA+의 완전일관(예: 명명된 사람과 사유에 대한 sh:minCount 1)을 검토자가 기억하는 희망이 아니라 그래프가 점검하는 규칙으로 강제하는 셰이프 제약 언어(Shapes Constraint Language) 선언.
  • 역량 질문(SPARQL)(competency question) — 답할 수 있는 그래프 쿼리로 만든 감사 추적 검토: "BATCH-2026-001에서 glucose_g_l을 누가, 언제, 왜 변경했는가?"가 귀속되고 타임스탬프가 찍힌 행들을 곧바로 반환함.
  • 모델 계보 / 프로비넌스(model lineage / provenance) — ALCOA+의 귀속 삼요소를 학습된 모델에 적용한 것: 어떤 데이터셋 버전, 코드, 초매개변수가 어떤 모델을, 그 모델이 어떤 예측을 만들어 냈는지를 MLOps 도구에서 콘텐츠 해시로 고정함. 귀속할 수 없는 모델은 귀속되지 않은 레코드임.
  • 적용 영역(applicability domain) — 예측의 입력이 모델의 학습 데이터를 닮았는지를 점검하는 것. 그 외피를 벗어난 예측은 귀속되지 않은 레코드만큼이나 신뢰할 수 없으며, 측정값에 대한 품질 플래그의 ML 유사물임.
  • 컴퓨터 소프트웨어 보증(Computer Software Assurance, CSA) — 검증에 대한 FDA의 위험 기반 재구성(빠짐없는 스크립트 작성보다 비판적 사고). 감사 추적/전자 기록 역량은 GAMP 5 범주 4의 구성된 기능으로, 그 IQ/OQ/PQ 깊이가 환자 안전 위험에 따라 조절되므로 무결성 기능이 가장 무거운 증명을 받음.

이 다음은

감사 추적, 원본, 귀속된 서명은 이 전자 기록을 서명된 종이와 동등하게 다룰 때에만 무게를 갖습니다. 다음 장 기록, 서명, 그리고 법: 21 CFR Part 11과 EU Annex 11(Records, Signatures, and the Law: 21 CFR Part 11 and EU Annex 11)은 ALCOA+를 좋은 관행에서 법적 의무로 바꿉니다 — 무엇이 전자 기록과 전자 서명을 신뢰할 수 있고 종이 위 잉크와 법적으로 동등하게 만드는지, 그리고 폐쇄 시스템과 개방 시스템, 감사 추적, 사본, 보존, 검증이 어떻게 그 동등성을 성립시키는지를 설명합니다.