SAM/BAM 파일이란? — 시퀀싱 alignment 결과의 표준 포맷 (11필드·FLAG·CIGAR 완전 정리)

FASTQ → Aligner (BWA·STAR·minimap2) → SAM/BAM → Downstream(IGV·Variant calling). 시퀀싱 분석의 두 번째 표준 파일.

TL;DRSAM (Sequence Alignment/Map)은 시퀀서가 만든 read(FASTQ)를 참조 유전체에 맞춰 정렬한 결과를 담는 텍스트 표준이다. 한 read = 한 줄 = 11개 필수 필드 (이름·FLAG·염색체·위치·MAPQ·CIGAR·짝 정보·서열·품질).

진짜 무기는 세 가지다. ① FLAG: 12개 비트의 합으로 read의 상태(짝짓기·역가닥·중복 등)를 한 정수로 압축. ② CIGAR: 정렬 모양(매치·삽입·삭제·클립)을 한 문자열로. ③ MAPQ: 매핑이 맞을 확률(Phred 스케일).

BAM은 SAM의 바이너리 압축본(검색용 인덱스 가능), CRAM은 참조 기반 재압축으로 더 가볍다. samtools로 보고·필터·정렬하고, IGV로 시각화한다. 모든 다운스트림 분석(변이 탐지·발현량·peak calling)의 입력이 여기서 시작된다.

🔗 관련 글  ·  입력 FASTQ: FASTQ 파일이란? — 시퀀싱 데이터의 표준 포맷  ·  기술 배경: NGS — 1·2·3세대 시퀀싱 완전 정리

1. SAM/BAM이란? — alignment 결과의 표준 그릇

앞선 FASTQ 파일이란? — 시퀀싱 데이터의 표준 포맷에서 시퀀서가 뱉어 낸 read를 담는 그릇을 봤습니다. 그런데 read 그 자체로는 의미가 약합니다. 참조 유전체(예: GRCh38)의 어디에 붙는지를 알아야 변이도, 발현량도, 결합 부위도 셀 수 있습니다. 그래서 read를 참조에 정렬(alignment)하는 단계가 필요하고, 그 결과를 담는 표준이 바로 SAM입니다.

SAM은 2009년 1000 Genomes Project에서 정착한 텍스트 포맷이고, 그 바이너리·압축 짝꿍이 BAM, 그보다 더 가벼운 후속이 CRAM입니다. 모든 alignment 도구(BWA·STAR·minimap2 등)가 이 포맷으로 결과를 출력하고, 모든 다운스트림 도구가 이 포맷을 입력으로 받습니다. 시퀀싱 분석의 두 번째 표준 파일이라고 생각하면 됩니다.

2. 한 줄 = 11개 필수 필드

SAM 파일은 헤더(@로 시작)와 본문(read 한 줄씩)으로 나뉩니다. 본문 각 줄은 탭으로 구분된 11개 필수 필드로 시작합니다.

#필드의미
1QNAMEread 이름 (FASTQ 식별자 그대로)
2FLAG비트 합으로 read 상태(아래 §3)
3RNAME정렬된 참조 이름(예: chr1). 매핑 안 됐으면 *
4POS1-기반 시작 위치(왼쪽 끝)
5MAPQ매핑 신뢰도(Phred 스케일, §5)
6CIGAR정렬 모양 문자열(§4)
7RNEXT짝 read의 참조 이름. 같으면 =
8PNEXT짝 read의 위치
9TLEN관측된 template 길이(부호 있음)
10SEQread 서열(역가닥이면 reverse-complement된 형태)
11QUALPhred+33 품질 문자열(FASTQ와 동일 인코딩)

11개 뒤로는 선택 태그(NM:i:2, MD:Z:..., RG:Z:sample1 같은 TAG:TYPE:VALUE 형식)가 자유롭게 붙습니다. NM은 미스매치 수, MD는 미스매치 위치, AS는 alignment 점수, RG는 read group처럼 각자 의미가 정해져 있습니다.

예시 한 줄:

read123  99  chr1  10468  60  76M  =  10588  196  GATTTGGG...  IIIIIIH...  NM:i:0

이 한 줄이 "read123이 chr1의 10468번 위치부터 76 bp 매치로 정렬됐고, 짝(R2)이 10588에 있고, MAPQ 60이며 미스매치는 0"이라는 뜻입니다.

3. FLAG — 12개 비트의 합으로 상태를 압축

FLAG는 정수 하나지만 사실 12개 비트의 합입니다. 각 비트가 read의 한 가지 상태를 켜고/끄고 합니다.

비트의미
0x11read paired (짝 시퀀싱)
0x22proper pair (제대로 짝지어짐)
0x44read unmapped
0x88mate unmapped
0x1016reverse strand (역가닥)
0x2032mate reverse strand
0x4064first in pair (R1)
0x80128last in pair (R2)
0x100256secondary alignment
0x200512QC fail
0x4001024duplicate (PCR/광학)
0x8002048supplementary (chimeric)

예를 들어 FLAG = 99는 1+2+32+64이므로 "paired + proper pair + mate reverse + first-in-pair", 즉 짝 시퀀싱의 정상 R1입니다. FLAG = 147(1+2+16+128)이 짝꿍 R2가 됩니다.

짚어둘 점 — 매핑 여부는 오직 0x4 비트로 판정합니다. 0x4가 켜져 있으면 RNAME·POS·CIGAR·MAPQ는 신뢰할 수 없습니다. 이 점이 초보가 자주 헷갈리는 자리입니다.

4. CIGAR — alignment를 한 줄로

CIGAR는 read가 참조에 어떻게 붙었는지를 숫자+문자 쌍으로 적은 압축 표기입니다. 약어는 "Concise Idiosyncratic Gapped Alignment Report"입니다.

기호이름
Mmatch/mismatch정렬 매치 (참조와 같든 다르든)
=sequence match참조와 정확히 일치
Xsequence mismatch참조와 불일치
Iinsertion참조에 없는 염기가 read에 있음
Ddeletionread에 없는 염기가 참조에 있음
Nskipped건너뛴 구간 (RNA-seq의 intron)
Ssoft clipSEQ에는 있지만 정렬에서 제외
Hhard clipSEQ에 아예 없음
Ppadding다중 정렬용 자리 채움

예시 — 76M = read 76 bp 모두 매치. 50M2I26M = 50 매치 → 2 bp 삽입 → 26 매치. 40M1000N36M = 엑손-인트론-엑손 구조(스플라이스 정렬). 15S61M = 앞 15 bp는 클립(어댑터 잔재 등), 뒤 61 bp는 매치.

5. MAPQ — 이 매핑을 얼마나 믿어도 되나

MAPQ는 "이 위치가 틀렸을 확률을 Phred 스케일로 적은 값"입니다. 정의는 FASTQ의 Phred 점수와 똑같습니다.

MAPQ = −10 × log₁₀(P매핑 오류)

현장 감각으로는 이렇게 봅니다.

  • MAPQ 0 — 같은 점수로 여러 곳에 매핑되는 read(multi-mapper).
  • MAPQ ~30 — 신뢰할 만하지만 절대적이지 않음.
  • MAPQ ~60 — BWA-MEM 기준 사실상 unique mapping의 표준 신호.
  • MAPQ = 255 — "값을 줄 수 없음"의 약속(unavailable, 1이 아님).

변이 분석에서 MAPQ 너무 낮은 read(예: < 20)를 거르는 게 흔한 첫 필터입니다.

6. SAM vs BAM vs CRAM — 셋의 차이

비교SAMBAMCRAM
형식텍스트(사람이 읽음)바이너리(BGZF 압축)바이너리(참조 기반 재압축)
크기가장 큼SAM의 약 1/4~1/5BAM의 약 30~60% 더 작음
검색(인덱싱)불가.bai로 무작위 접근.crai로 무작위 접근
참조 의존독립독립참조 FASTA 필요
주 용도디버깅·소규모일상 분석의 표준장기 보관·대규모 코호트

한 줄로 요약하면 SAM은 사람용, BAM은 도구용, CRAM은 보관용입니다. 1000 Genomes·gnomAD·EGA 같은 대규모 프로젝트는 이미 CRAM을 표준으로 씁니다.

7. samtools — 다섯 가지만 외워도 충분

samtools는 SAM/BAM/CRAM의 사실상 공식 다용도 도구입니다. 입문에서는 다섯 명령어면 충분합니다.

명령어무엇을 하나
samtools viewBAM↔SAM 변환·FLAG/영역으로 필터
samtools sort위치순으로 정렬(IGV·다운스트림 도구의 전제)
samtools index.bai 인덱스 생성(무작위 접근용)
samtools flagstatFLAG별 read 통계(매핑률·중복률 등)
samtools stats종합 통계(insert size·error rate·coverage 등)

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

bwa mem ref.fa R1.fq.gz R2.fq.gz | samtools sort -o sample.bam
samtools index sample.bam
samtools flagstat sample.bam

이 세 줄이면 정렬된 BAM과 인덱스가 만들어지고, 매핑률·중복률·짝 비율 같은 첫 QC 지표가 손에 들어옵니다.

시각적으로 보고 싶다면 IGV (Integrative Genomics Viewer)에 정렬된 BAM과 .bai를 함께 끌어다 놓으면, 게놈 위에 read가 쌓인 그림이 바로 뜹니다. 변이 탐지·peak 위치 점검의 표준 시각화입니다.

8. 자주 헷갈리는 것

비교차이
FASTQ vs SAM/BAM정렬 전 raw read(서열+품질) / 정렬한 뒤(위치·CIGAR·FLAG 포함)
BAM vs CRAM표준 압축 / 참조 기반 더 작은 압축(참조 FASTA 동반 필수)
MAPQ vs Phred(품질)"이 매핑이 틀렸을 확률" / "이 염기가 틀렸을 확률"
FLAG 0x4 vs RNAME=*매핑 안 됨의 공식 신호는 0x4(둘이 보통 일치하지만 FLAG가 기준)
secondary vs supplementary같은 read의 대안 매핑(0x100) / 한 read가 여러 곳에 쪼개 매핑(chimeric, 0x800)

9. 핵심 정리

  • SAM = 정렬 결과의 텍스트 표준, BAM은 그 바이너리 압축, CRAM은 참조 기반 더 작은 후속.
  • ✅ 한 read = 한 줄 = 11개 필수 필드 (QNAME·FLAG·RNAME·POS·MAPQ·CIGAR·RNEXT·PNEXT·TLEN·SEQ·QUAL).
  • FLAG는 12개 비트의 합(99·147 같은 숫자), 매핑 여부는 0x4로만 판정.
  • CIGAR는 정렬 모양(M·I·D·N·S·H·P·=·X)의 압축 표기.
  • MAPQ는 매핑이 틀렸을 확률(Phred), 60≈BWA unique, 255=값 없음.
  • samtools view/sort/index/flagstat/stats + IGV 시각화가 입문의 끝.

10. 다음 학습 추천

References

  1. Li, H., et al. (2009). The Sequence Alignment/Map format and SAMtools. Bioinformatics, 25(16), 2078–2079.
  2. The SAM/BAM Format Specification Working Group. Sequence Alignment/Map Format Specification (SAMv1). samtools.github.io/hts-specs/SAMv1.pdf
  3. Hsi-Yang Fritz, M., et al. (2011). Efficient storage of high throughput DNA sequencing data using reference-based compression. Genome Research, 21(5), 734–740. (CRAM)
  4. samtools / htslib official documentation. htslib.org
  5. Broad Institute. Integrative Genomics Viewer (IGV). igv.org

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

이 글을 쓴 사람 Yumingming

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

About · 더 알아보기 →

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