BioPlayground

🧬
목록으로

GATK4 Best Practices 개요: FASTQ에서 VCF까지 6단계 파이프라인 지도

임상 유전체 표준 파이프라인 GATK4 Best Practices를 왜 그 순서대로 밟아야 하는지, 각 단계가 통계 가정을 어떻게 만족시키는지, Germline과 Somatic이 어디서 갈라지는지 지도로 정리합니다.

중급
|
20
|
검증 완료 (2026-07-22)
variant callingGATK4clinical genomics pipeline
진행률0/52 (0%)

왜 GATK4 Best Practices인가요

인간 유전체 분석에서 "표준 파이프라인이 뭐예요?"라는 질문의 답은 지난 12년 내내 하나였습니다. Broad Institute의 GATK Best Practices. 임상 진단 랩, 대규모 컨소시엄(gnomAD, All of Us, UK Biobank), 대부분의 논문 재현이 이 파이프라인을 그대로 씁니다. 새 도구가 나올 때마다 "GATK 대비"로 벤치마킹합니다.

이 편에서는 GATK4 Best Practices의 큰 그림을 지도 한 장으로 잡습니다. 다음 5편(S07~S11)에서 각 단계의 옵션과 통계 유도를 하나씩 파고들 겁니다. 지금은 지도를 먼저 봅시다.

Germline vs Somatic — 파이프라인이 두 갈래로 갈립니다

가장 먼저 잡을 개념. 파이프라인이 두 목적으로 나뉩니다.

  • Germline (배선): 정상 세포의 유전자형. 부모에게서 물려받은 변이. 한 개인 = 하나의 유전자형.
  • Somatic (체세포): 암 등에서 정상 세포와 다르게 나타난 변이. 종양 조직 = 여러 아형(subclone)이 섞여 있음.

두 목적의 파이프라인은 앞부분(정렬·QC)이 완전히 같고, 변이 콜링 단계에서 갈립니다. Germline은 HaplotypeCaller, Somatic은 Mutect2를 씁니다. 통계 가정이 다르기 때문입니다.

6단계 지도

GATK4 Best Practices Germline 파이프라인의 표준 6단계는 이렇습니다.

text
[1] Raw FASTQ
     │
[2] BWA-MEM 정렬  ────────  read group 태깅
     │
[3] MarkDuplicates (S07)  ─  PCR 중복 표시
     │
[4] BQSR (S08)  ────────────  염기 품질 재보정
     │
[5] HaplotypeCaller (S09) ─  변이 후보 발굴 (per-sample GVCF)
     │
[6] Joint Genotyping + VQSR (S11) ─ 다중 샘플 통합 + 필터링
     │
     ↓
   Final VCF

각 단계가 왜 필요한지 한 문장씩만 잡아봅시다.

[3] MarkDuplicates — PCR 편향 통제

라이브러리 준비 시 PCR 증폭 단계가 어떤 리드는 100번, 어떤 리드는 1번 복제합니다. 이 편향을 무시하면 자주 복제된 리드의 위치가 커버리지 상 과대 대표됩니다. MarkDuplicates는 같은 시작 좌표+CIGAR를 가진 리드들을 duplicate로 표시(플래그 1024)합니다. 실제로 삭제하지 않고 표시만 하기 때문에 뒤 단계에서 통계적으로 무시할 수 있습니다.

[4] BQSR — Phred 점수의 사후 보정

시퀀서가 보고한 Phred 점수는 완벽하지 않습니다. 특정 dinucleotide 문맥이나 사이클 위치에 따라 시스템적으로 편향됩니다. BQSR(Base Quality Score Recalibration)은 알려진 SNP 사이트(dbSNP)를 참 값으로 삼아 각 리드 위치의 실제 오류율을 학습하고, Phred 점수를 재계산합니다. 이 재계산이 HaplotypeCaller의 가정을 만족시켜 위양성을 크게 줄입니다.

[5] HaplotypeCaller — Local Assembly + Bayesian 콜링

기존 변이 콜러(GATK3의 UnifiedGenotyper 등)는 각 위치를 독립적으로 봤습니다. HaplotypeCaller는 작은 창(예: 300bp)을 뽑아 그 구간의 리드로 로컬 어셈블리를 하고, 후보 하플로타입에 리드가 얼마나 잘 붙는지로 유전자형을 판정합니다. 이 접근이 인델 근처에서 극적으로 정확합니다. 개별 샘플별 GVCF를 뱉어 나중에 다중 샘플로 통합할 수 있게 합니다.

[6] Joint Genotyping + VQSR — 다중 샘플 통합과 필터링

  • Joint Genotyping: 여러 샘플의 GVCF를 통합 → 인구 수준의 알렐 빈도를 활용해 각 샘플의 유전자형을 재판정.
  • VQSR (Variant Quality Score Recalibration): 알려진 SNP·인델 세트를 참 값으로 삼아 GaussianMixtureModel을 훈련하고, 새 변이 후보들에 확률적 신뢰도를 부여.

VQSR은 샘플 수가 30명 이상 있어야 안정적입니다. 단일 샘플이나 소규모(<30)면 Hard Filtering(간단한 임계 필터)으로 대체합니다. S11에서 이 결정을 자세히 봅니다.

Somatic 갈래 — Mutect2 + PoN

암 조직에서 체세포 변이만 뽑고 싶으면 Germline 갈래를 이렇게 대체합니다.

text
[3] MarkDuplicates
     │
[4] BQSR
     │
[5-somatic] Mutect2 (S10)  ─  종양-정상 쌍 또는 종양 단독 (PoN 필요)
     │
[6-somatic] FilterMutectCalls  ─  체세포 변이만 필터

핵심 차이 두 가지.

  • 낮은 알렐 빈도(VAF) 감지: 종양 조직 안에서 5% 이하 세포에만 있는 변이도 찾아야 합니다.
  • Panel of Normals (PoN): 정상 대조군이 없을 때 여러 정상 샘플의 시퀀싱 노이즈를 종합해 위양성 필터 근거로 씀.

Germline과 Somatic이 어디서 갈리는지 감으로 잡아두면 이후 S09/S10 편이 훨씬 편해집니다.

왜 이 순서인가 — 통계 가정의 사슬

Best Practices 각 단계가 왜 그 순서인지 감으로 잡아봅시다.

  1. 정렬을 하지 않으면 참조에서의 위치가 없어 변이가 정의되지 않음.
  2. MarkDuplicates를 하지 않으면 PCR 편향이 커버리지 통계를 왜곡.
  3. BQSR을 하지 않으면 HaplotypeCaller가 오류 확률 가정을 위반.
  4. HaplotypeCaller가 없으면 후보 변이가 없음.
  5. VQSR/Hard Filter가 없으면 위양성이 그대로 남음.

이 다섯 조건이 논리적 사슬입니다. 순서를 바꾸면 뒤 단계의 통계 가정이 깨집니다. 다음 5편에서 이 사슬을 통계 수준으로 파고듭니다.

Docker/Singularity로 GATK 환경 통일

GATK4는 Java + Python + R + 그 외 도구들이 얽혀 있어 환경 세팅이 자주 실패합니다. Broad Institute가 공식 Docker 이미지를 배포합니다.

bash
docker pull broadinstitute/gatk:latest
docker run --rm -v $(pwd):/data broadinstitute/gatk:latest \
gatk HaplotypeCaller -R /data/hg38.fa -I /data/S1.bam -O /data/S1.vcf.gz

또는 HPC에서 Singularity/Apptainer:

bash
apptainer pull docker://broadinstitute/gatk:latest
apptainer exec gatk_latest.sif gatk HaplotypeCaller -R hg38.fa -I S1.bam -O S1.vcf.gz

컨테이너 하나로 통일해두면 팀 재현성이 크게 오릅니다. 다음 편들에서 CLI 예제는 컨테이너 명령이 아니라 안쪽 명령만 표기하겠습니다.

리소스 파일 — 참조와 알려진 사이트

GATK가 요구하는 부가 파일이 있습니다. 처음 파이프라인 세팅할 때 GATK Resource Bundle에서 미리 받아둡시다.

  • 참조 fasta + .fai + .dict
  • dbSNP VCF (BQSR용)
  • 알려진 인델 VCF (Mills, 1000G indels)
  • HapMap · Omni · 1000G Phase1 SNP (VQSR training)

전부 GATK Resource Bundle 페이지에서 공개되어 있습니다. hg38 기준 총 100GB 정도.

실무 팁 세 개

1. --tmp-dir을 큰 파티션에

GATK 도구들이 임시 파일을 대량 만듭니다. /tmp가 작으면 실패합니다. --tmp-dir /data/gatk_tmp처럼 넉넉한 볼륨을 지정.

2. 인터벌 파일로 스코프 좁히기

WES라면 엑솜 인터벌만, 특정 유전자라면 그 구간만. -L intervals.bed로 스코프 좁히면 실행 시간이 극적으로 줄어듭니다.

3. 로그 남기기 습관

bash
gatk HaplotypeCaller ... 2>&1 | tee S1_hc.log

파이프라인 사후 디버깅의 90%가 로그 확인입니다. 로그 없이 돌리면 실패 원인 추적이 지옥이 됩니다.

Galaxy EU에서 GATK 프리셋

CLI가 부담스러우면 Galaxy EU에서 GATK4 워크플로우를 그대로 실행할 수 있습니다.

  1. Shared Data → Workflows → Whole Genome Sequencing (WGS) - Germline 검색.
  2. Import 후 History에서 실행.
  3. 입력: paired-end FASTQ, 참조 hg38.

Galaxy가 내부에서 정확히 위의 6단계를 순서대로 실행합니다. 옵션이 UI에 노출되어 있어 CLI를 배우기 전 감을 잡기 좋습니다.

CS 매핑

  • 다단 파이프: 각 단계의 출력이 다음 단계 입력. Unix pipe 철학의 실무 확장.
  • 통계 프리컨디셔닝: MarkDuplicates·BQSR = 뒷단 통계 가정 만족시키기 위한 사전 처리.
  • 재현성 정책: Docker 이미지 + Resource Bundle 버전 고정 → 결과 재현 보장.

마무리

지도를 잡았습니다. 앞으로 5편에 걸쳐 이 6단계 각각을 파고듭니다.

  • S07: MarkDuplicates의 PCR 중복 판정 알고리즘.
  • S08: BQSR의 Phred 재보정 통계 유도.
  • S09: HaplotypeCaller의 로컬 어셈블리와 Bayesian 콜링.
  • S10: Mutect2 + PoN의 소마틱 통계.
  • S11: VQSR과 Hard Filtering의 결정 규칙.

지도 없이 파이프라인의 옵션을 만지면 길을 잃습니다. 이 편의 6단계 그림을 머릿속에 담고 다음 편으로 갑시다.

더 깊게 파고 싶다면

  • Van der Auwera G. & O'Connor B. (2020), Genomics in the Cloud: Using Docker, GATK, and WDL in Terra. O'Reilly. GATK4 저자의 공식 실무서.
  • DePristo M. et al. (2011), A framework for variation discovery and genotyping using next-generation DNA sequencing data. Nature Genetics 43:491. GATK 원 논문.
  • Broad Institute BroadE 유튜브 — GATK Best Practices Overview 30분 강의. 자막 완비. 각 단계의 결정 배경이 좋습니다.
  • GATK 공식 워크스루 (https://gatk.broadinstitute.org/hc/en-us/articles/360035531192): 단계별 워크플로우 다이어그램.
  • Sanger Genome Structure Analysis 유튜브 채널: GATK4 실무 데모.

지금부터의 5편이 실무 유전체 분석의 심장입니다. Galaxy EU 계정을 만들어두고 소형 데이터 하나로 6단계를 눌러본 뒤 다음 편으로 가면 각 단계가 훨씬 선명해집니다.