FASTQ에는 수백만 개의 read가 들어있지만, 이 자체로는 각 read가 유전체 어디서 왔는지 알 수 없습니다.
이 위치를 찾는 과정이 매핑(mapping/alignment)이고, 그 결과를 담는 표준 포맷이 SAM/BAM입니다.
레퍼런스 기반 정렬
전체 흐름은 이렇습니다.
FASTQ (위치 미상 read) + Reference(GRCh38) → BWA-MEM → SAM/BAM (정렬 위치 포함)
수백만 개의 read 각각을 레퍼런스 유전체 전체와 비교해서 가장 잘 맞는 위치를 찾아주는 작업입니다.
브루트포스로 비교하면 시간이 너무 오래 걸리기 때문에, 실무에서는 레퍼런스를 미리 인덱싱해두고 빠르게 검색하는 알고리즘을 씁니다.
BWA-MEM
BWA(Burrows-Wheeler Aligner)는 short-read 매핑의 사실상 표준 도구입니다(Heng Li & Durbin, 2009).
레퍼런스를 BWT(Burrows-Wheeler Transform)로 압축·인덱싱해서, 적은 메모리로도 수억 개의 read를 빠르게 검색할 수 있게 만든 게 핵심입니다.
동작 방식은 "Seed and Extend"라고 부릅니다.
- Seed: read 안에서 레퍼런스와 정확히 일치하는 조각(MEM, Maximal Exact Match)을 FM-index로 초고속 탐색
- Chaining: 가까이 있는 seed들을 묶어서 후보 위치를 선정
- Extend: 후보 위치 주변을 Smith-Waterman 알고리즘으로 정밀하게 정렬 (mismatch, indel 허용)
- MAPQ: 이 위치가 얼마나 유일하고 확실한지 점수화. 반복 영역이면 여러 후보 위치가 비슷하게 나와서 MAPQ가 낮게 매겨진다
옵션 중 -M은 짧게 갈라진 정렬(split hit)을 secondary로 표시해서 Picard/GATK와 호환되게 만들어줍니다.
SAM/BAM 구조
SAM은 텍스트 포맷이고 BAM은 이를 바이너리로 압축한 것입니다.
용량이 작고 처리 속도가 빨라서 실무에서는 BAM을 표준으로 씁니다.
@HD VN:1.6 SO:coordinate
@SQ SN:chr21 LN:46709983
D00360:...:31843 163 chr21 44286640 60 250M = 44286890 498
@로 시작하는 줄이 헤더입니다.
@SQ에는 레퍼런스 서열 이름과 길이가 들어있습니다.
그 아래부터는 read 한 줄당 11개 필드로 구성됩니다.
| 필드 | 예시 값 | 의미 |
| QNAME | D00360:...:31843 | read 이름 |
| FLAG | 163 | read 상태 (비트 조합) |
| RNAME | chr21 | 매핑된 레퍼런스 서열명 |
| POS | 44286640 | 1-based 매핑 시작 좌표 |
| MAPQ | 60 | 매핑 신뢰도, BWA 최대치는 60 |
| CIGAR | 250M | 정렬 관계 문자열 |
| RNEXT/PNEXT | =, 44286890 | 짝 read의 위치 |
| TLEN | 498 | template 길이 |
FLAG
read의 여러 상태를 비트로 켜고, 그 합을 하나의 10진수(0~4095)로 표기한 필드입니다.
| 비트(hex) | 의미 | 비트(hex) | 의미 |
| 1 (0x1) | paired — 짝 있음 | 64 (0x40) | first in pair (R1) |
| 2 (0x2) | proper pair — 정상 짝 | 128 (0x80) | last in pair (R2) |
| 4 (0x4) | read unmapped | 256 (0x100) | secondary alignment |
| 8 (0x8) | mate unmapped | 512 (0x200) | QC fail |
| 16 (0x10) | read 역방향(reverse) | 1024 (0x400) | PCR/optical duplicate |
| 32 (0x20) | mate 역방향(reverse) | 2048 (0x800) | supplementary |
FLAG 읽는 법
숫자를 2진수로 풀어보면 read 상태가 그대로 드러납니다.
정상적으로 짝지어진 paired-end read는 흔히 99와 147 조합으로 나타납니다.
99 = 1 + 2 + 32 + 64 → paired, proper pair, mate reverse, R1
147 = 1 + 2 + 16 + 128 → paired, proper pair, read reverse, R2
매번 비트를 손으로 분해할 필요는 없고 samtools flags 99 명령으로 바로 해석할 수 있습니다.
실무에서 자주 쓰는 건 4번 비트(unmapped) 필터링 정도입니다.
정렬 실패한 read를 걸러낼 때 이 값을 확인합니다.
CIGAR
read와 레퍼런스의 정렬 관계를 연산자 문자열로 압축 표현한 필드다.
| 연산자 | 의미 |
| M | alignment match — 일치/불일치 모두 포함 (정렬은 됨) |
| I | Insertion — read에만 있는 삽입 서열 |
| D | Deletion — 레퍼런스 대비 결실 |
| N | skip — 레퍼런스 구간 건너뜀 (RNA-seq splice) |
| S | Soft clip — 정렬 안 된 양끝, 서열은 유지됨 |
| H | Hard clip — 잘려나가서 서열이 아예 없음 |
예를 들어 199M1D6M1I43M이라는 CIGAR는 다음과 같이 읽습니다.
199M → 199개 염기 정렬 (일치/불일치 포함)
1D → 1개 결실 (레퍼런스 대비)
6M → 6개 정렬
1I → 1개 삽입 (read에만 있음)
43M → 43개 정렬
CIGAR 연산자만 봐도 어떤 변이 신호가 있는지 대략 짐작할 수 있습니다.
M 안에서 서열이 다르면 SNV(점 돌연변이), I/D가 있으면 indel, S/H/N이 있으면 구조변이나 splice 신호일 가능성을 의심해볼 수 있습니다.
Clipping
read가 레퍼런스에 부분적으로만 맞을 때, 안 맞는 끝을 잘라내고 표시하는 게 clipping입니다.
read 전체를 버리지 않고 맞는 부분만이라도 살리기 위한 처리입니다.
CIGAR: 35S215M
read ╌╌╌35╌╌╌[====215 정렬====]
ref [================]
clip이 생기는 원인은 보통 어댑터가 덜 제거됐거나, read 말단 품질이 낮거나, 구조변이/splice 경계에 걸렸을 때입니다.
- Soft clip(S): 잘린 부분의 서열을 그대로 보존합니다.
나중에 재정렬하거나 구조변이 breakpoint 분석에 재활용할 수 있어서, 대표(primary) 정렬에서 주로 쓰입니다. - Hard clip(H): 잘린 부분의 서열을 아예 제거합니다. 하나의 read가 여러 곳에 나뉘어 붙는 supplementary 정렬에서, 조각마다 전체 서열을 중복 저장하지 않으려고 이 방식을 씁니다.
samtools
BAM 파일을 다루는 핵심 도구 모음입니다.
| 명령 | 기능 |
| view | SAM↔BAM 변환, FLAG/영역/MAPQ 조건으로 read 필터링 |
| sort | 좌표순 정렬 — 인덱싱과 변이 검출의 전제조건 |
| index | .bai 인덱스 생성 — 특정 영역 즉시 접근(IGV 등에서 필요) |
| flagstat | 총 read 수, 매핑률, 중복률, proper pair 비율 요약 |
| depth / coverage | 위치별·영역별 depth 계산 |
| markdup | PCR 중복 표시 (변이 호출 전처리에서 사용) |
실무 순서로 보면 bwa mem 결과를 파이프로 바로 samtools sort에 넘겨서 정렬된 BAM을 만들고, samtools index로 .bai를 생성한 뒤, samtools flagstat으로 매핑이 잘 됐는지 확인하는 흐름이 일반적입니다.
이렇게 만든 sorted BAM(+.bai)이 이후 변이 호출 단계의 입력이 됩니다.
'Bio Data Analysis > 서열분석개론' 카테고리의 다른 글
| [서열분석개론] 서열 분석 - 주석 및 임상 해석 (0) | 2026.07.12 |
|---|---|
| [서열분석개론] 서열 분석 - 변이 호출 파이프라인 (0) | 2026.07.12 |
| [서열분석개론] 서열 분석 - 변이의 종류와 표기법 (0) | 2026.07.11 |
| [서열분석개론] 서열 분석 - 파일 포맷 (FASTA, FASTQ, BED) (0) | 2026.07.11 |
| [서열분석개론] 서열 분석 - 시퀀싱 원리 (0) | 2026.07.08 |
