제8장

제8장: 차세대 바이오의약품과 표준의 진화

WIA-BIO-016 데이터 모델이 어디에서 멈추는지, 새로운 모달리티가 이 모델에 무엇을 요구하는지, 그리고 이미 저장된 기록을 깨뜨리지 않으면서 명세서·SDK·CLI를 어떻게 발전시킬지를 다룬다.

앞의 일곱 장은 WIA-BIO-016 v1.0이 스스로 그어 놓은 경계 안에서 움직였다. 단일클론항체와 그 단편, 항체-약물 접합체, Fc 융합단백질, 재조합 단백질, 백신이 그 대상이었고, 이들은 types.ts의 TypeScript 타입 모델로 기술되고 BiopharmaSDK와 wia-bio-016 셸 도구로 계산되며, 규제 제출 자료로 끝나는 개발 워크플로를 따라 정리되었다. 마지막 장인 이 장은 시선을 바깥으로 돌린다. 바이오의약품 개발은 DrugCandidate 같은 평면적 기록으로는 표현할 수 없는 방향으로 이미 나아갔고, 표준 자체에도 앞 장들이 우회하며 설명해야 했던 결함이 남아 있다. 두 사실은 같은 과제를 가리킨다. 다음 버전의 표준에 무엇을 담을지 정하는 일이다.

이 장은 의도적으로 보수적이다. 시장을 전망하거나 어떤 모달리티가 우세해질지 예측하지 않는다. 공개된 타입의 구체적인 공백을 짚고, 필드 수준의 수정이 어떤 모습일지 보이며, v1.0 기준으로 작성된 기록이 업그레이드 후에도 같은 의미를 유지하도록 시맨틱 버저닝에 따라 수정을 배포하는 방법을 설명한다. 아래에 나오는 모든 스키마 조각은 논의를 위한 제안이며, v1.0 규범 본문의 일부가 아니다.

이 장에서 다루는 내용

8.1 v1.0 모델이 충분히 다루지 못하는 모달리티

v1.0 모델이 제품의 정체를 말하는 방법은 두 가지다. DrugClass는 큰 범주(monoclonal-antibody, antibody-fragment, fusion-protein, cytokine, enzyme, vaccine, antibody-drug-conjugate, peptide, recombinant-protein)를 주고, AntibodyFormat은 항체를 full-igg, fab, scfv, diabody, bite, nanobody, dart로 세분한다. 제품에 이름표를 붙이기에는 이것으로 충분하다. 그러나 제품을 기술하기에는 부족하다. 이름표가 바뀌어도 모델의 나머지 부분은 아무것도 바뀌지 않기 때문이다. 나노바디와 완전한 IgG는 같은 DrugCandidate 기록, 같은 분자량 검사, 같은 품질 속성을 공유한다. 아래에서는 충분히 다뤄지지 않는 모달리티를 하나씩 살펴보며 기록에 무엇이 담겨야 하는지 묻는다.

8.1.1 이중특이 및 다중특이 항체

열거형에 있는 이중특이 형식은 bite와 dart뿐이며, 둘 다 단편을 기반으로 한 작은 구조체다. 이 형식들이 등장한 뒤로 IgG 형태의 이중특이 항체가 대거 개발되었다. 서로 다른 두 중쇄를 Fc 경계면 공학으로 짝지우고(가장 잘 알려진 방식이 "knobs-into-holes"다), 경쇄 오결합은 공통 경쇄나 도메인 교차(crossover)로 막는다. 혈액응고인자 IXa와 X를 잇는 에미시주맙은 전장 이중특이 IgG의 허가 사례다. 두 가지를 넘어 삼중특이 등 다중특이 구조체도 개발되고 있다.

데이터 모델 관점에서 중요한 점은 이중특이 항체가 하나의 결합이 아니라 여러 결합이라는 사실이다. v1.0의 BindingAffinity 기록은 항체 하나, 항원 하나, 복합체 농도 하나를 담고, DrugCandidate는 target 문자열 하나와 targetAffinity 하나만 가진다. 이중특이 T세포 연결체(T-cell engager)에는 최소 두 개의 친화도(종양 항원과 CD3)가 필요하고, 개발자는 흔히 두 값을 의도적으로 크게 다르게 조정한다. 사슬 오결합 변이체도 새로운 종류의 제품 관련 불순물이 된다. 잘못 짝지어진 분자는 응집체도, 단편도, 전하 변이체도 아니므로 QualityAttributes의 어느 필드에도 담을 수 없다.

검증 함정도 있다. validateDrugCandidate()는 monoclonal-antibody의 분자량이 145–155 kDa를 벗어나면 경고한다. IgG 형태 이중특이 항체의 상당수는 150 kDa 근처라 통과하지만, 도메인을 덧붙인 형식은 통과하지 못하고 그 제품에 대해 아무 쓸모 없는 경고를 받게 된다. 이 검사는 기존 IgG에는 합리적인 방어선이지만 나머지에는 오해를 부르는 장치다. 규칙을 약물 분류에 묶지 말고 형식별 규칙으로 명시해야 한다는 논거가 여기에 있다.

8.1.2 단일도메인 항체

nanobody는 이미 AntibodyFormat에 들어 있다. 단일도메인 항체는 낙타과 동물의 중쇄 전용 항체에서 가변 도메인(VHH)을 떼어 낸 것이다. VHH 하나의 질량은 IgG의 약 10분의 1이며, 둘 이상의 도메인을 연결해 구조체를 만드는 경우가 많고, 반감기를 늘리기 위해 혈청 알부민 결합 도메인을 넣기도 한다. 폰빌레브란트인자를 표적으로 하는 카플라시주맙이 허가 사례다.

모델에 없는 것은 이 구성을 기록할 방법이다. 도메인이 몇 개인지, 어느 도메인이 어느 표적에 결합하는지, 어떤 링커로 이어지는지, 반감기 연장 모듈이 있는지를 적을 곳이 없다. 이런 필드가 없으면 약동학적 거동이 전혀 다른 두 나노바디 제품이 v1.0 기록에서는 똑같아 보인다. 그 결과는 제4장의 PK 함수에서 드러난다. calculatePharmacokinetics()는 주어진 청소율과 분포용적으로 얼마든지 반감기를 계산하지만, 어떤 나노바디는 몇 시간 만에 제거되고 다른 나노바디는 훨씬 오래 남는 이유를 검토자는 기록에서 전혀 알아낼 수 없다.

8.1.3 세포·유전자 치료제

v1.0에서 바이러스 벡터는 VaccineType의 값(viral-vector)으로만 등장하며, 명세서 §2.4.2는 아데노바이러스·AAV·렌티바이러스를 백신 벡터로 열거한다. 그러나 오늘날 같은 벡터 계열은 치료제 그 자체로도 쓰인다. AAV 기반 유전자 치료제는 전이유전자를 생체 내(in vivo)로 전달하고, 렌티바이러스 벡터는 CAR-T 치료제처럼 환자 자신의 세포를 생체 외(ex vivo)에서 변형하는 데 쓰인다. 이들 중 어느 것도 DrugClass에 들어맞지 않으며, 모델의 품질 속성 가운데 이들에게 중요한 것은 하나도 없다.

이 책은 데이터 구조 수준에 머문다. 이 제품군에 대해 규제기관과 개발자가 논의하는 속성의 윤곽은 잘 알려져 있다. 벡터 제품이라면 벡터 게놈 수로 표시한 용량, 충전 캡시드와 빈 캡시드의 비율, 전이유전자의 확인시험, 역가가 있다. 세포 제품이라면 확인시험, 생존율, 변형된 세포의 비율, 그리고 제조된 배치를 그 세포를 제공했고 다시 투여받을 특정 환자와 연결하는 식별 연속성(chain of identity) 정보가 있다. 마지막 항목은 v1.0 어디에도 대응물이 없다. 표준의 제품 모델은 한 배치가 여러 환자에게 쓰인다고 가정한다. 자가 유래 제품은 이 가정을 뒤집으므로, 데이터 모델은 환자-배치 연결을 다른 어떤 식별자와도 같은 수준의 주의로 다뤄야 한다.

이 제품들은 별도의 규제 체계(EU에서는 첨단치료의약품, ATMP)로 관리되므로, v2에서 가장 정직한 접근은 DrugClass를 억지로 늘리는 것이 아니다. 모델의 공통 부분(RegulatorySubmission, StabilityResult)은 재사용하되 고유한 속성 집합을 정의하는, 범위가 분명한 별도 프로파일을 추가하는 편이 낫다.

8.1.4 백신을 넘어선 mRNA

모델은 mRNA를 백신 종류로만 다룬다. 결핍된 단백질을 만들게 하거나 유전자 편집 시스템의 구성 요소를 전달하는 등 백신 이외의 치료 목적 mRNA는 임상 연구 단계에 있다. 용도가 무엇이든 제품은 지질나노입자에 담긴 핵산이고, 핵심 속성은 단백질의 것과 다르다. RNA 무결성, 캡핑 효율, poly(A) 꼬리 길이, 봉입 효율, 입자 크기, 지질 조성이 그것이다. 이 중 어느 것도 ProteinCharacterization에 기록할 수 없다. 이 타입의 필드(서열, pI, 흡광계수, 당질화 부위, 이황화 결합)는 대상이 단백질임을 전제하기 때문이다.

실무적 교훈은 "백신"은 용도이고 "mRNA-LNP"는 제품 구조라는 것이다. v1.0은 이 둘을 뒤섞는다. v2 모델은 분자가 무엇인가(단백질, 접합체, 핵산-LNP, 벡터, 세포)와 무엇에 쓰는가(치료, 예방)를 분리하고, 속성 집합은 앞의 것에, 적응증은 뒤의 것에 붙이면 유지·관리가 쉬워진다.

8.1.5 공백 요약

아래 표는 이 절과 8.2절에서 논의한 공백을 모은 것이다. "제안 타입" 열의 인터페이스는 v1.0에 존재하지 않는다. 이 장 뒷부분에서 개략을 보이며, 채택 전에 검토가 필요하다.

모달리티v1.0에 있는 것빠진 필드제안 타입
IgG 형태 이중특이·다중특이 항체AntibodyFormat: bite, dart결합 팔 목록(팔별 표적과 Kd), Fc 짝짓기 방식, 사슬 오결합 변이체(%)BindingArm[], MultispecificAttributes
단일도메인 항체AntibodyFormat: nanobody도메인 수, 링커, 반감기 연장 모듈DomainArchitecture
항체-약물 접합체DrugClass: antibody-drug-conjugate평균 DAR, DAR 분포, 접합 부위 방식, 링커 종류, 페이로드 계열, 유리 페이로드, 비접합 항체ConjugateAttributes
AAV·렌티바이러스 제품VaccineType: viral-vector뿐벡터 게놈 역가, 충전/빈 캡시드 비율, 전이유전자 확인, 역가별도 VectorProductProfile
자가 유래 세포 치료제없음식별 연속성(환자 ↔ 배치), 생존율, 형질도입 비율, 확인시험별도 CellProductProfile
치료용 mRNA-LNPVaccineType: mrnaRNA 무결성, 캡핑, poly(A) 길이, 봉입 효율, 입자 크기NucleicAcidLNPAttributes

8.2 항체-약물 접합체: 평균 DAR에서 분포로

명세서는 §2.2에서 ADC를 항체 + 링커 + 세포독성 약물로 소개하고, 약물-항체 비율을 전체 약물 분자 수를 전체 항체 분자 수로 나눈 값으로 정의하며, 대개 2에서 8 사이이고 "대부분의 ADC에서 최적 DAR은 3–4"라고 적는다. 제1장은 이 틀로 ADC의 구조를 설명했다. 그러나 타입 모델은 이름표에서 멈춘다. DrugClass에 antibody-drug-conjugate가 있을 뿐, types.ts 어디에도 DAR·링커·페이로드 필드는 하나도 없다. v1.0으로 저장된 ADC는 접합되지 않은 항체와 구별되지 않는다.

8.2.1 접합 화학과 불균일성

초기 ADC는 천연 라이신에 접합하거나, 사슬 간 이황화 결합을 부분 환원해 드러난 시스테인에 접합해 만들었다. 두 방식 모두 혼합물을 낳는다. 라이신 접합은 약물이 붙을 수 있는 위치가 매우 많고, 시스테인 접합은 약물이 0, 2, 4, 6, 8개 붙은 분자종을 만든다. 부위 특이적 방법(시스테인 도입 공학, 비천연 아미노산, 효소 태깅, Fc 당쇄 재구성)은 약물의 수와 위치를 모두 고정하려는 것이다. 목적은 깔끔함이 아니다. 약물 적재량이 다른 분자종은 청소율·역가·내약성이 다를 수 있으므로 분포 자체가 품질 속성이다.

그래서 "평균 DAR" 숫자 하나로는 기록이 되지 않는다. 평균이 같은 두 로트도 분포는 다를 수 있다. 비접합 분율이 큰 로트는 효능을 희석하고, 고DAR 분율이 큰 로트는 더 빨리 제거될 수 있다. 분석 실무도 이를 반영한다. 소수성 상호작용 크로마토그래피(HIC)는 시스테인 결합 ADC의 약물 적재 분자종을 분리하고, 질량분석은 적재량을 직접 측정하며, 유리(비접합) 페이로드는 강력한 불순물이므로 따로 측정한다.

따라서 명세서의 "최적 3–4"는 규칙이 아니라 과거 경험에서 나온 지침으로 읽어야 한다. 이후의 일부 ADC는 친수성이 더 높은 링커-페이로드와 함께 의도적으로 더 높은 약물 적재량을 쓰며, 적절한 DAR은 보편 상수가 아니라 구조체 전체의 성질이다. v2 본문은 정의를 제시하고 분포 보고를 요구하되, 단일 최적값은 삭제하는 것이 옳다.

8.2.2 링커와 페이로드 계열

링커는 크게 절단형(예: 단백분해효소 민감 펩타이드 링커, 산에 불안정한 하이드라존, 환원성 이황화 결합)과 비절단형(항체가 리소좀에서 분해된 뒤에야 약물이 방출됨)으로 나뉜다. 페이로드는 작용 기전에 따라 몇 계열로 나뉜다. 오리스타틴·메이탄시노이드 같은 미세소관 억제제, 토포이소머라제 I 억제제, DNA 손상 물질이다. 링커와 페이로드의 조합은 방출된 약물이 주변 세포로 확산될 수 있는지, 주요 독성이 무엇인지, 어떤 불순물을 관리해야 하는지를 결정한다. 이것을 데이터 표준에 세세하게 부호화할 필요는 없지만, 하위 도구가 알맞은 검사를 적용할 수 있도록 기록에는 제품이 어느 계열에 속하는지 적혀 있어야 한다.

8.2.3 ConjugateAttributes 타입 제안

아래 조각은 기존 기록을 건드리지 않고 ADC 데이터를 추가하는 한 가지 방법이다. 제품 최상위에서 전부 선택 항목이므로 v1.0 기록은 그대로 유효하다. 분포는 적재량/존재비 쌍의 배열이며 존재비의 합은 약 100이어야 한다. 평균은 분포에서 계산할 수 있으므로 자체적인 정합성 검사가 가능하다.

// WIA-BIO-016 v1.1 제안 — v1.0의 일부가 아님
export type ConjugationStrategy =
  | 'lysine' | 'interchain-cysteine' | 'engineered-cysteine'
  | 'non-natural-amino-acid' | 'enzymatic' | 'glycan-remodelling';

export type LinkerType = 'cleavable-peptide' | 'cleavable-hydrazone'
  | 'cleavable-disulfide' | 'non-cleavable' | 'other';

export type PayloadClass = 'microtubule-inhibitor'
  | 'topoisomerase-i-inhibitor' | 'dna-damaging' | 'other';

export interface DarSpecies {
  drugLoad: number;    // 항체당 약물 수, 예: 0, 2, 4, 6, 8
  abundance: number;   // 전체 항체 분자종 중 %
}

export interface ConjugateAttributes {
  conjugation: ConjugationStrategy;
  linker: LinkerType;
  payloadClass: PayloadClass;
  meanDar: number;                 // 보고값
  darDistribution?: DarSpecies[];  // HIC 또는 MS 결과
  unconjugatedAntibody?: number;   // % (DAR 0 분자종)
  freePayload?: number;            // 접합체 mg당 양, 단위는 시험법에 명시
  darMethod?: 'hic' | 'rp-lc' | 'lc-ms' | 'uv';
}

// 검증기가 적용할 수 있는 정합성 검사
export function darFromDistribution(d: DarSpecies[]): number {
  const total = d.reduce((s, x) => s + x.abundance, 0);
  return d.reduce((s, x) => s + x.drugLoad * x.abundance, 0) / total;
}

예를 들어 가상의 시스테인 결합 로트의 존재비가 5 %(DAR 0), 25 %(DAR 2), 40 %(DAR 4), 20 %(DAR 6), 10 %(DAR 8)라면 가중 평균은 (0×5 + 2×25 + 4×40 + 6×20 + 8×10)/100 = 4.1이다. 로트 성적서가 이 분포와 함께 평균 DAR 3.5를 보고했다면, 검증기는 어느 한쪽 숫자를 받아들이지 말고 불일치를 표시해야 한다. v1.0에서는 이런 검사가 불가능하다. 기록 어디에도 항체가 접합되었다는 정보가 없으므로 validateDrugCandidate()는 아무 말 없이 제품을 통과시킨다. 그 침묵이 곧 공백이다.

{
  "drugType": "antibody-drug-conjugate",
  "target": "EXAMPLE-ANTIGEN",
  "conjugate": {
    "conjugation": "interchain-cysteine",
    "linker": "cleavable-peptide",
    "payloadClass": "microtubule-inhibitor",
    "meanDar": 4.1,
    "darDistribution": [
      { "drugLoad": 0, "abundance": 5 },
      { "drugLoad": 2, "abundance": 25 },
      { "drugLoad": 4, "abundance": 40 },
      { "drugLoad": 6, "abundance": 20 },
      { "drugLoad": 8, "abundance": 10 }
    ],
    "unconjugatedAntibody": 5,
    "darMethod": "hic"
  }
}

이 기록의 모든 값은 예시다. 표적 이름은 자리표시자이며, 분포는 특정 시판 제품을 닮게 하려는 것이 아니라 계산을 따라가기 쉽도록 고른 것이다.

8.3 연속 생산, PAT, 실시간 출하 승인

v1.0의 제조 관련 타입은 배치 공정을 요약값으로 기술한다. CellCultureParams는 생산성, 배양 기간, 생존율, 세포 밀도를 각각 하나씩 담고, PurificationProcess는 단계별 수율·순도를 가진 단계 목록과 전체 수율, 총 소요 시간을 담는다. 이는 유가식(fed-batch) 배양 뒤에 고정된 크로마토그래피 컬럼 사슬이 이어지는 공정에 맞으며, 제6장은 이를 바탕으로 전체 수율을 단계 수율의 곱으로 계산했다. 그러나 업계가 향하는 방향에는 덜 맞는다.

8.3.1 배치 요약에서 시계열로

관류(perfusion) 생물반응기에서는 세포를 붙잡아 둔 채 배지가 계속 흐르고, 제품은 마지막에 한 번이 아니라 긴 기간에 걸쳐 수확된다. 하류 공정에서는 주기적 향류 크로마토그래피 등 연속 또는 연결된 단계가 큰 보관 탱크 없이 그 흐름을 처리한다. ICH Q13은 원료의약품과 완제의약품의 연속 생산을 다루며, 물질이 계속 흐를 때 "배치"를 어떻게 정의할지(예: 시간, 양, 처리량 기준)도 포함한다.

데이터 표준 입장에서는 기록의 모양이 달라진다. 생존율이나 생산성 숫자 하나가 시계열로 바뀌고, 배치는 물리적 용기가 아니라 정의된 구간이 되며, 추적성을 위해서는 특정 바이알을 그 물질이 생산된 운전 구간까지 거슬러 올라갈 수 있어야 한다. v1.0의 제조 필드에는 시간 차원이 전혀 없고, 배치 정의 필드도 없다. 연속 공정용 v2 프로파일에는 둘 다 필요하며, 배치 방식 제조사에게 이를 강제하지 않는 방식이어야 한다.

8.3.2 PAT와 실시간 출하 시험

공정분석기술(PAT)은 제조 중에 핵심 공정 변수와 품질 속성을 흔히 인라인·앳라인 분광법으로 측정해, 사후 검사에 그치지 않고 공정을 제어하는 방식이다. ICH Q8(R2)는 실시간 출하 시험(RTRT)을 공정 데이터에 근거해 제품 품질을 평가·보증하는 능력으로 설명하며, 여기에는 측정된 물질 속성과 공정 제어의 조합이 포함될 수 있다. 많은 출하 시험이 느린 생물학적 시험인 바이오의약품에서는 이 구상이 아직 발전 중이지만, 공정 데이터를 부분적으로 활용하는 것은 점점 관리 전략의 일부가 되고 있다.

WIA-BIO-016에 대한 함의는 구조적이다. 현재의 QualityAttributes는 최종 제품의 숫자 집합이다. 순도, 단량체, 응집체, 단편, 전하 변이체, 역가, 엔도톡신, HCP, 잔류 DNA가 그것이다. PAT를 고려하는 모델은 값의 출처도 기록해야 한다. 오프라인 출하 시험인지, 인라인 센서인지, 기준 시험법에 맞춰 보정된 모델 예측인지를 적어야 한다. 출처 필드가 없으면 소프트 센서에서 나온 숫자와 밸리데이션된 SEC 분석에서 나온 숫자가 똑같아 보이며, 이것이야말로 표준이 막아야 할 혼동이다.

8.3.3 디지털 트윈

바이오공정의 디지털 트윈은 공정의 기계론적 모델이나 데이터 기반 모델을 실제 설비 데이터와 결합해, 운전 조건을 탐색하거나 이탈을 예측하거나 제어를 지원하는 데 쓴다. 매력적인 구상이지만 과장하기도 쉽다. 표준의 관점에서 트윈은 예측값을 만들어 내는 또 하나의 생산자일 뿐이며, 그 출력은 모델 식별자, 모델 버전, 입력 데이터 구간과 함께 기록되어야 한다. SDK는 같은 원칙의 작은 예다. predictShelfLife()는 하나의 모델(아레니우스 외삽)이며, 제5장은 그 단위 가정(속도상수를 초 단위로 보고, 일수를 30일짜리 "월"로 환산함)이 답을 어떻게 바꾸는지 보였다. 트윈은 그 문제가 훨씬 큰 규모로 나타나는 경우다.

관심사v1.0 표현연속 생산·PAT 프로파일에 필요한 것
배양 성능CellCultureParams의 단일값단위가 붙은 타임스탬프 시계열, 샘플링 방법
배치 식별암묵적(기록 하나 = 배치 하나)ICH Q13처럼 명시적 배치 정의(시간, 양, 처리량)
정제수율·순도를 가진 순서형 단계연결·연속 단위 조작, 체류 시간, 사이클 수
품질값QualityAttributes의 최종 제품 숫자값별 출처: 오프라인 시험, 인라인 센서, 모델 예측
모델 출력SDK 함수뿐, 결과별 버전 없음모델 식별자, 버전, 입력 구간, 보정 기준

8.4 발견·개발가능성 평가에서의 AI와 머신러닝

머신러닝은 이제 바이오의약품 발견의 여러 지점에서 쓰인다. 단백질 구조 예측, 서열 변이체 제안, 그리고 응집 경향, 제형 농도에서의 높은 점도, 비특이적 결합, 화학적 취약 부위(제2장에서 PTM으로 다룬 탈아미드화·산화 모티프) 같은 개발가능성(developability) 위험의 선별이 그 예다. 잘 쓰면 이런 도구는 만들어 시험해야 할 분자의 수를 줄인다. 부주의하게 쓰면 측정값처럼 보이는 숫자를 만들어 낸다.

8.4.1 위험: 측정 필드에 들어간 예측값

오늘 v1.0에 예측값이 어떻게 들어올지 생각해 보자. DrugCandidate.targetAffinity는 "M 단위 Kd"로 문서화되어 있다. DrugCandidate.stability는 0과 1 사이의 점수다. immunogenicityRisk는 low, moderate, high 중 하나다. 이 필드들은 어느 것도 값을 어떻게 얻었는지 말하지 않는다. 팀이 예측된 친화도를 targetAffinity에 적으면, validateDrugCandidate()는 이를 SPR 결과와 똑같이 취급해 같은 경고·오류·타당성 등급을 낸다. 해당 표적 계열을 한 번도 본 적 없는 모델 덕분에 후보가 제6장의 관문을 통과할 수도 있다.

면역원성에도 같은 논리가 적용된다. 제5장은 WIA 면역원성 위험 점수가 보정이 검증되지 않은 선별용 휴리스틱임을 분명히 했다. 인실리코 T세포 에피토프 점수도 선별 신호일 뿐이다. 한 휴리스틱을 다른 휴리스틱에 넣고 그 결과를 하위 도구가 사실로 취급하는 필드에 저장하면, 불확실성은 쌓이는데 그것이 보이지 않게 된다.

8.4.2 출처 래퍼

간단한 해법은 모든 수치 속성을 그 출처와 함께 감쌀 수 있게 하는 것이다. 아래 제안은 일반 숫자도 계속 유효하게 두어 v1.0 기록이 그대로 읽히게 하고, 출처가 중요한 값을 위해 객체 형식을 추가한다.

// WIA-BIO-016 v1.1 제안 — v1.0의 일부가 아님
export type ValueSource = 'measured' | 'predicted' | 'literature' | 'assumed';

export interface SourcedValue {
  value: number;
  unit: string;              // 예: 'M', '%', 'mg/L'
  source: ValueSource;
  method?: string;           // 'spr', 'bli', 'sec' 또는 모델 이름
  methodVersion?: string;    // 시험 SOP 또는 모델 버전
  uncertainty?: { low: number; high: number };
  recordedAt?: string;       // ISO 8601 타임스탬프
}

// v1.x: 두 형식 모두 허용
export type Numeric = number | SourcedValue;

// 예측값만으로는 후보를 통과시키지 않는 관문
export function requireMeasured(v: Numeric, name: string): number {
  if (typeof v === 'number') return v;               // v1.0 레거시 값
  if (v.source !== 'measured') {
    throw new Error(`${name} is ${v.source}; gate requires a measured value`);
  }
  return v.value;
}

이렇게 하면 발견 단계 도구는 예측 친화도를 측정 친화도와 나란히 저장할 수 있고, 검증기는 관문마다 무엇을 받아들일지 정할 수 있다. 초기 선별에서는 예측값을 받아들일 수 있지만, 제6장의 후보 선정 관문은 그래서는 안 된다. 맨 숫자를 받아 주는 레거시 분기는 타협이다. 옛 데이터를 계속 쓸 수 있게 해 주지만, v2에서는 관문과 관련된 필드에 객체 형식을 의무화할 수 있다.

8.4.3 바뀌지 말아야 할 것

어떤 예측도 제2장부터 제5장까지 설명한 시험을 대신하지 못한다. 모델은 어떤 변이체를 먼저 발현할지 우선순위를 정해 줄 수는 있지만, 품질 자료에 필요한 온전한 질량, 당쇄 프로파일, SEC 결과, 안정성 데이터를 내놓을 수는 없다. 표준은 예측을 기록하기는 쉽게, 증거와 혼동하기는 어렵게 만들어야 한다. "AI 주도 개발"보다 좁은 목표이지만 더 쓸모 있는 목표다.

8.5 규제의 흐름

규제는 과학보다 느리게 움직이며, 데이터 표준은 규제를 앞질러 예상하기보다 뒤따라야 한다. WIA-BIO-016의 발전과 관련된 흐름은 세 가지다. 아래 요약은 의도적으로 일반적인 수준에 머물며, 독자는 어느 것에 의존하기 전에 해당 기관의 최신 문서를 확인해야 한다.

8.5.1 바이오시밀러 임상 프로그램의 간소화

제6장은 전통적인 바이오시밀러 자료 구성을 설명했다. 광범위한 분석적 유사성, 기하평균비의 90 % 신뢰구간이 80–125 % 안에 드는 비교 PK 시험, 그리고 흔히 비교 유효성 시험이다. 분석법의 민감도가 높아지면서 FDA와 EMA를 비롯한 규제기관은 충분히 특성분석된 제품에서 비교 유효성 시험이 더하는 바가 적어 면제되거나 축소될 수 있는 경우를 논의하는 문서를 공개했다. 방향은 분석 근거와 PK 근거가 더 많은 무게를 지게 하는 것이다.

WIA-BIO-016에게 이는 분석 데이터 모델의 중요성을 낮추는 것이 아니라 오히려 높인다. 유사성의 논거가 속성별 비교에 더 크게 의존한다면, assessBiosimilarity()가 그 비교에 점수를 매기는 방식이 더 중요해진다. 제6장은 속성별 공식(유사도 = 100 − |Δ|/대조값 × 100), 임계값, 50/35/15 계층 가중치가 WIA 휴리스틱이며, 여러 로트에 대한 품질 범위나 동등성 검정 같은 접근에 기대는 규제 실무를 재현하지 않음을 보였다. 향후 버전은 그런 접근을 구현하거나, 아니면 이 점수가 내부 선별 지수라는 사실을 더욱 분명히 표시해야 한다.

8.5.2 상호교환성

미국에서 상호교환 가능 바이오시밀러는 주(州) 법에 따라 처방자의 개입 없이 약국에서 대체 조제될 수 있다. 과거에는 이 지정을 뒷받침하기 위해 대조약과 바이오시밀러를 번갈아 투여하는 교체(switching) 시험이 요구되었으나, FDA는 이후 그런 시험이 일반적으로 필요하지 않을 수 있다는 권고안 초안을 냈다. 다른 관할권은 각자의 방식으로 대체를 다룬다. v1.0의 BiosimilarAssessment에는 analyticalSimilarity, pkSimilarity, clinicalSimilarity 플래그가 있지만, 상호교환성이나 결론이 적용되는 관할권을 적을 필드는 없다. 같은 분석 자료가 지역에 따라 다른 결론을 뒷받침할 수 있으므로, 관할권 필드는 최소한의 추가 사항이다.

8.5.3 분석법의 수명주기

ICH Q2(R2)(분석법 밸리데이션)와 ICH Q14(분석법 개발)는 함께 분석법을 수명주기를 가진 대상으로 다룬다. 의도한 목적에 맞춰 개발되고, 밸리데이션되며, 모니터링되고, 관리된 절차에 따라 변경된다. USP 일반 챕터 <1220>도 같은 수명주기 개념을 다룬다. 제7장에서 지적했듯 v1.0 참고문헌 목록은 이를 단일클론항체 분석법 챕터로 잘못 표기하고 있으므로 바로잡아야 한다.

데이터 모델에 대한 결론은 이제 익숙하다. 결과는 그 시험법이 식별되고 버전이 붙어 있을 때에만 해석할 수 있다. v1.0은 BindingAffinity와 KineticParameters에 method 필드(SPR, BLI 등)를 두지만 QualityAttributes에는 없다. 그곳의 순도 값은 SEC에서 왔을 수도, CE-SDS나 역상 분석에서 왔을 수도 있다. 8.4.2절의 SourcedValue 래퍼가 method와 methodVersion으로 이 요구도 충족한다. 같은 장치가 머신러닝 출처 관리와 분석법 수명주기 관리를 함께 해결한다.

8.6 WIA-BIO-016 v1.x·v2 로드맵

앞 장들은 명세서, SDK, CLI, 부속 문서에서 구체적인 결함을 찾아냈다. 특이한 결함은 없다. 대부분은 공식·코드·문장을 공유 테스트 모음 없이 나란히 작성했을 때 생기는 흔한 결과다. 이를 한곳에 모으면 불만 목록이 출시 계획으로 바뀐다.

8.6.1 알려진 결함과 수정 제안

위치결함수정 제안출시
calculatePharmacodynamics()수용체 점유율이 Kd로 정의되는데도(명세서 §5.2.2) C/(EC50 + C)로 계산된다. EC50과 Kd가 같을 필요는 없다PDParameters에 선택 항목 kd 추가. 있으면 사용하고, 없으면 EC50 기반 값을 경고와 함께 반환v1.1 (마이너)
calculatePharmacodynamics()therapeuticRange가 근거 없이 0.5–9 × EC50로 고정문서에 휴리스틱으로 명시, 배수를 매개변수화v1.1
BIOPHARMA_CONSTANTSGAS_CONSTANT는 1.987(cal/mol·K)인데 predictShelfLife()는 내부에서 8.314 J/mol·K를 사용단위를 이름에 밝혀 두 값을 모두 공개하고, 함수가 상수를 쓰도록 수정v1.0.x (패치)
predictShelfLife()속도상수를 초 단위로, 한 달을 30일로 가정하지만 문서화되지 않음단위 인자를 받고 환산을 문서화v1.1
convertConcentration()ConcentrationUnit에 mg/mL, μg/mL가 있으나 질량 환산은 BIO007을 던지고 molecularWeight 인자는 쓰이지 않음분자량을 이용한 몰 ↔ 질량 환산 구현v1.1
wia-bio-016 CLIbc가 1e-9를 해석하지 못해 기본 인자와 README 예제가 구문 오류로 실패지수 표기가 들어올 수 있는 계산과 비교를 bc 대신 awk로 처리(제7장)v1.0.x
README존재하지 않는 simulatePharmacokinetics를 import하고, 확인되지 않은 npm 패키지와 저장소 경로를 안내예제를 실제 export와 맞추고 배포 상태를 있는 그대로 명시v1.0.x
명세서 부록 A.1Kd = 1.01 nM을 "높은 친화도"로 해석해 §4.1.2 및 SDK 임계값과 모순"중간"으로 정정v1.0.x (편집)
명세서 §7.3.1"최적 pH = pI ± 1"은 방향이 반대pI에서 떨어진 pH로 제형화(제5장)v1.0.x (편집)
명세서 §10USP <1220> 오표기, §10.2 번호가 2부터 시작제목과 번호 정정v1.0.x (편집)
spec/PHASE-1..4WIA-BIO-015라는 ID와 범용 템플릿 문구를 담고 있음실제 BIO-016 단계 문서로 교체v1.1
DrugCandidate.developmentStageapproved에서 끝나지만 ClinicalPhase에는 phase4가 있음ClinicalPhase에 discovery·approved 값을 더해 재사용v2 (호환성 깨짐)
특성분석 타입PTM 유니언에 탈아미드화, 이성질화, 파이로글루탐산, C-말단 라이신, 당화가 없음. 위치에 사슬·번호 체계 정보가 없음. 고차 구조(Tm, CD) 기록이 없음(제1–3장)유니언 확장, 선택 필드 chain·numbering 추가, HOS 기록 추가(3.7.4의 PTMExt 참조)v1.1
입력 검증assessImmunogenicity()가 0이나 음수인 내약 계수·기간 계수를 받아들임. validateDrugCandidate()는 NaN을 받아들이고 예외를 던지지 않음. calculateKinetics()는 방법과 온도를 고정값으로 씀(제4–6장)잘못된 입력은 BIO007로 거부하고, 분석 메타데이터는 호출자가 넘기게 함v1.1 (동작 변경, 릴리스 노트에 명시)
타입 모델ADC, 다중특이, 핵산, 출처 필드 없음ConjugateAttributes, BindingArm[], SourcedValue; 벡터·세포 제품은 별도 프로파일v1.x 추가형, 프로파일은 v2

8.6.2 semver에 따른 버전 관리

SDK, CLI, 명세서는 모두 버전 1.0.0을 선언한다. 시맨틱 버저닝(MAJOR.MINOR.PATCH)은 각 수정이 할 수 있는 일에 대해 분명한 규칙을 준다. PATCH 릴리스는 인터페이스를 바꾸지 않고 동작을 고치고, MINOR 릴리스는 하위 호환 방식으로 기능을 추가하며, 기존 사용자를 깨뜨리는 변경이 있으면 반드시 MAJOR 릴리스여야 한다.

미묘한 경우는 숫자를 바꾸는 버그 수정이다. 점유율 공식을 고쳐도 타입 시그니처는 전혀 바뀌지 않지만, v1.0에서 계산해 저장한 PDResult는 수정 후 계산한 값과 어긋난다. 과학 표준에서 이는 겉모양의 차이가 아니다. 여기서 제안하는 방식은 점유율 수정을 MINOR 릴리스로 하는 것이다. 새로운 선택 입력(kd)을 추가하기 때문이다. kd가 없으면 옛 동작을 유지하고 경고를 덧붙인다. 그리고 기록에 계산 버전을 남겨, 저장된 값을 어느 공식이 만들었는지 독자가 알 수 있게 한다.

// v1.1 제안: Kd가 있으면 Kd로 점유율 계산
export interface PDParameters {
  concentration: number;   // v1.0은 mg/L; kd를 줄 때는 몰 농도 입력 권장
  emax: number;
  ec50: number;
  hillCoefficient?: number;
  baseline?: number;
  kd?: number;             // 신규(선택): concentration과 같은 단위
}

export interface PDResult {
  /* ...v1.0 필드는 그대로... */
  occupancyBasis: 'kd' | 'ec50-legacy';   // 신규
  calculationVersion: string;             // 신규, 예: '1.1.0'
  warnings?: string[];                    // 신규
}

const basis = params.kd !== undefined ? params.kd : params.ec50;
const receptorOccupancy = params.concentration / (basis + params.concentration);
const occupancyBasis = params.kd !== undefined ? 'kd' : 'ec50-legacy';
if (occupancyBasis === 'ec50-legacy') {
  warnings.push('Occupancy estimated from EC50; supply kd for a binding-based value');
}

계산 예로, 유리 농도 2 nM, EC50 10 nM, Kd 0.5 nM을 생각해 보자(모두 예시값). 레거시 계산은 2/(10 + 2) ≈ 0.17을, Kd 기반 계산은 2/(0.5 + 2) = 0.80을 준다. 두 숫자는 서로 다른 것을 기술한다. occupancyBasis를 담은 기록은 이 차이를 드러내며, 더 낮은 숫자가 "수용체 점유율"로 행세하도록 두지 않는다.

반면 developmentStage가 ClinicalPhase를 재사용하도록 바꾸면 저장된 필드의 허용 값 집합이 달라진다. 일부 v1.0 기록은 더 이상 검증을 통과하지 못한다. 이는 문서화된 이관 절차와 함께 MAJOR 릴리스에 들어가야 하며, 호환성을 깨는 변경은 흩어 놓지 말고 한데 모아야 하는 좋은 이유이기도 하다.

8.6.3 릴리스 순서

v1.0.x  편집 + 패치
        ├─ 명세서 정정: 부록 A.1 해석, §7.3.1 pH, §10 참고문헌
        ├─ CLI: 지수 표기 값은 bc 대신 awk로 처리
        ├─ 상수: 단위를 명시한 기체상수
        └─ README를 실제 export에 맞춤
v1.1    추가형, 하위 호환
        ├─ PDParameters.kd + occupancyBasis + calculationVersion
        ├─ ConjugateAttributes, BindingArm[], NucleicAcidLNPAttributes
        ├─ SourcedValue (일반 숫자도 계속 허용)
        ├─ PTM 유니언 확장, 사슬 지정 위치, HOS 기록
        ├─ 검증되지 않던 입력에 BIO007 검증
        ├─ convertConcentration 질량 <-> 몰
        └─ PHASE-1..4 템플릿을 실제 BIO-016 단계 문서로 교체
v2.0    호환성 깨짐, 이관 가이드 동반
        ├─ 제품 구조와 적응증 분리
        ├─ developmentStage를 ClinicalPhase에 정렬
        ├─ 관문 관련 필드에 SourcedValue 의무화
        └─ 별도 프로파일: 벡터 제품, 세포 제품, 연속 공정

이 순서는 제안이며, 확고한 원칙은 하나뿐이다. 모든 단계에는 제7장에서 설명한 골든 테스트 벡터가 함께해야 한다. 그 수정을 실제로 실행하는 시험이 없는 수정은 수정이 아니라 주장이다.

8.6.4 역사 순서로 본 모달리티

공백을 역사 순서로 보면 이해가 쉽다. 바이오의약품의 각 세대는 이전의 데이터 관행으로는 잘 기술되지 않는 제품 종류를 더했다. 아래 도식에서 v1.0 모델은 처음 세 구간을 비교적 잘 다루고, 네 번째는 부분적으로, 마지막은 거의 다루지 못한다.

1970년대  하이브리도마 기술 — 단일클론항체가 가능해짐
1980년대  최초의 재조합 단백질 의약품과 단일클론항체 의약품
1990년대~ 키메라·인간화·인간 항체, Fc 융합단백질
2000년대  최초의 항체-약물 접합체, 바이오시밀러 허가 경로 정립
2010년대  이중특이 형식, 단일도메인 항체, CAR-T·AAV 제품
2020년대  mRNA-LNP 백신의 대규모 사용, 부위 특이적 ADC, 연속 공정

WIA-BIO-016 v1.0의 포괄 범위:
  단백질 / mAb / Fc 융합 ............ 모델링됨
  ADC ............................... 이름표만 (DAR / 링커 / 페이로드 없음)
  이중특이, 나노바디 ................ 이름표만 (표적 하나, Kd 하나)
  mRNA .............................. 백신 종류로만
  세포·유전자 치료제 ................ 모델링되지 않음

연대 표기는 대략적이며 구간의 순서를 보이기 위한 것일 뿐이다. 이 도식의 요점은 연대기가 아니라 포괄 범위 열이다.

8.6.5 과장 없는 목적

명세서는 서론을 弘益人間, 곧 "널리 인간을 이롭게 한다"로 맺으며, 안전하고 효과적이며 접근 가능한 바이오의약품 개발을 앞당기겠다는 목표를 밝힌다. 데이터 표준은 이 목표에 소박하지만 실질적인 방식으로 기여할 수 있다. 예컨대 바이오시밀러는 분석적 비교에 기댄다. 품질 속성을 기록·비교하는 모델이 잘 정의되어 공개되어 있으면 그 비교를 신중하게 수행하는 비용이 낮아진다. 공개된 참조 코드는 소규모 실험실과 학술 연구 그룹도 큰 조직과 같은 계산을 쓸 수 있게 하고, 이 책이 정리한 결함들이 보여 주듯 오류를 드러나게 한다.

데이터 표준이 할 수 없는 일은 제품을 안전하게, 효과적으로, 또는 허가받게 만드는 것이다. 제7장에서 강조했듯 WIA 적합성 주장은 정의된 테스트 벡터에 대한 구현의 동작을 말하는 진술이다. 규제 결정도, GMP 인증서도, 임상 검증도 아니다. 이 선을 지키는 것 자체가 목적의 일부다. 표준을 쓸모 있게 만드는 신뢰를 잃는 가장 빠른 길은 표준이 실제보다 더 큰 의미로 읽히도록 내버려 두는 것이다.

장 요약

복습 문제

  1. DrugCandidate의 target과 targetAffinity가 하나뿐이라는 점이 왜 이중특이 T세포 연결체를 표현하지 못하는가? 어떤 필드를 추가하겠는가?
  2. DAR 0이 10 %, DAR 2가 30 %, DAR 4가 45 %, DAR 6이 15 %인 분포의 평균 DAR을 계산하라. 검증기가 이 값을 보고된 평균과 대조해야 하는 이유는 무엇인가?
  3. 오프라인 SEC 시험에서 나온 값과 인라인 소프트 센서에서 나온 값의 차이를 설명하고, SourcedValue가 둘을 어떻게 구분하는지 말하라.
  4. 수용체 점유율 공식 수정은 PATCH, MINOR, MAJOR 중 어느 릴리스여야 하는가? 저장된 결과를 근거로 답을 옹호하라.
  5. 자가 유래 세포 치료제 기록의 어떤 부분이 v1.0 어디에도 대응물이 없는가?
  6. WIA-BIO-016 적합성 주장은 제품에 대해 무엇을 말할 수 있고 무엇을 말할 수 없는가?