# 03. FASTQ 품질 확인과 트리밍

> FASTQ가 담는 정보를 확인하고, FastQC로 read 품질을 판단한 뒤 정렬을 방해하는 저품질 말단과 어댑터를 제거하는 이유를 설명한다.

FASTQ를 받았다고 바로 분석을 시작하지 않습니다. 잘못 읽힌 염기와 어댑터가 남아 있으면 다음 단계에서 read의 위치를 잘못 찾을 수 있습니다. 이 수업의 출력은 **정렬에 사용할 깨끗한 FASTQ**입니다.

> **이 수업의 질문**: 어떤 read를 그대로 쓰고, 어떤 끝부분을 제거해야 하는가?

외부 시스템에서 받은 이벤트를 바로 데이터베이스에 넣지 않고 **스키마 검사와 품질 모니터링**을 먼저 하는 것과 같습니다. FastQC는 데이터를 수정하는 함수가 아니라 관측 리포트를 만드는 함수이고, 트리밍은 그 리포트에서 확인한 문제만 고치는 변환입니다.

```python
report_before = fastqc(raw_fastq)       # 읽기 전용 검사
clean_fastq = trim(raw_fastq, report_before)
report_after = fastqc(clean_fastq)      # 변경 효과와 부작용 확인
```

이 코드는 개념을 나타낸 의사코드입니다. 핵심은 검사와 수정을 분리하고, 수정 뒤 같은 검사를 다시 실행한다는 점입니다.

## 1. 파일은 분석 단계 사이의 전달물이다

RNA-seq 파일 형식은 따로 외우기보다 **분석이 진행되며 데이터의 상태가 바뀐 기록**으로 이해하면 쉽습니다.

> **FASTQ**(시퀀서가 읽은 조각과 신뢰도) → **SAM/BAM**(각 조각이 게놈 어디에 붙었는지) → **발현량 행렬**(유전자마다 조각이 얼마나 모였는지)

레퍼런스 게놈 서열은 FASTA, 유전자 위치 정보는 GTF로 제공됩니다. 이 둘은 read가 돌아갈 위치와 유전자 경계를 알려주는 지도 역할을 합니다.

각 파일은 파이프라인 단계 사이의 **인터페이스 계약**입니다. FASTQ는 서열과 품질을, BAM은 좌표와 정렬 상태를, 발현량 행렬은 유전자별 집계값을 보존합니다. 뒤 단계로 갈수록 개별 read의 세부 정보가 요약되므로, 행렬만 가지고 원래 품질 문자열을 복원할 수는 없습니다.

> 확장자, 내부 컬럼, 예시는 [데이터 형식 레퍼런스](/reference/data-formats/)에서, 유전자 주석 구조는 [GTF 레퍼런스](/reference/gtf/)에서 찾아볼 수 있습니다.

## 2. 품질 관리: 이 read를 믿고 분석해도 될까

시퀀서가 만든 read에는 염기를 잘못 읽은 구간, 어댑터가 섞인 구간, 비정상적으로 짧은 조각이 포함될 수 있습니다. **FastQC**는 이런 신호를 요약해 다음 단계로 가도 되는지 판단하게 해주고, **MultiQC**는 여러 샘플의 결과를 한 화면에서 비교합니다.

FastQC 리포트를 처음부터 끝까지 외울 필요는 없습니다. 아래 네 질문으로 읽으면 됩니다.

| 질문 | 먼저 볼 항목 | 문제가 보이면 |
| --- | --- | --- |
| read 끝까지 믿을 만한가? | 위치별 품질 | 낮아지는 끝부분만 자른다 |
| 어댑터가 섞였는가? | Adapter Content | 해당 어댑터를 제거한다 |
| 예상하지 않은 서열이 많은가? | Overrepresented Sequences, GC 분포 | rRNA·다른 생물·어댑터 오염을 의심한다 |
| read 길이와 판독 실패는 정상인가? | 길이 분포, N 비율 | 장비·라이브러리 문제를 확인한다 |

여기서 PASS·WARN·FAIL은 테스트 스위트의 성공·실패와 다릅니다. 미리 정한 휴리스틱 임계값을 넘었는지 표시할 뿐이며, RNA-seq 데이터에서 기대되는 중복이나 염기 조성까지 경고할 수 있습니다. 따라서 상태 코드만 분기 조건으로 쓰지 않고 그래프와 샘플 제작 방식을 함께 봅니다.

### read 끝의 품질을 본다

100 bp read를 읽는 동안 뒤쪽으로 갈수록 형광 신호가 흐려질 수 있습니다. 앞 80개 염기는 Q30 근처인데 마지막 20개가 크게 떨어진다면 read 전체를 버리지 않고 낮은 끝부분만 자릅니다. Q30과 오류 확률의 관계는 [확률과 Phred 점수](/reference/probability-and-phred/)에서 확인할 수 있습니다.

그래프의 중앙값이 끝까지 높은 영역을 유지한다면 품질을 이유로 자를 필요가 없습니다. 트리밍은 관성적으로 실행하는 단계가 아니라, 관찰한 문제에 대응하는 단계입니다.

### 어댑터는 끝에서 올라온다

fragment가 read 길이보다 짧으면 장비가 fragment 끝을 지나 어댑터까지 읽습니다. Adapter Content 그래프가 read 뒤쪽에서 올라가면 어댑터 트리밍의 직접적인 근거가 됩니다.

트리밍 뒤에는 그래프가 0 근처로 내려왔는지 다시 확인합니다. 동시에 너무 많은 read가 사라지거나 지나치게 짧아지지 않았는지도 봅니다.

### 빨간 표시가 항상 실패는 아니다

FastQC의 PASS·WARN·FAIL은 조사할 위치를 알려 주는 신호이지 샘플의 최종 합격 판정이 아닙니다. RNA-seq에서는 다음 두 항목이 빨갛게 나와도 정상일 수 있습니다.

- read 앞부분의 A·T·G·C 비율이 치우침: 라이브러리 제작 과정의 프라이밍 편향으로 생길 수 있습니다.
- 같은 서열이 여러 번 등장함: 많이 발현된 유전자에서 실제로 같은 read가 반복될 수 있습니다.

반대로 GC 분포에 예상하지 않은 봉우리가 하나 더 생기거나, 특정 서열이 압도적으로 반복되면 오염 가능성을 확인해야 합니다. **신호등 색보다 그래프 모양과 RNA-seq라는 맥락이 중요합니다.**

각 모듈의 세부 임계값, 실제 FastQC 그래프, 여러 샘플을 MultiQC로 비교하는 방법은 [QC(FastQC) 레퍼런스](/reference/fastqc/)에서 확인하세요.

## 3. 트리밍: 정렬을 방해하는 끝부분 걷어내기

트리밍은 read의 **저품질 말단과 어댑터 같은 인공 서열을 제거**하는 단계입니다. 지도에 없는 글자가 read 끝에 붙어 있으면 정렬 도구가 원래 위치를 찾기 어려워지기 때문입니다.

문자열 전처리로 보면, 알려진 suffix인 어댑터를 제거하고 신뢰도가 낮은 tail을 잘라내는 작업입니다. 원본 내부의 임의 구간을 삭제하거나 모든 레코드를 같은 길이로 강제하는 작업은 아닙니다.

### 짧은 fragment를 지나 어댑터까지 읽는다

100 bp를 읽도록 설정했는데 실제 fragment가 70 bp라면, 장비는 샘플 서열 70 bp를 다 읽고도 30번을 더 진행합니다. 이때 남은 30 bp에는 fragment 끝에 붙인 어댑터가 기록됩니다. 아래에서 fragment 길이를 100 bp 아래로 줄여 보세요.



어댑터는 라이브러리 제작과 시퀀싱에 필요한 손잡이지만 사람 게놈에는 없는 서열입니다. read에 남겨 두면 정렬 도구가 전체 read를 게놈에 맞추기 어려워집니다. 따라서 어댑터와 그 뒤쪽을 잘라냅니다.

### 무엇을 제거하나

트리밍은 모든 read를 같은 길이로 만드는 작업이 아닙니다. 각 read에서 문제가 확인된 부분만 제거합니다.

- **어댑터**: fragment 끝을 지나 읽힌 인공 서열
- **저품질 말단**: 시퀀싱 뒤쪽에서 신뢰도가 떨어진 염기
- **polyG와 N**: 장비가 신호를 잃거나 염기를 결정하지 못해 생긴 구간
- **polyA·polyT 꼬리**: 실제 RNA에서 왔지만 게놈 정렬에는 방해될 수 있는 끝부분

트리밍은 많이 자를수록 좋은 작업이 아닙니다. 너무 짧아진 read는 오히려 여러 위치에 모호하게 붙습니다. 따라서 트리밍 뒤 FastQC를 다시 실행해 **오염은 줄고, 쓸 수 있는 길이와 read 수는 충분히 남았는지** 확인합니다.

전후 비교에서는 모든 신호등을 초록색으로 만드는 것이 목표가 아닙니다. 어댑터 경고는 사라지고 위치별 품질은 유지되어야 합니다. 길이 분포에 새 경고가 생기는 것은 서로 다른 길이로 잘린 read가 생겼다는 자연스러운 결과일 수 있습니다.

[RNA-seq 실습의 트리밍 전후 비교](/practice/rna-seq-from-fastq/#3-2-트리밍-전후-비교)에서는 FastQC와 Trim Galore! 산출물을 나란히 놓고 다음 단계로 넘어갈지 판단합니다.

> 어댑터 read-through, polyG·polyA·N, 과도한 트리밍의 문제와 도구 선택은 [트리밍 레퍼런스](/reference/trimming/)에서 자세히 다룹니다.


## 정리

FastQC는 read를 합격·불합격으로 자동 판정하는 도구가 아니라 문제 신호를 보여주는 도구입니다. 그래프를 보고 필요한 부분만 트리밍한 뒤 다시 확인합니다.

> **원본 FASTQ → FastQC → 필요한 부분 트리밍 → FastQC 재확인 → 정렬용 FASTQ**

다음 [RNA read를 게놈에 정렬하기](/lessons/rna-seq-alignment/)에서는 정리된 read가 게놈 어디에서 왔는지 찾습니다.

---

### 출처

- 레퍼런스 게놈 ALT/HLA/decoy 제거 방식: [GTEx / TOPMed RNA-seq pipeline](https://github.com/broadinstitute/gtex-pipeline/blob/master/TOPMed_RNAseq_pipeline.md)
- 정상 조직 발현 레퍼런스(GTEx): [GTEx Portal: bulk tissue expression](https://gtexportal.org/home/downloads/adult-gtex/bulk_tissue_expression) · [Nature Genetics 2013](https://www.nature.com/articles/ng.2653)
- 암 발현·유전체 레퍼런스(PCAWG): [Pan-cancer analysis of whole genomes, *Nature* 2020](https://www.nature.com/articles/s41586-020-1969-6) · [ICGC/ARGO 데이터 접근](https://docs.icgc-argo.org/docs/data-access/icgc-25k-data)
- Sid 공개 발현 뷰어: [osteosarc.com/rnaseq](https://osteosarc.com/rnaseq/)