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

TL;DR — SAM (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개 필수 필드로 시작합니다.
| # | 필드 | 의미 |
|---|---|---|
| 1 | QNAME | read 이름 (FASTQ 식별자 그대로) |
| 2 | FLAG | 비트 합으로 read 상태(아래 §3) |
| 3 | RNAME | 정렬된 참조 이름(예: chr1). 매핑 안 됐으면 * |
| 4 | POS | 1-기반 시작 위치(왼쪽 끝) |
| 5 | MAPQ | 매핑 신뢰도(Phred 스케일, §5) |
| 6 | CIGAR | 정렬 모양 문자열(§4) |
| 7 | RNEXT | 짝 read의 참조 이름. 같으면 = |
| 8 | PNEXT | 짝 read의 위치 |
| 9 | TLEN | 관측된 template 길이(부호 있음) |
| 10 | SEQ | read 서열(역가닥이면 reverse-complement된 형태) |
| 11 | QUAL | Phred+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의 한 가지 상태를 켜고/끄고 합니다.
| 비트 | 값 | 의미 |
|---|---|---|
| 0x1 | 1 | read paired (짝 시퀀싱) |
| 0x2 | 2 | proper pair (제대로 짝지어짐) |
| 0x4 | 4 | read unmapped ⭐ |
| 0x8 | 8 | mate unmapped |
| 0x10 | 16 | reverse strand (역가닥) |
| 0x20 | 32 | mate reverse strand |
| 0x40 | 64 | first in pair (R1) |
| 0x80 | 128 | last in pair (R2) |
| 0x100 | 256 | secondary alignment |
| 0x200 | 512 | QC fail |
| 0x400 | 1024 | duplicate (PCR/광학) |
| 0x800 | 2048 | supplementary (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"입니다.
| 기호 | 이름 | 뜻 |
|---|---|---|
| M | match/mismatch | 정렬 매치 (참조와 같든 다르든) |
| = | sequence match | 참조와 정확히 일치 |
| X | sequence mismatch | 참조와 불일치 |
| I | insertion | 참조에 없는 염기가 read에 있음 |
| D | deletion | read에 없는 염기가 참조에 있음 |
| N | skipped | 건너뛴 구간 (RNA-seq의 intron) |
| S | soft clip | SEQ에는 있지만 정렬에서 제외 |
| H | hard clip | SEQ에 아예 없음 |
| P | padding | 다중 정렬용 자리 채움 |
예시 — 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 — 셋의 차이
| 비교 | SAM | BAM | CRAM |
|---|---|---|---|
| 형식 | 텍스트(사람이 읽음) | 바이너리(BGZF 압축) | 바이너리(참조 기반 재압축) |
| 크기 | 가장 큼 | SAM의 약 1/4~1/5 | BAM의 약 30~60% 더 작음 |
| 검색(인덱싱) | 불가 | .bai로 무작위 접근 | .crai로 무작위 접근 |
| 참조 의존 | 독립 | 독립 | 참조 FASTA 필요 |
| 주 용도 | 디버깅·소규모 | 일상 분석의 표준 | 장기 보관·대규모 코호트 |
한 줄로 요약하면 SAM은 사람용, BAM은 도구용, CRAM은 보관용입니다. 1000 Genomes·gnomAD·EGA 같은 대규모 프로젝트는 이미 CRAM을 표준으로 씁니다.
7. samtools — 다섯 가지만 외워도 충분
samtools는 SAM/BAM/CRAM의 사실상 공식 다용도 도구입니다. 입문에서는 다섯 명령어면 충분합니다.
| 명령어 | 무엇을 하나 |
|---|---|
samtools view | BAM↔SAM 변환·FLAG/영역으로 필터 |
samtools sort | 위치순으로 정렬(IGV·다운스트림 도구의 전제) |
samtools index | .bai 인덱스 생성(무작위 접근용) |
samtools flagstat | FLAG별 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. 다음 학습 추천
- 📗 FASTQ 파일이란? — 시퀀싱 데이터의 표준 포맷 — SAM의 입력 (복습)
- 📗 NGS — 1·2·3세대 시퀀싱 완전 정리 — read가 만들어지는 그 단계 (복습)
References
- Li, H., et al. (2009). The Sequence Alignment/Map format and SAMtools. Bioinformatics, 25(16), 2078–2079.
- The SAM/BAM Format Specification Working Group. Sequence Alignment/Map Format Specification (SAMv1). samtools.github.io/hts-specs/SAMv1.pdf
- 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)
- samtools / htslib official documentation. htslib.org
- Broad Institute. Integrative Genomics Viewer (IGV). igv.org
Pipette & Pipeline · A bio portfolio journal — bridging research, data, and industry.
'Bio Glossary > Bioinformatics 101' 카테고리의 다른 글
| RNA-seq 정규화란? — 읽은 수를 '비교 가능한 값'으로 바꾸는 법 (정량·정규화·DESeq2 완전 정리) (0) | 2026.06.08 |
|---|---|
| 변이 호출(variant calling)이란? — BAM에서 진짜 변이를 가려내 VCF로 (GATK·DeepVariant 완전 정리) (0) | 2026.06.02 |
| 서열 정렬(read alignment)이란? — 수억 개 read를 유전체에 맞추는 법 (BWA·MAPQ·정렬 도구 완전 정리) (0) | 2026.06.02 |
| VCF 파일이란? — 유전 변이 정보의 표준 포맷 (8컬럼·INFO·GT 완전 정리) (3) | 2026.05.29 |
| FASTQ 파일이란? — 시퀀싱 데이터의 표준 포맷 (4줄 구조·품질점수) (0) | 2026.05.27 |