VCF는 좌표만 알려줄 뿐, 의미는 알려주지 않습니다
S42~S50, F32에서 다룬 GWAS·변이 콜링 파이프라인의 산출물은 결국 VCF입니다. VCF 한 줄은 "몇 번 염색체 몇 번째 위치에서 A가 G로 바뀌었다"는 좌표 정보만 담고 있을 뿐, 그 변화가 단백질 기능에 어떤 영향을 미치는지는 알려주지 않습니다. Ensembl VEP(Variant Effect Predictor)는 이 좌표를 유전자 모델에 대입해 기능적 의미로 번역하는 도구입니다.
원리 — 좌표를 유전자 구조에 대입하기
변이 결과(consequence)를 정하는 절차
VEP는 변이 좌표를 트랜스크립트 모델(엑손·인트론·UTR 경계)과 겹쳐 봅니다. 변이가 엑손의 코딩 영역에 떨어지면 그 코돈이 어떻게 바뀌는지 계산해 아미노산 변화를 판정하고, 인트론·프로모터·유전자간(intergenic) 영역에 떨어지면 그에 맞는 표준 용어를 붙입니다. 이 용어는 임의로 정한 것이 아니라 **Sequence Ontology(SO)**라는 공통 어휘 체계를 따릅니다 — 예를 들어 missense_variant(아미노산이 바뀌는 치환), stop_gained(조기 종결 코돈 생성), synonymous_variant(아미노산은 그대로인 침묵 치환) 등입니다.
IMPACT 등급 — 우선순위를 매기는 규칙
VEP는 여러 결과 용어에 HIGH·MODERATE·LOW·MODIFIER 4단계 영향도(IMPACT)를 부여합니다. stop_gained나 스플라이스 부위 변형처럼 단백질 기능을 크게 망가뜨릴 가능성이 높은 것은 HIGH, missense_variant는 MODERATE, synonymous_variant는 LOW, 인트론 깊숙한 곳의 변이는 대개 MODIFIER로 분류됩니다. 한 변이가 여러 트랜스크립트에 걸쳐 서로 다른 결과를 낼 수 있으므로(대체 스플라이싱 등), VEP는 트랜스크립트별 결과를 모두 나열하고 그중 가장 심각한 것을 대표값으로 제시합니다.
손 계산 예제: 다중 트랜스크립트 상황
한 유전자에 트랜스크립트 A(변이가 3번째 엑손에 위치, missense_variant → MODERATE)와 트랜스크립트 B(같은 좌표가 인트론에 위치, intron_variant → MODIFIER)가 있다면, VEP는 두 결과를 모두 보고하되 "가장 심각한 결과(most severe consequence)"로 missense_variant를 대표값으로 채택합니다.
이 대표값만 보고 판단하면 특정 트랜스크립트에서만 심각한 변이를 과대평가하거나, 반대로 임상적으로 중요한 트랜스크립트가 대표값에서 가려질 수 있습니다. 실무에서는 대표값과 함께 전체 트랜스크립트별 결과 목록을 같이 확인하는 것이 안전합니다.
실습: VEP REST API로 변이 주석 확인 (Colab)
# Colab에서 실행. Ensembl VEP REST API로 단일 변이의 주석을 조회합니다.import requests
def vep_annotate(hgvs_notations, species="human"): url = f"https://rest.ensembl.org/vep/{species}/hgvs" r = requests.post( url, headers={"Content-Type": "application/json", "Accept": "application/json"}, json={"hgvs_notations": hgvs_notations}, timeout=30, ) r.raise_for_status() return r.json()
# Ensembl REST 문서의 GRCh38 genomic HGVS 예시result = vep_annotate(["9:g.22125503G>C"])
for entry in result: for tc in entry.get("transcript_consequences", []): print( f"트랜스크립트: {tc.get('transcript_id')}, " f"결과: {tc.get('consequence_terms')}, " f"영향도: {tc.get('impact')}" )여러 트랜스크립트에 대해 서로 다른 consequence_terms가 출력되는지 직접 확인해보고, 어떤 트랜스크립트가 대표적으로 참조되는(canonical) 트랜스크립트인지까지 함께 확인하는 습관을 들이는 것이 실무에서 중요합니다.
CS 매핑
- 구간 트리(interval tree) 조회: 변이 좌표가 어느 엑손·인트론 구간에 속하는지 판정하는 절차는 구간 트리 자료구조의 겹침(overlap) 질의와 동일한 문제입니다.
- 규칙 기반 분류기: SO 용어를 붙이는 절차는 코돈 변화 패턴에 따라 미리 정의된 규칙을 순서대로 매칭하는 규칙 기반 분류기 구조를 따릅니다.
- 우선순위 매칭: 여러 트랜스크립트 결과 중 대표값을 고르는 절차는 규칙 엔진에서 여러 규칙이 동시에 매칭될 때 우선순위로 하나를 선택하는 것과 같은 패턴입니다.
자주 만나는 결함
- 대표 결과(most severe consequence)만 보고 전체 트랜스크립트 결과를 확인하지 않음: 특정 조직에서만 발현되는 트랜스크립트의 결과가 대표값에 가려질 수 있습니다. 임상적으로 중요한 판단에는 전체 트랜스크립트별 결과를 함께 봐야 합니다.
- IMPACT 등급을 임상적 병원성(pathogenicity)과 동일시:
HIGH등급은 "단백질 서열을 크게 바꿀 가능성이 높다"는 뜻이지, 그 자체로 질병을 일으킨다는 임상적 판정은 아닙니다. 병원성 판정에는 F14(AlphaMissense 등)나 임상 데이터베이스(ClinVar) 교차 확인이 필요합니다.
더 깊게 파고 싶다면
본문은 BPD 연구진이 직접 재구성한 서술입니다.
- Ensembl VEP 공식 문서: 전체 consequence 용어·IMPACT 분류 규칙 레퍼런스.
- Sequence Ontology 공식 사이트:
missense_variant등 표준 용어 정의. - VEP REST API 문서: 프로그래밍 방식 호출 전체 엔드포인트.
다음 편 D04에서는 이렇게 주석된 변이·유전자가 실제 종양·정상조직 발현 데이터에서 어떻게 보이는지, 공개 데이터베이스 통합 활용을 다룹니다.