20 분 소요

1. 20챕터는 무엇을 하려는 장인가요?

20챕터는 FASTQ read를 참조 유전체에 붙이는 실습을 다룹니다. 이 과정을 시퀀스 정렬(sequence alignment) 또는 매핑(mapping)이라고 부릅니다.

FASTQ read는 짧은 조각입니다. 이 조각만 보고는 원래 유전체의 어디에서 왔는지 알 수 없습니다. 그래서 인간 참조 유전체 같은 기준 지도와 비교합니다. read가 참조 유전체의 어느 위치와 가장 비슷한지 찾는 것이 정렬입니다.

시퀀스 정렬의 큰 그림

비유하면, 정렬은 찢어진 책 조각을 원래 책의 어느 페이지, 어느 줄에 붙일지 찾는 과정입니다. 책 전체가 참조 유전체이고, 찢어진 조각이 read입니다. 조각에 적힌 문장이 책의 여러 곳에 비슷하게 나올 수 있으므로, 가장 그럴듯한 위치를 찾아야 합니다.

20장에서 사용하는 대표 도구는 BWA-MEM2입니다. BWA-MEM2는 짧은 read를 참조 유전체에 빠르게 정렬하는 도구입니다. 정렬 알고리즘의 이론적 원리, 예를 들어 BWT나 FM Index는 3장 선수지식에서 다루었습니다. 여기서는 실습을 이해하는 데 필요한 감각만 다시 연결하겠습니다.


2. 참조 유전체는 “정렬할 기준 지도”입니다

정렬에는 기준이 필요합니다. 인간 데이터를 분석한다면 보통 인간 참조 유전체를 사용합니다. 원문에서는 GRCh38 또는 hg38 같은 이름이 나옵니다.

GRCh38과 hg38은 엄밀히 말하면 관리 기관과 배포 방식에 차이가 있지만, 초보 단계에서는 둘 다 “현재 널리 쓰이는 인간 참조 유전체 버전”이라고 이해해도 됩니다. 분석에서는 어떤 참조 유전체 버전을 썼는지가 매우 중요합니다. 좌표가 버전에 따라 달라질 수 있기 때문입니다.

예를 들어 어떤 변이가 chr1:1000000에 있다고 해도, 참조 유전체 버전이 달라지면 같은 생물학적 위치가 다른 좌표로 표시될 수 있습니다. 그래서 논문이나 분석 보고서에는 GRCh37인지 GRCh38인지 명확히 적어야 합니다.

참조 유전체 파일은 보통 FASTA 형식입니다. FASTQ와 이름이 비슷하지만 다릅니다. FASTA는 서열만 담는 형식이고, FASTQ는 서열과 품질 점수를 함께 담는 형식입니다.

FASTA는 대략 다음처럼 생겼습니다.

>chr1
ACGTACGTACGTACGT...
>chr2
TTGCAAGTCCGT...

>로 시작하는 줄은 서열 이름입니다. 그 아래에는 실제 염기서열이 이어집니다. 참조 유전체 FASTA는 매우 큽니다. 인간 유전체는 수십억 염기 규모이기 때문에 파일 크기도 큽니다.


3. 인덱스는 왜 만들어야 하나요?

BWA-MEM2로 정렬하기 전에 다음 명령어가 나옵니다.

bwa-mem2 index hg38.fa

이 명령어는 참조 유전체의 인덱스를 만듭니다. 인덱스는 빠른 검색을 위한 목차입니다.

참조 유전체 인덱스의 감각

책에서 어떤 단어를 찾는다고 생각해 보겠습니다. 목차나 색인이 없으면 첫 페이지부터 끝까지 하나씩 읽어야 합니다. 하지만 색인이 있으면 해당 단어가 나오는 위치를 빠르게 찾을 수 있습니다. 참조 유전체 인덱스도 비슷합니다.

인간 유전체는 너무 큽니다. read 하나하나를 참조 유전체 전체와 처음부터 끝까지 비교하면 시간이 엄청나게 오래 걸립니다. 그래서 BWA-MEM2는 미리 참조 유전체를 검색하기 좋은 구조로 바꿔둡니다. 이것이 인덱스입니다.

인덱스 파일은 한 번 만들면 같은 참조 유전체에 대해 재사용할 수 있습니다. 그래서 실습에서는 먼저 bwa-mem2 index hg38.fa를 실행하고, 이후 여러 샘플을 같은 참조 유전체에 정렬할 수 있습니다.

인덱스를 만들면 hg38.fa.amb, hg38.fa.ann, hg38.fa.pac, hg38.fa.bwt... 같은 파일들이 생길 수 있습니다. 초보자는 각각의 내부 구조를 모두 외울 필요는 없습니다. “BWA-MEM2가 빠르게 정렬하기 위해 만든 부속 파일들”이라고 이해하면 됩니다.

중요한 것은 이 파일들을 참조 유전체 파일과 같은 위치에 잘 보관해야 한다는 점입니다. 나중에 정렬할 때 BWA-MEM2가 이 인덱스 파일들을 사용합니다.


4. BWA-MEM2 정렬 명령어를 해석해 봅시다

가장 기본적인 paired-end 정렬 명령어는 다음과 비슷합니다.

bwa-mem2 mem hg38.fa R1.fastq.gz R2.fastq.gz > aligned.sam

이 명령어를 조각내면 다음과 같습니다.

bwa-mem2는 프로그램 이름입니다. mem은 BWA-MEM 방식으로 정렬하겠다는 하위 명령입니다. hg38.fa는 참조 유전체입니다. R1.fastq.gzR2.fastq.gz는 입력 FASTQ 파일입니다. >는 출력 리다이렉션입니다. 프로그램이 화면에 내보내는 결과를 aligned.sam 파일로 저장하겠다는 뜻입니다.

즉 전체 의미는 다음과 같습니다.

“R1과 R2 FASTQ read를 hg38 참조 유전체에 정렬하고, 그 결과를 aligned.sam 파일로 저장하겠습니다.”

여기서 출력 파일이 SAM입니다. SAM은 read가 참조 유전체의 어디에 어떻게 붙었는지를 텍스트로 기록한 파일입니다. 21장에서 이 SAM/BAM 파일을 자세히 다룹니다.


5. Read Group은 왜 넣나요?

실전 정렬 명령어에는 -R 옵션이 붙는 경우가 많습니다.

bwa-mem2 mem \
  -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
  hg38.fa R1.fastq.gz R2.fastq.gz > aligned.sam

여기서 @RG는 Read Group 정보를 뜻합니다. Read Group은 이 read들이 어떤 샘플, 어떤 라이브러리, 어떤 플랫폼에서 왔는지 알려주는 메타데이터입니다.

Read Group이 담는 정보

처음에는 “정렬만 하면 되지 왜 이런 정보를 붙이나요?”라고 느낄 수 있습니다. 하지만 downstream 분석, 특히 변이 찾기나 여러 샘플 비교에서는 샘플 정보를 정확히 유지하는 것이 매우 중요합니다.

예를 들어 두 환자 샘플을 분석한다고 해보겠습니다. read들이 어느 환자에서 왔는지 구분하지 못하면 분석 결과가 뒤섞입니다. 또 같은 샘플이라도 서로 다른 시퀀싱 런이나 라이브러리에서 온 read를 구분해야 하는 경우가 있습니다. Read Group은 이런 정보를 파일 안에 기록해두는 장치입니다.

자주 보는 필드는 다음과 같습니다.

필드 의미
ID Read Group 식별자입니다.
SM 샘플 이름입니다.
PL 시퀀싱 플랫폼입니다. 예: ILLUMINA
LB 라이브러리 식별자입니다.
PU 플로우셀, 바코드, 레인 등 플랫폼 유닛 정보입니다.

초보 단계에서는 최소한 SM이 샘플 이름이라는 점을 기억하면 좋습니다. 샘플명이 잘못 들어가면 나중에 결과 해석이 꼬일 수 있습니다.


6. 스레드는 “일꾼 수”에 가깝습니다

정렬 명령어에는 -t 8 같은 옵션도 자주 나옵니다.

bwa-mem2 mem -t 8 hg38.fa R1.fastq.gz R2.fastq.gz > aligned.sam

여기서 -t 8은 스레드 8개를 사용하겠다는 뜻입니다. 아주 쉽게 말하면 일꾼 8명에게 일을 나누어 맡기는 것입니다. CPU 코어가 충분하다면 스레드를 늘려 정렬 속도를 높일 수 있습니다.

하지만 무조건 크게 잡는다고 좋은 것은 아닙니다. 컴퓨터가 가진 CPU 자원보다 너무 크게 잡으면 오히려 느려지거나 다른 작업이 멈출 수 있습니다. 서버나 공용 컴퓨터에서는 다른 사람의 작업에도 영향을 줄 수 있으므로 정해진 규칙을 따라야 합니다.

개인 노트북에서 실습할 때는 작은 데이터로 시작하는 것이 좋습니다. 인간 전체 유전체와 큰 FASTQ를 바로 돌리면 시간이 오래 걸리고 저장공간도 많이 필요합니다. 실습에서는 일부 염색체나 작은 샘플을 사용하는 경우가 많습니다.


7. 파이프라인은 중간 파일을 줄이기 위한 연결입니다

원문에는 다음과 같은 형태의 명령어가 나옵니다.

bwa-mem2 mem -t 8 -R '@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA' \
  hg38.fa R1.fastq.gz R2.fastq.gz | samtools sort -o aligned.sorted.bam

이 명령어는 처음 보면 길고 복잡합니다. 하지만 핵심은 파이프 |입니다. BWA-MEM2가 만든 SAM 출력을 파일로 저장하지 않고, 바로 samtools sort에 넘깁니다.

정렬 결과를 바로 BAM으로 정리하는 흐름

왜 이렇게 할까요? SAM 파일은 텍스트라서 사람이 읽기 쉽지만 용량이 큽니다. 대규모 NGS 데이터에서는 SAM 파일이 매우 커질 수 있습니다. 그래서 실전에서는 SAM을 중간 파일로 오래 보관하지 않고, 바로 정렬된 BAM 파일로 만드는 경우가 많습니다.

이 명령어의 흐름은 다음과 같습니다.

  1. BWA-MEM2가 FASTQ read를 참조 유전체에 정렬합니다.
  2. 정렬 결과가 SAM 형태로 출력됩니다.
  3. 그 출력을 파이프로 samtools sort에 전달합니다.
  4. samtools sort가 좌표 기준으로 정렬하면서 BAM으로 저장합니다.
  5. 최종 결과는 aligned.sorted.bam입니다.

초보자는 처음부터 이 긴 명령어를 완벽히 외우려 하지 않아도 됩니다. 중요한 것은 “BWA가 정렬하고, samtools가 그 결과를 정리한다”는 역할 분담입니다.


8. 정렬 통계는 무엇을 확인하나요?

정렬이 끝나면 samtools flagstat으로 기본 통계를 확인합니다.

samtools flagstat aligned.sorted.bam

이 명령어는 BAM 파일 안의 read들이 얼마나 잘 정렬되었는지 요약해줍니다.

정렬 통계에서 보는 것

mapped는 read 중 얼마나 많은 비율이 참조 유전체에 정렬되었는지를 나타냅니다. mapping rate가 너무 낮으면 샘플이 다른 생물종일 수도 있고, 오염이 있을 수도 있고, 참조 유전체가 맞지 않을 수도 있고, FASTQ 품질이 나쁠 수도 있습니다.

properly paired는 paired-end read의 두 짝이 예상되는 방향과 거리로 잘 붙었는지를 나타냅니다. 이 비율이 낮으면 라이브러리 문제, insert size 문제, 데이터 쌍 문제, 구조적 변이, 오염 등을 의심할 수 있습니다.

duplicates는 중복 read를 의미합니다. 중복이 많으면 PCR 증폭 중복이 많거나 라이브러리 다양성이 낮을 수 있습니다. 다만 실험 종류에 따라 중복률 해석은 달라질 수 있습니다.

MAPQ는 mapping quality입니다. 각 read의 정렬 위치를 얼마나 믿을 수 있는지를 나타냅니다. 반복 서열처럼 여러 위치에 비슷하게 붙을 수 있는 read는 MAPQ가 낮을 수 있습니다.

정렬 통계는 한 번 보고 끝내는 숫자가 아닙니다. 실험 종류, 생물종, 샘플 상태, read 길이, 참조 유전체, 전처리 방식과 함께 해석해야 합니다.

flagstat 숫자는 비율로 바꿔 읽어야 합니다

samtools flagstat 결과는 단순히 숫자만 보는 것이 아니라 전체 중 몇 퍼센트인지 계산해서 해석해야 합니다.

예를 들어 다음과 같은 결과가 있다고 해보겠습니다.

1000 + 0 in total
900 + 0 mapped
800 + 0 properly paired

전체 read가 1000개이고 mapped가 900개라면 mapping rate는 다음과 같습니다.

900 / 1000 × 100 = 90%

properly paired가 800개라면 properly paired 비율은 다음과 같습니다.

800 / 1000 × 100 = 80%

이 계산은 어렵지 않지만, 본편 실습에서는 자주 필요합니다. “분모는 전체 read 수, 분자는 내가 확인하려는 항목의 read 수”라고 잡으면 됩니다. 다만 paired-end 분석에서는 도구가 read 단위와 pair 단위를 다르게 보여줄 수 있으므로, 결과 문구를 그대로 확인하는 습관이 필요합니다.


9. 20장에 들어가기 전 최소 체크리스트

20장을 읽기 전에 다음 질문에 답할 수 있으면 좋습니다.

질문 이해해야 할 답
정렬이란 무엇인가요? FASTQ read가 참조 유전체의 어느 위치에서 왔는지 찾는 과정입니다.
참조 유전체는 무엇인가요? read를 붙일 기준 지도입니다.
인덱스는 왜 필요한가요? 큰 참조 유전체에서 read 위치를 빠르게 찾기 위한 목차입니다.
BWA-MEM2는 무엇을 하나요? FASTQ read를 참조 유전체에 정렬합니다.
Read Group은 왜 넣나요? 샘플과 실험 정보를 정렬 결과 파일 안에 기록하기 위해서입니다.
| samtools sort는 왜 쓰나요? 정렬 결과를 바로 정렬된 BAM 파일로 만들기 위해서입니다.

문제 풀이

시퀀스 정렬

0 / 27
Gemini AI 채점

주관식 답안은 Gemini API로 채점합니다. API 키는 이 브라우저에만 저장됩니다.

API KEY 미등록
  1. 1. [쉬움] 객관식

    시퀀스 정렬의 의미로 가장 적절한 것은 무엇인가?

    선택지
  2. 2. [쉬움] 객관식

    참조 유전체의 역할로 가장 적절한 것은 무엇인가?

    선택지
  3. 3. [쉬움] 객관식

    인덱스를 만드는 이유로 가장 적절한 것은 무엇인가?

    선택지
  4. 4. [쉬움] 객관식

    BWA-MEM2의 주된 역할로 가장 적절한 것은 무엇인가?

    선택지
  5. 5. [보통] 객관식

    Read Group을 넣는 이유로 가장 적절한 것은 무엇인가?

    선택지
  6. 6. [보통] 객관식

    스레드 옵션을 사용하는 이유로 가장 적절한 것은 무엇인가?

    선택지
  7. 7. [보통] 객관식

    정렬 통계에서 확인해야 할 내용으로 가장 적절한 것은 무엇인가?

    선택지
  8. 8. [어려움] 객관식

    파이프라인으로 bwa mem2 ... | samtools sort ...를 쓰는 이유로 가장 적절한 것은 무엇인가?

    선택지
  9. 1. [쉬움] 객관식

    다음 명령어의 역할로 가장 적절한 것은 무엇인가?

    bwa-mem2 index ref.fa
    
    선택지
  10. 2. [쉬움] 객관식

    다음 명령어에서 입력 FASTQ 파일로 가장 적절한 것은 무엇인가?

    bwa-mem2 mem ref.fa sample_R1.fastq.gz sample_R2.fastq.gz
    
    선택지
  11. 3. [쉬움] 객관식

    다음 명령어에서 참조 유전체로 쓰인 파일은 무엇인가?

    bwa-mem2 mem ref.fa R1.fq.gz R2.fq.gz
    
    선택지
  12. 4. [쉬움] 객관식

    다음 옵션의 의미로 가장 적절한 것은 무엇인가?

    bwa-mem2 mem -t 8 ref.fa R1.fq.gz R2.fq.gz
    
    선택지
  13. 5. [보통] 객관식

    다음 명령어에서 파이프 뒤 samtools sort의 역할로 가장 적절한 것은 무엇인가?

    bwa-mem2 mem ref.fa R1.fq.gz R2.fq.gz | samtools sort -o sample.sorted.bam
    
    선택지
  14. 6. [보통] 객관식

    다음 Read Group 문자열에서 샘플명에 해당하는 부분은 무엇인가?

    @RG\tID:lib1\tSM:tumor01\tPL:ILLUMINA
    
    선택지
  15. 7. [보통] 객관식

    다음 명령어의 문제점으로 가장 적절한 것은 무엇인가?

    bwa-mem2 mem ref.fa tumor_R1.fastq.gz normal_R2.fastq.gz
    
    선택지
  16. 8. [보통] 객관식

    다음 명령어의 역할로 가장 적절한 것은 무엇인가?

    samtools flagstat sample.sorted.bam
    
    선택지
  17. 9. [어려움] 객관식

    다음 파이프라인에서 -o sample.sorted.bam을 빼면 생길 수 있는 문제로 가장 적절한 것은 무엇인가?

    bwa-mem2 mem ref.fa R1.fq.gz R2.fq.gz | samtools sort
    
    선택지
  18. 10. [어려움] 객관식

    다음 정렬 흐름에서 가장 먼저 수행되어야 할 작업으로 적절한 것은 무엇인가?

    FASTQ → BWA-MEM2 정렬 → sorted BAM
    
    선택지
  19. 11. [어려움] 객관식

    다음 명령어에서 2> align.log의 역할로 가장 적절한 것은 무엇인가?

    bwa-mem2 mem ref.fa R1.fq.gz R2.fq.gz 2> align.log | samtools sort -o out.bam
    
    선택지
  20. 12. [어려움] 객관식

    정렬 후 samtools flagstat 결과에서 mapped 비율이 비정상적으로 낮을 때 우선 점검할 항목으로 가장 적절한 것은 무엇인가?

    선택지
  21. 21. [보통] 객관식

    samtools flagstat에서 전체 read가 1000개, mapped read가 900개였다. mapping rate는 얼마인가?

    선택지
  22. 22. [보통] 객관식

    전체 read가 2000개, properly paired read가 1500개였다. properly paired 비율은 얼마인가?

    선택지
  23. 23. [어려움] 객관식

    mapping rate가 비정상적으로 낮을 때 먼저 의심할 수 있는 원인으로 가장 적절한 것은 무엇인가?

    선택지
  24. 24. [어려움] 객관식

    BWA-MEM2 정렬부터 기본 통계 확인까지의 흐름으로 가장 적절한 것은 무엇인가?

    선택지
  25. 주관식 1. [쉬움] 주관식 · Gemini 채점

    참조 유전체와 인덱스의 관계를 설명하라.

  26. 주관식 2. [보통] 주관식 · Gemini 채점

    Read Group이 후속 분석에서 중요한 이유를 설명하라.

  27. 주관식 3. [어려움] 주관식 · Gemini 채점

    BWA-MEM2와 samtools sort를 파이프로 연결하는 장점과 주의점을 설명하라.