VCF 파일이란? — 유전 변이 정보의 표준 포맷 (8컬럼·INFO·GT 완전 정리)

FASTQ → SAM/BAM → 변이 검출(GATK·DeepVariant) → VCF. 유전체 분석의 세 번째 표준 파일.

TL;DRVCF (Variant Call Format)는 시퀀싱 데이터에서 찾아낸 유전 변이(SNP·삽입·삭제)를 기록하는 텍스트 표준이다. FASTQ(원시 read) → SAM/BAM(정렬) → VCF(변이)로 이어지는 유전체 분석의 세 번째 표준 파일이고, 변이 하나 = 한 줄 = 8개 필수 컬럼(염색체·위치·ID·REF·ALT·품질·필터·INFO)으로 시작한다.

진짜 핵심은 세 가지다. ① REF·ALT: 기준 염기와 바뀐 염기를 나란히 적어 SNP·삽입·삭제·MNV를 모두 표현한다(삽입·삭제는 기준 염기 하나를 앞에 붙이는 게 관건). ② INFO·FORMAT: 변이마다, 또 샘플마다 깊이(DP)·빈도(AF)·신뢰도(GQ)를 자유롭게 덧붙인다. ③ GT(유전형): 0/0·0/1·1/1처럼 그 사람이 이 변이를 어떻게 가졌는지 적는, 사실상 이 포맷의 결론이다.

gVCF는 변이가 없는 위치까지 적어 여러 샘플을 한꺼번에 분석할 때 쓰고, BCF는 그 바이너리 압축본이다. 변이는 GATK·bcftools·DeepVariant(딥러닝)가 BAM에서 뽑아내고, bgzip + tabix로 압축·색인하며, VEP·SnpEff로 의미를 입혀 ClinVar 같은 임상 해석으로 넘어간다.

🔗 관련 글  ·  입력 BAM: SAM/BAM 파일이란? — 시퀀싱 alignment 결과의 표준 포맷  ·  그 앞 단계: FASTQ 파일이란? — 시퀀싱 데이터의 표준 포맷

1. VCF란? — 변이 정보의 표준 그릇

앞선 SAM/BAM 파일이란?에서 read를 참조 유전체에 정렬한 결과를 봤습니다. 그런데 정렬 그 자체가 목적인 경우는 드뭅니다. 우리가 정말 알고 싶은 건 보통 "이 사람의 유전체가 참조와 어디서, 어떻게 다른가"입니다. 그 차이, 곧 변이(variant)를 한 줄씩 정리해 담는 표준이 바로 VCF입니다.

흐름으로 보면 자리가 분명합니다. FASTQ가 시퀀서가 뱉은 원시 read를 담고 SAM/BAM이 그 read를 참조에 정렬한 결과를 담는다면, VCF는 그 정렬에서 끌어낸 변이를 담습니다. FASTQ → BAM → VCF, 이 세 포맷이 유전체 분석의 3대 표준 파일입니다. VCF는 그 마지막이자, 사람이 실제로 해석하는 결과물에 가장 가까운 파일입니다.

VCF는 2011년 1000 Genomes Project에서 정착했고(Danecek et al., 2011), 지금은 SAM/BAM과 같은 hts-specs 기구가 관리합니다. 최신 버전은 VCFv4.5(2024)이지만, 현장에서 만나는 대부분은 4.2~4.3 계열이고 기본 구조는 버전 사이에 거의 같습니다.

2. 파일 구조 — 헤더와 데이터

VCF는 크게 두 부분입니다. ##로 시작하는 메타정보와, 그 아래 실제 변이 데이터입니다.

부분시작내용
메타정보##파일 버전, INFO·FORMAT·FILTER 키 정의, 참조 염색체 목록
컬럼 헤더# (하나)8개 필수 컬럼 + (있으면) FORMAT·샘플 이름
데이터(기호 없음)변이 한 개 = 한 줄, 탭으로 구분

메타정보의 핵심은 나중에 나올 약어를 미리 정의해 두는 것입니다. 예를 들어 ##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">는 "앞으로 INFO 칸에 나오는 DP는 정수형 총 깊이"라고 선언하는 줄입니다. 덕분에 본문에서는 DP=14처럼 짧게 써도 해석이 됩니다.

그다음 #CHROM POS ID ...로 시작하는 컬럼 헤더 한 줄이 있고, 이어서 변이가 한 줄씩 나옵니다.

VCF는 보통 그냥 두지 않고 bgzip으로 압축한 .vcf.gz로 보관하며, tabix로 색인(.tbi)을 만들어 특정 영역만 빠르게 꺼내 봅니다. BAM에 .bai 인덱스를 다는 것과 똑같은 발상입니다.

3. 8개 필수 컬럼

데이터 줄은 탭으로 구분된 8개 필수 컬럼으로 시작합니다.

#컬럼의미
1CHROM변이가 있는 염색체(예: chr20)
2POS1-기반 위치(REF의 시작점)
3ID변이 식별자(dbSNP의 rs...), 없으면 .
4REF참조(기준) 염기
5ALT바뀐(대립) 염기, 여러 개면 쉼표로
6QUAL변이가 진짜일 신뢰도(Phred 스케일)
7FILTER필터 통과는 PASS, 탈락은 그 이유
8INFO변이 부가 정보(key=value;...)

여기에 유전형 정보가 있으면 9번째 FORMAT 컬럼과 그 뒤로 샘플별 컬럼이 붙습니다(§5).

예시 한 줄:

chr20  14370  rs6054257  G  A  29  PASS  NS=3;DP=14;AF=0.5  GT:GQ:DP  0|0:48:1  1|0:48:8  1/1:43:5

"chr20의 14370번 위치에서 참조 GA로 바뀐 변이(dbSNP rs6054257)이고, 신뢰도 29로 필터를 통과(PASS)했으며, 세 샘플의 유전형이 각각 0|0·1|0·1/1"이라는 뜻입니다. 뒤쪽 GT 읽는 법은 §6에서 풉니다.

짚어둘 점 — VCF의 POS는 1-기반입니다. 같은 변이라도 BED 파일(0-기반)과 좌표가 1만큼 어긋나므로, 포맷을 오갈 때 자주 사고가 납니다. SAM/BAM의 POS와는 같은 1-기반이라 호환됩니다.

VCF 한 줄 해부도 — 8개 필수 컬럼과 유전형(GT) 한눈에 보기.

4. REF·ALT — 변이 네 종류를 적는 법

VCF의 묘미는 단 두 칸(REF·ALT)으로 작은 변이를 모두 표현한다는 점입니다.

종류REFALT읽는 법
SNP(단일염기 치환)GA한 염기가 G→A로 치환
삽입(insertion)TTACGT 뒤에 ACG가 끼어듦
삭제(deletion)TACGTT 뒤의 ACG가 사라짐
MNV(다중염기 치환)GACT두 염기가 한꺼번에 치환

SNP는 직관적입니다. 한 글자 대 한 글자. 헷갈리는 건 삽입·삭제인데, 여기에 VCF의 약속이 하나 있습니다. 변이 바로 앞의 염기 하나(anchor base)를 REF·ALT 양쪽에 공통으로 붙여 적는다는 것입니다. 그래서 "ACG가 삽입됨"을 그냥 ALT=ACG로 적지 않고, 앞 염기 T를 붙여 REF=T, ALT=TACG로 적습니다. 이렇게 하면 POS가 항상 실재하는 염기를 가리켜 표현이 일관됩니다.

같은 indel을 여러 방식으로 적을 수 있다는 점도 알아둘 만합니다. 그래서 보통 왼쪽 정렬(left-alignment)로 표현을 표준화하는데(bcftools norm), 같은 변이를 두 번 세거나 비교에서 놓치는 사고를 막아 줍니다.

REF·ALT 두 칸으로 적는 변이 네 종류 (SNP·삽입·삭제·MNV).

5. INFO·FORMAT·샘플 — 확장 가능한 부분

8개 필수 컬럼이 뼈대라면 INFO와 FORMAT은 살입니다. 분석마다 필요한 정보가 다르기 때문에, VCF는 이 두 칸을 자유롭게 늘릴 수 있게 설계됐습니다.

INFO — 변이 하나에 대한 정보를 key=value로 적고 세미콜론으로 잇습니다. 자주 보는 키만 추려도 충분합니다.

DP이 위치의 총 read 깊이
AF대립유전자 빈도(allele frequency)
AC / AN대립유전자 개수 / 전체 대립유전자 수
MQ이 위치 read들의 평균 매핑 품질

FORMAT과 샘플GT:AD:DP:GQ처럼 콜론으로 이은 샘플 데이터의 양식을 먼저 적고, 그 뒤 각 샘플 칸이 같은 순서로 값을 채웁니다.

GT유전형(genotype) — 가장 중요(§6)
AD대립유전자별 read 수(예: 18,17)
DP이 샘플의 깊이
GQ유전형 신뢰도(Phred)
PL유전형별 가능도(0/0,0/1,1/1 순)

예를 들어 FORMAT이 GT:AD:DP:GQ이고 샘플 값이 0/1:18,17:35:99라면, "이 사람은 이형접합(0/1)이고, 참조 18개·변이 17개 read로 총 35깊이, 유전형 신뢰도 99"라는 뜻입니다. AD의 18:17이 거의 반반이라는 점이 이형접합과 잘 맞아떨어집니다.

6. GT — 유전형 읽는 법

VCF에서 사람들이 결국 가장 많이 보는 칸이 GT(유전형)입니다. 사람은 염색체를 둘씩 갖기 때문에(이배체), 유전형도 대립유전자 두 개로 적습니다. 숫자의 약속은 단순합니다. 0 = REF(참조), 1 = 첫 번째 ALT, 2 = 두 번째 ALT.

GT이름
0/0동형접합 참조양쪽 다 참조 — 사실상 변이 없음
0/1이형접합한쪽만 변이(가장 흔한 변이형)
1/1동형접합 변이양쪽 다 변이
1/2이형접합(다중)서로 다른 두 변이를 하나씩
./.결측판정할 데이터가 없음

구분선 기호도 의미가 있습니다. /는 비위상(unphased), 곧 두 대립유전자가 어느 쪽 염색체(부계·모계)에서 왔는지 모른다는 뜻이고, |는 위상(phased), 어느 가닥에 있는지 안다는 뜻입니다. 0|11|0은 비위상으로는 같은 이형접합이지만, 위상까지 보면 변이가 놓인 가닥이 서로 반대입니다. 한 가닥에 여러 변이가 어떻게 배열됐는지(haplotype)를 따질 때 이 차이가 중요해집니다.

유전형(GT) 디코더 — 0/0·0/1·1/1·1/2 읽는 법.

7. VCF vs gVCF vs BCF — 셋의 차이

비교VCFgVCFBCF
형식텍스트텍스트(gVCF 규약)바이너리
기록 범위변이 있는 위치만모든 위치(비변이 구간 포함)VCF와 동일(인코딩만 다름)
주 용도최종 변이 목록여러 샘플 합동 분석도구 처리·대용량 속도
대표 도구모든 다운스트림GATK GenotypeGVCFsbcftools

가장 헷갈리는 건 VCF와 gVCF의 차이입니다. 보통 VCF는 변이가 있는 자리만 적습니다. 그런데 여러 사람을 한꺼번에 비교하려면 "이 자리에 변이가 없었다"와 "이 자리는 데이터가 없어서 모른다"를 구분해야 합니다. gVCF는 변이가 없는 구간까지 블록으로 기록해 이 둘을 구별하고, 그래서 코호트 합동 분석(joint genotyping)의 입력으로 쓰입니다. BCF는 SAM에 대한 BAM처럼 VCF의 바이너리 압축본이라, 도구가 빠르게 읽고 씁니다.

8. 변이는 어떻게 검출되나 — caller와 최신 흐름

VCF는 손으로 쓰는 파일이 아니라, 변이 검출기(variant caller)가 BAM을 읽어 만들어 줍니다. 대표 도구는 셋입니다.

  • GATK HaplotypeCaller — 변이가 의심되는 구역을 통째로 다시 조립(local reassembly)해 정확도가 높고, 사실상 사람 유전체 분석의 표준입니다. gVCF를 만들어 여러 샘플을 합쳐 분석하는 흐름과 잘 맞습니다.
  • bcftools (mpileup·call) — 각 위치의 염기를 세는 가벼운 방식으로 빠릅니다. 미생물·소규모 분석에서 특히 실용적입니다.
  • DeepVariant — 구글이 만든 딥러닝 검출기입니다. 정렬을 이미지처럼 바꿔 합성곱 신경망(CNN)으로 변이 여부를 분류하는데, PrecisionFDA Truth Challenge 같은 벤치마크에서 SNP·indel 정확도 최상위권을 꾸준히 기록했습니다(Poplin et al., 2018).

2024~2026 흐름은 '참조'와 '딥러닝' 두 축으로 모입니다. 하나는 단일 직선 참조(GRCh38)를 넘어 여러 사람의 유전체를 그래프로 합친 범유전체(pangenome)로 옮겨 가는 흐름입니다(2023년 인간 범유전체 초안, Liao et al., Nature). 다른 하나는 그 둘을 결합한 pangenome-aware DeepVariant(2025)로, read와 범유전체 하플로타입을 함께 이미지로 만들어 직선 참조 대비 오류를 최대 25.5%까지 줄였다고 보고됐습니다.

검출이 끝났다고 분석이 끝난 건 아닙니다. 갓 만든 VCF는 "여기 변이가 있다"까지만 말합니다. 이게 어떤 유전자의, 어떤 결과를 낳는 변이인지는 VEP·SnpEff 같은 주석(annotation) 도구가 입혀 주고, 그 결과를 ClinVar·gnomAD 같은 데이터베이스와 맞춰 임상·집단 수준의 의미로 해석합니다.

9. bcftools — 다섯 명령어

VCF/BCF의 사실상 공식 도구는 bcftools입니다(SAM/BAM의 samtools와 같은 집안). 입문에는 다섯 개면 충분합니다.

명령어무엇을 하나
bcftools viewVCF↔BCF 변환·영역/샘플로 보기
bcftools filterQUAL·DP 등 조건으로 변이 거르기
bcftools normindel 왼쪽 정렬·표현 표준화(§4)
bcftools stats변이 개수·치환 패턴(Ts/Tv) 등 통계
bcftools merge여러 샘플 VCF를 하나로 합치기

전형적인 흐름은 짧습니다.

bcftools mpileup -f ref.fa sample.bam | bcftools call -mv -Oz -o calls.vcf.gz
bcftools norm -f ref.fa calls.vcf.gz -Oz -o norm.vcf.gz
tabix -p vcf norm.vcf.gz

BAM에서 변이를 부르고(call), 표현을 표준화하고(norm), 색인(tabix)까지 세 줄이면 분석 가능한 VCF가 손에 들어옵니다.

10. 자주 헷갈리는 것

비교차이
SAM/BAM vs VCFread를 어디에 정렬했나(위치별 read) / 그 정렬에서 끌어낸 변이(변이별 요약)
VCF vs gVCF변이 있는 자리만 / 모든 자리(비변이 포함, 합동 분석용)
QUAL vs GQ이 자리에 변이가 있을 신뢰도(변이 단위) / 이 샘플 유전형의 신뢰도(샘플 단위)
/ vs |비위상(가닥 모름) / 위상(가닥 앎)
POS 1-기반 vs BED 0-기반VCF·SAM은 1부터 / BED는 0부터(좌표 1 차이)

11. 핵심 정리

  • VCF = 변이 정보의 텍스트 표준, FASTQ → BAM → VCF로 이어지는 3대 포맷의 마지막.
  • ✅ 변이 하나 = 한 줄 = 8개 필수 컬럼(CHROM·POS·ID·REF·ALT·QUAL·FILTER·INFO).
  • REF·ALT로 SNP·삽입·삭제·MNV를 표현, indel은 기준 염기 하나를 앞에 붙인다.
  • INFO(변이별)·FORMAT/샘플(샘플별)로 정보를 확장, GT(0/0·0/1·1/1)가 결론.
  • gVCF는 모든 위치(합동 분석용), BCF는 바이너리 압축본.
  • GATK·bcftools·DeepVariant가 BAM에서 변이를 뽑고, VEP·SnpEff로 의미를 입힌다.

12. 다음 학습 추천

References

  1. Danecek, P., et al. (2011). The variant call format and VCFtools. Bioinformatics, 27(15), 2156–2158.
  2. The VCF/BCF Specification Working Group. The Variant Call Format Specification (VCFv4.5). hts-specs (2024). samtools.github.io/hts-specs
  3. Danecek, P., et al. (2021). Twelve years of SAMtools and BCFtools. GigaScience, 10(2), giab008.
  4. DePristo, M. A., et al. (2011). A framework for variation discovery and genotyping using next-generation DNA sequencing data. Nature Genetics, 43, 491–498. (GATK)
  5. Poplin, R., et al. (2018). A universal SNP and small-indel variant caller using deep neural networks. Nature Biotechnology, 36, 983–987. (DeepVariant)
  6. Liao, W. W., et al. (2023). A draft human pangenome reference. Nature, 617, 312–324.
  7. McLaren, W., et al. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17, 122. (VEP)

Pipette & Pipeline · A bio portfolio journal — bridging research, data, and industry.

이 글을 쓴 사람 Yumingming

생명융합공학과 박사과정.
Microbiome · Cosmetics · RNA Therapeutics · Bioinformatics를 공부하며,
실험(Wet Lab)과 데이터(Dry Lab)를 잇는 글을 논문(article) 기반으로 씁니다.

About · 더 알아보기 →

⚕️ 이 글은 학습·정보 제공 목적이며, 의학적 진단·치료·조언을 대체하지 않습니다. 건강·질병·치료에 관한 결정은 반드시 의사 등 전문가와 상의하세요. 자세한 내용은 면책조항을 참고해 주세요.