7 분 소요

이 장에서 배울 것

이번 장에서는 RNA-seq 분석 파이프라인(RNA-seq analysis pipeline)을 배웁니다. RNA-seq은 세포 안에 어떤 RNA가 얼마나 있는지 측정하는 실험입니다. 프로그래밍 관점에서 보면 RNA-seq 분석은 “실험 기계가 만든 원시 파일을 읽고, 품질을 확인하고, 유전자별 숫자 표로 바꾸고, 두 조건을 비교하는 과정”입니다.

핵심 용어를 먼저 정리하겠습니다.

  • RNA-seq: RNA의 양을 대량으로 측정하는 시퀀싱 실험입니다.
  • read: 시퀀싱 기계가 읽어 낸 짧은 서열 조각입니다.
  • FASTQ: read 서열과 품질 점수를 함께 저장하는 파일 형식입니다.
  • 품질관리(QC, quality control): 데이터가 분석할 만한 상태인지 확인하는 단계입니다. 앞으로는 필요한 곳에서 QC라고도 부르겠습니다.
  • trimming: 품질이 낮은 끝부분이나 어댑터(adapter, 실험 과정에서 붙는 짧은 인공 서열)를 잘라내는 작업입니다.
  • 정렬(alignment): read가 기준 유전체나 전사체의 어느 위치와 맞는지 찾는 작업입니다.
  • 정량(quantification): 각 유전자나 전사체에 read가 얼마나 배정되는지 세는 작업입니다.
  • 카운트 행렬(count matrix): 행은 유전자, 열은 샘플, 값은 read 수인 숫자 표입니다.
  • 정규화(normalization): 샘플마다 읽힌 전체 양이 다른 문제를 보정하는 작업입니다.
  • 차등발현분석(differential expression analysis): 두 조건 사이에서 발현량이 달라진 유전자를 찾는 분석입니다.

RNA-seq 분석 파이프라인

가장 쉬운 비유: 도서관 책 조각 맞추기

RNA-seq 데이터를 도서관에서 찢어진 책 조각을 많이 받은 상황으로 생각해 봅시다. 각 조각에는 짧은 문장이 적혀 있습니다. 먼저 조각이 너무 흐리거나 찢어졌는지 확인합니다. 그다음 조각을 원래 책의 어느 페이지에 붙일 수 있는지 찾습니다. 마지막으로 “어떤 책에서 조각이 많이 나왔는지”를 세면, 사람들이 어떤 책을 많이 읽었는지 짐작할 수 있습니다.

RNA-seq도 비슷합니다. read는 RNA에서 나온 짧은 조각입니다. read를 유전자에 연결하고, 유전자별 read 수를 세면 어떤 유전자가 많이 발현되었는지 알 수 있습니다.

전체 흐름 한눈에 보기

RNA-seq 파이프라인은 보통 다음 흐름으로 진행됩니다.

FASTQ 파일
→ 품질관리(QC)
→ 필요하면 trimming
→ 정렬 또는 준정렬
→ 유전자별 read 수 계산
→ count matrix 만들기
→ 정규화
→ 차등발현분석
→ 결과 해석과 그림 만들기

여기서 준정렬(pseudoalignment)은 read를 기준 서열에 정확한 위치까지 붙이는 대신, 어떤 전사체에서 왔는지를 빠르게 추정하는 방식입니다. 입문 단계에서는 “정렬보다 빠른 정량 방식도 있다” 정도로 이해하면 충분합니다.

1단계: FASTQ 파일 확인

FASTQ 파일은 대략 다음처럼 생겼습니다.

@read001
ACGUACGUACGU
+
IIIIIIIIIIII

첫 줄은 read 이름, 둘째 줄은 서열, 셋째 줄은 구분자, 넷째 줄은 품질 점수입니다. 실제 파일은 DNA 알파벳 A, T, G, C로 저장되는 경우가 많습니다. RNA에서 온 정보라도 실험과 파일 처리 과정에서는 DNA 문자처럼 다루는 일이 흔합니다.

2단계: 품질관리

품질관리는 데이터를 분석하기 전에 “이 파일이 괜찮은가?”를 보는 단계입니다. 예를 들어 read 끝부분의 품질이 낮거나, 어댑터 서열이 너무 많이 섞여 있으면 이후 분석 결과가 흔들릴 수 있습니다.

터미널에서는 보통 이런 식으로 도구를 실행합니다.

fastqc sample1.fastq.gz

이 명령은 sample1.fastq.gz 파일의 품질 보고서를 만듭니다. 여기서 중요한 것은 명령어를 외우는 것이 아니라, “원시 데이터를 바로 믿지 말고 먼저 검사한다”는 태도입니다.

3단계: trimming

품질이 낮은 끝부분이나 어댑터가 있으면 잘라낼 수 있습니다. trimming은 데이터를 예쁘게 꾸미는 작업이 아니라, 잘못된 서열 조각이 정렬이나 정량을 방해하지 않도록 줄이는 작업입니다.

다만 무조건 많이 자르는 것이 좋은 것은 아닙니다. 너무 많이 자르면 read가 너무 짧아져서 어디서 온 조각인지 알기 어려워집니다. 따라서 trimming은 품질 보고서를 보고 필요한 만큼만 해야 합니다.

4단계: 정렬 또는 정량

read를 기준 유전체(reference genome)나 기준 전사체(reference transcriptome)에 연결해야 합니다. 정렬 도구로는 STAR, HISAT2 같은 도구가 자주 등장합니다.

아주 단순화한 명령어 모양은 다음과 같습니다.

hisat2 -x genome_index -U sample1.fastq.gz -S sample1.sam

뜻은 “sample1.fastq.gz의 read를 genome_index라는 기준에 맞추고, 결과를 sample1.sam에 저장하라”입니다. 실제 연구에서는 paired-end read, 스레드 수, annotation 파일 등 더 많은 옵션을 씁니다.

정렬을 거치지 않고 빠르게 정량하는 도구도 있습니다. Salmon, kallisto 같은 도구가 대표적입니다. 이런 도구는 전사체별 양을 빠르게 추정할 때 많이 쓰입니다.

5단계: count matrix 만들기

분석의 핵심 결과 중 하나는 유전자별 read 수 표입니다.

gene     sample1  sample2  sample3
BRCA1    120      140      30
TP53     80       75       200
EGFR     10       12       90

이 표를 카운트 행렬이라고 부릅니다. 이제부터는 생물학 문제가 숫자 표 문제로 바뀝니다. 어떤 유전자가 어느 조건에서 많이 나왔는지, 차이가 우연인지 아닌지 계산할 수 있습니다.

6단계: 정규화

샘플마다 전체 read 수가 다르면 단순 count만 비교하면 위험합니다. 예를 들어 sample1은 전체 1,000만 read가 읽혔고 sample2는 전체 2,000만 read가 읽혔다면, sample2의 count가 전체적으로 커 보일 수 있습니다. 이 차이는 생물학적 차이가 아니라 실험에서 읽힌 양의 차이일 수 있습니다.

정규화는 이런 차이를 보정하는 작업입니다. 입문 단계에서는 다음 정도만 기억하면 됩니다.

정규화 전: read 수 자체
정규화 후: 샘플 간 비교가 조금 더 공정해진 값

7단계: 차등발현분석

차등발현분석은 두 조건 사이에서 발현량이 달라진 유전자를 찾는 작업입니다. 예를 들어 정상 세포와 암세포를 비교해 어떤 유전자가 더 많이 발현되는지 볼 수 있습니다.

R에서는 DESeq2 같은 패키지가 자주 쓰입니다.

library(DESeq2)
# count matrix와 샘플 정보를 넣어 조건별 차이를 분석합니다.

여기서 중요한 것은 “p-value가 작다”만 보는 것이 아닙니다. 여러 유전자를 동시에 검사하므로 다중검정 보정이 필요하고, 발현 차이가 통계적으로 유의한지뿐 아니라 생물학적으로도 의미 있는지 봐야 합니다.

작은 코드 감각: count matrix 읽기

파이썬에서는 결과 표를 이렇게 읽을 수 있습니다.

import pandas as pd

counts = pd.read_csv("counts.csv")
print(counts.head())

counts.csv가 유전자별 read 수 표라면, 판다스로 표를 읽고 이후 필터링, 평균 계산, 그림 그리기를 할 수 있습니다.

실전 보강: count 숫자를 해석하는 최소 감각

RNA-seq에서 가장 위험한 초보자 실수는 raw count를 그대로 비교하는 것입니다. 예를 들어 다음 표를 봅시다.

gene    control_total_reads  treatment_total_reads  control_count  treatment_count
GeneA   1,000,000            2,000,000              100            160

처리군의 GeneA count가 160이고 대조군은 100이므로 처리군에서 더 높아 보입니다. 하지만 처리군은 전체 read 수도 2배입니다. 단순 count만 보면 전체적으로 더 많이 읽힌 샘플을 “발현이 높다”고 착각할 수 있습니다. 그래서 정규화가 필요합니다.

아주 거칠게 백만 read당 count를 계산하면 다음과 같습니다.

control:   100 / 1,000,000 × 1,000,000 = 100
treatment: 160 / 2,000,000 × 1,000,000 = 80

raw count는 처리군이 높지만, 전체 read 수를 고려하면 오히려 처리군의 상대적 발현은 낮아집니다. 실제 분석에서는 DESeq2 같은 도구가 더 정교한 방식으로 library size와 분산을 보정합니다. 입문 단계에서는 “샘플마다 읽힌 총량이 다르면 raw count 직접 비교는 위험하다”는 감각을 잡으면 됩니다.

실전 보강: log2 fold change와 FDR

차등발현 결과에서 자주 보는 값은 log2FoldChangepadj입니다.

  • log2FoldChange = 1: 처리군 발현이 대조군보다 약 2배 높다는 뜻입니다.
  • log2FoldChange = -1: 처리군 발현이 대조군보다 약 1/2배 낮다는 뜻입니다.
  • padj: 여러 유전자를 동시에 검사할 때 생기는 우연한 발견을 보정한 p-value입니다. 흔히 FDR 조정값이라고 생각하면 됩니다.

유전자 20,000개를 동시에 검사하면 우연히 p-value가 작게 나오는 유전자가 생길 수 있습니다. 그래서 RNA-seq에서는 p-value만 보고 결론내리지 않고, padj와 fold change를 함께 봅니다.

초보자가 자주 하는 오해

  • 오해 1: count가 크면 무조건 생물학적으로 중요하다. count가 큰 유전자는 원래 많이 발현되는 housekeeping gene일 수 있습니다. 조건 간 차이를 봐야 합니다.
  • 오해 2: p-value가 작으면 원인 유전자다. 통계적으로 차이가 있다는 뜻이지, 질병의 원인이라는 뜻은 아닙니다.
  • 오해 3: biological replicate 없이 차등발현을 믿을 수 있다. 반복 샘플이 없으면 조건 차이와 샘플 우연 차이를 구분하기 어렵습니다.
  • 오해 4: QC는 형식적인 단계다. QC에서 어댑터 오염이나 품질 저하를 놓치면 뒤의 통계가 깔끔해 보여도 결론이 흔들립니다.

이전 개념과 다음 개념의 연결

RNA-seq 파이프라인은 이 부록의 뒤쪽 항목들과 계속 연결됩니다. count matrix는 E17의 SQL/데이터베이스 사고와 이어지고, 많은 샘플을 반복 처리할 때는 E21 워크플로우가 필요합니다. 데이터가 커지면 E22 HPC가 필요하고, 결과를 다시 만들 수 있게 하려면 E20 환경관리와 E24 재현성이 필요합니다.

생물정보학에서 왜 중요한가

RNA-seq은 생물정보학에서 가장 널리 쓰이는 분석 중 하나입니다. 유전자 발현, 질병 상태, 약물 반응, 세포 유형, 조직 차이를 연구할 때 계속 등장합니다. RNA-seq 파이프라인을 이해한다는 것은 “실험 데이터가 어떻게 숫자 표로 바뀌는지”를 이해한다는 뜻입니다.

어려운 개념 보강: count matrix, metadata, 정규화를 한 줄로 연결하기

RNA-seq에서 가장 중요한 표는 count matrix와 metadata table입니다. count matrix는 “각 유전자가 각 샘플에서 몇 번 읽혔는가”를 담고, metadata는 “각 샘플이 어떤 조건인가”를 담습니다. 둘은 sample_id로 정확히 연결되어야 합니다.

count matrix
            S1   S2   S3
GeneA      100  120  500
GeneB       20   30   25

metadata
sample_id   condition
S1          normal
S2          normal
S3          cancer

여기서 S3의 GeneA count가 높다는 사실만으로는 부족합니다. S3가 cancer 샘플이라는 metadata가 연결되어야 “암 조건에서 GeneA가 높아 보인다”는 해석이 가능합니다.

정규화가 필요한 이유는 샘플마다 전체 read 수가 다를 수 있기 때문입니다. 예를 들어 두 샘플의 GeneA count가 같아도 전체 read 수가 다르면 의미가 달라질 수 있습니다.

S1: GeneA = 100, 전체 read = 10,000
S2: GeneA = 100, 전체 read = 100,000

S1에서는 GeneA가 전체의 1%이고, S2에서는 0.1%입니다. raw count만 보면 둘 다 100이지만, 샘플 전체 규모를 고려하면 다르게 해석됩니다. 이것이 정규화의 직관입니다.

아주 단순한 비율 계산은 다음과 같습니다.

비율 = 특정 유전자 count / 샘플 전체 count

실제 차등발현분석 도구는 더 정교한 size factor나 분포 모델을 사용합니다. 하지만 입문 단계에서는 “샘플마다 읽힌 총량이 달라서 raw count를 그대로 비교하면 위험하다”는 점을 잡으면 됩니다.

주의할 점도 있습니다. DESeq2 같은 도구는 보통 raw count를 입력으로 받고 내부에서 정규화를 수행합니다. 그래서 사용자가 임의로 정규화한 값을 다시 넣으면 분석 가정이 깨질 수 있습니다. 즉, 정규화가 필요하다는 말과 “아무 정규화 값을 아무 도구에 넣어도 된다”는 말은 다릅니다.

미니 실습 블록: RNA-seq 분석 순서와 입력·출력 연결하기

이 실습은 RNA-seq 분석 순서와 입력·출력 연결하기를 직접 손으로 확인하는 연습입니다. 왜 필요한가 하면, RNA-seq은 여러 도구가 이어지는 파이프라인이므로 각 단계의 입력과 출력이 맞아야 다음 단계가 정상 동작하기 때문입니다.

1. FASTQ 확인
2. 품질관리(QC)
3. trimming
4. reference/genome 또는 transcriptome 정렬
5. gene별 count 생성
6. count matrix와 metadata 연결
7. 정규화와 차등발현 분석
8. 그림과 보고서 작성

각 코드 요소의 의미를 풀어보면 다음과 같습니다. FASTQ는 원본 read이고, 정렬 후에는 BAM 또는 transcript quantification 결과가 만들어집니다. gene별 count가 모이면 count matrix가 되고, metadata의 condition 정보와 연결해 차등발현을 수행합니다.

생물정보학/계산생물학에서 쓰이는 장면은 분명합니다. 처리군-대조군 bulk RNA-seq에서 DEG를 찾는 기본 흐름입니다.

흔한 오해 또는 주의점도 있습니다. biological replicate 없이 차등발현을 과신하면 조건 차이와 샘플 우연 차이를 구분하기 어렵습니다.

핵심 정리

RNA-seq 분석은 FASTQ 파일에서 시작해 품질관리, trimming, 정렬 또는 정량, count matrix 생성, 정규화, 차등발현분석으로 이어집니다. 핵심은 read를 유전자나 전사체에 연결하고, 그 수를 세어 조건 간 차이를 해석하는 것입니다.

문제 풀이

RNA-seq 분석 파이프라인

0 / 34
Gemini AI 채점

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

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

    RNA-seq에서 raw count를 그대로 조건 간 비교하면 위험한 가장 직접적인 이유는?

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

    대조군 총 read 1,000,000개에서 GeneA count가 100, 처리군 총 read 2,000,000개에서 GeneA count가 160이다. 백만 read당 단순 count로 비교하면 옳은 해석은?

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

    log2FoldChange = 1의 가장 적절한 해석은?

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

    log2FoldChange = -2라면 발현 변화는 대략 어떻게 해석하는가?

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

    RNA-seq 차등발현분석에서 padj 또는 FDR 조정값을 보는 이유로 적절한 것은?

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

    다음 중 biological replicate의 의미로 가장 적절한 것은?

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

    FASTQ QC 결과에서 read 끝부분 품질이 전반적으로 낮고 어댑터 오염이 많다면 다음 단계로 가장 적절한 것은?

    선택지
  8. 8. [객관식] 객관식

    다음 count matrix에서 BRCA1sample2 count는?

    선택지
  9. 9. [객관식] 객관식

    정규화의 핵심 목적에 가장 가까운 것은?

    선택지
  10. 10. [객관식] 객관식

    차등발현 결과에서 padj=0.001, log2FoldChange=0.02인 유전자를 해석할 때 주의할 점은?

    선택지
  11. 11. [객관식] 객관식

    pandas로 count matrix를 읽은 뒤 유전자별 평균 count를 구하는 코드로 가장 적절한 것은?

    선택지
  12. 12. [객관식] 객관식

    RNA-seq에서 “발현량이 높다”와 “조건 간 차이가 크다”를 구분해야 하는 이유는?

    선택지
  13. 13. [객관식] 객관식

    다음 중 RNA-seq 결과 해석에서 가장 타당한 태도는?

    선택지
  14. 14. [객관식] 객관식

    샘플 4개에서 각 샘플 FASTQ가 2개씩 paired-end로 있다. 총 FASTQ 파일 수는?

    선택지
  15. 15. [객관식] 객관식

    어떤 유전자의 normalized count가 대조군 평균 50, 처리군 평균 200이다. 단순 fold change는?

    선택지
  16. 16. [객관식] 객관식

    위 fold change 4배를 log2 fold change로 바꾸면?

    선택지
  17. 17. [객관식] 객관식

    RNA-seq에서 batch effect가 문제인 이유는?

    선택지
  18. 18. [객관식] 객관식

    다음 중 차등발현분석 전에 반드시 점검해야 할 내용으로 가장 적절한 것은?

    선택지
  19. 19. [객관식] 객관식

    RNA-seq 파이프라인을 워크플로우로 관리하면 특히 좋은 상황은?

    선택지
  20. 20. [객관식] 객관식

    다음 중 RNA-seq 분석 결과를 재현하기 위해 함께 남겨야 할 정보로 가장 적절한 것은?

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

    raw count 20과 40을 보고 “두 번째 샘플이 2배 발현”이라고 단정할 수 없는 이유는?

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

    DESeq2 같은 도구가 단순 평균 비교보다 필요한 이유로 가장 적절한 것은?

    선택지
  23. 23. [객관식] 객관식

    다음 중 RNA-seq 초보자가 피해야 할 결론은?

    선택지
  24. 24. [객관식] 객관식

    다음 코드의 의미로 가장 적절한 것은?

    선택지
  25. 25. [실전] 객관식

    RNA-seq에서 count matrix와 metadata를 연결하는 핵심 열은 보통 무엇인가?

    선택지
  26. 26. [실전] 객관식

    RNA-seq 분석 순서로 가장 자연스러운 것은?

    선택지
  27. 주관식 27. [응용] 주관식 · Gemini 채점

    RNA-seq count matrix를 읽고 TP53의 샘플별 count를 출력하는 짧은 Python 코드를 작성하라.

  28. 주관식 28. [응용] 주관식 · Gemini 채점

    대조군 총 read 1,000,000/count 100, 처리군 총 read 2,000,000/count 160인 유전자를 백만 read당 단순 count로 계산하고 해석하라.

  29. 주관식 29. [응용] 주관식 · Gemini 채점

    RNA-seq 결과에서 p-value, padj, log2 fold change를 함께 봐야 하는 이유를 설명하라.

  30. 주관식 30. [응용] 주관식 · Gemini 채점

    FASTQ → QC → trimming → 정렬/정량 → count matrix → 정규화 → 차등발현분석 흐름에서 QC가 실패했을 때 왜 뒤 단계를 그대로 믿기 어려운지 설명하라.

  31. 주관식 31. [응용] 주관식 · Gemini 채점

    condition metadata와 count matrix 열 이름이 어긋났을 때 어떤 문제가 생기는지 예를 들어 설명하라.

  32. 주관식 32. [응용] 주관식 · Gemini 채점

    RNA-seq 파이프라인을 재현 가능하게 남기기 위한 최소 체크리스트를 작성하라.

  33. 주관식 33. [실습] 주관식 · Gemini 채점

    RNA-seq 분석의 주요 단계를 순서대로 6개 이상 쓰라.

  34. 주관식 34. [실습] 주관식 · Gemini 채점

    count matrix의 샘플 열과 metadata의 sample_id가 어긋나면 어떤 문제가 생기는지 설명하라.