왜 트리밍을 해야 하나요
FASTQ를 열어봤으니 이제 파이프라인에 넣기 전에 청소를 해야 합니다. 이 청소를 안 하고 그대로 정렬기로 던지면 무슨 일이 생길까요.
- 어댑터 서열이 리드 3′에 남아 있어서 참조 게놈에 안 붙는 리드가 대량 발생합니다.
- 3′ 저품질 꼬리가 mismatch로 카운트되어 GATK가 헛변이를 부릅니다.
- PCR 중복이 duplication 지표를 부풀려 커버리지 계산이 왜곡됩니다.
즉 트리밍은 "예쁘게 다듬는 옵션"이 아니라 뒤 파이프라인의 통계 가정을 만족시키기 위한 정합성 작업입니다. 서두르지 맙시다.
FastQC — 무엇을 먼저 볼까요
FastQC 리포트는 항목이 스무 개가 넘어서 처음 열면 압도됩니다. 실무에서 매번 확인하는 순서를 좁혀둡시다.
1. Per base sequence quality (박스플롯)
- 리드 위치(x축) × Phred 점수(y축) 박스플롯.
- 리드 앞부분이 노란색 구간에 잠깐 잠기는 건 정상 (프리머 결합 시 노이즈).
- 뒷부분이 Q20 상자 아래로 무너지면 → 3′ quality trimming 결재.
2. Per sequence quality scores (히스토그램)
- 리드 평균 Q값 분포.
- 봉우리가 Q30 근처에서 예쁘게 서 있어야 정상.
- Q10~Q15에 두 번째 봉우리가 있으면 → 라이브러리 실패 의심.
3. Overrepresented sequences (표)
- 특정 서열이 리드의 0.1% 이상 반복되면 여기 나옵니다.
- FastQC가 자체 어댑터 DB와 대조해서
TruSeq Adapter Index 1같은 매칭을 붙여줍니다. - 이 이름이 뜨는 순간 → adapter trimming 결재.
4. Adapter Content (라인차트)
- 리드 위치별 어댑터 존재 비율.
- 3′ 쪽에서 급격히 올라가면 어댑터 read-through 발생 (인서트가 리드 길이보다 짧아서 시퀀서가 어댑터까지 읽은 상황).
이 네 개만 매번 확실히 확인하면 다른 항목은 자연히 해석이 붙습니다.
어댑터가 뭔가요 — 그림 없이 이해하기
Illumina 라이브러리의 인서트는 이렇게 생겼습니다.
[P5] - [i5 인덱스] - [Rd1 프라이머] - [DNA 인서트] - [Rd2 프라이머] - [i7 인덱스] - [P7]시퀀서는 Rd1 프라이머에서 시작해서 인서트 방향으로 읽어 들어갑니다. 그런데 인서트가 리드 길이(예: 150bp)보다 짧다면 어떻게 될까요. 시퀀서는 정직하게 계속 읽어서 인서트 끝을 넘어 반대편 Rd2 프라이머 서열까지 그대로 리드에 남깁니다. 그게 3′에 붙는 "어댑터"의 실체입니다.
즉 어댑터는 라이브러리 프로토콜별로 서열이 고정되어 있습니다. TruSeq이면 AGATCGGAAGAGC..., Nextera면 CTGTCTCTTATACACATCT. 트리밍 도구는 이 알려진 서열을 리드 3′에서 접미사 매칭으로 검출합니다.
fastp — 요즘 쓰는 원샷 도구
FastQC + Trim Galore + cutadapt를 예전엔 나눠 썼는데, 2018년 이후로는 fastp 하나로 대부분 정리합니다. 이유는 세 가지입니다.
- 속도: C++로 짜여 있고 병렬 처리. 30GB 파일 5분 내.
- 자동 어댑터 감지: 리드에서 오버랩되는 서열을 통계적으로 탐지 → 프로토콜을 몰라도 트리밍.
- JSON 리포트: FastQC와 유사한 리포트를 JSON+HTML로 동시 산출 → MultiQC에 그대로 합칠 수 있음.
기본 실행
fastp \ -i sample_R1.fastq.gz \ -I sample_R2.fastq.gz \ -o clean_R1.fastq.gz \ -O clean_R2.fastq.gz \ --detect_adapter_for_pe \ --qualified_quality_phred 20 \ --length_required 50 \ --json report.json \ --html report.html옵션 세 줄만 뜯어봅시다.
--detect_adapter_for_pe: paired-end에서 R1/R2 오버랩으로 어댑터 자동 감지.--qualified_quality_phred 20: 리드 뒤에서부터 슬라이딩 윈도우로 평균 Q20 이하 구간 잘라내기.--length_required 50: 트리밍 후 50bp 미만이면 폐기.
Trim Galore — cutadapt 위에 얹은 얇은 레이어
fastp 이전 시대의 표준. Trim Galore는 내부적으로 cutadapt를 부르고, 인간·마우스 어댑터에 대한 기본 프리셋을 얹어 제공합니다. 기존 파이프라인 유지 관리 목적이라면 여전히 안전한 선택입니다.
trim_galore --paired --quality 20 --length 50 \ -o clean/ sample_R1.fastq.gz sample_R2.fastq.gz옵션 세 개(--paired, --quality, --length)만 알면 대부분 실무 요구가 충족됩니다.
fastp vs Trim Galore, 어느 걸 쓸까요
- 신규 프로젝트: fastp 우선. 속도·자동 감지·리포트 통합.
- 기존 Snakemake/Nextflow 유지 보수: 원 파이프라인 도구 유지 (호환성).
- 참조 논문 재현: 논문이 지정한 도구 그대로 (재현성).
이 세 원칙만 잡으면 도구 선택으로 고민할 일이 거의 없습니다.
손 계산 — 슬라이딩 윈도우가 실제로 하는 일
품질 트리밍의 핵심은 3′ 슬라이딩 윈도우입니다. 예를 들어 윈도우 크기 4, 임계 Q20이면 이렇게 판단합니다.
리드 뒷부분 품질 벡터가 이렇다고 합시다.
... Q35 Q33 Q30 Q28 | Q22 Q18 Q15 Q10
3′에서 왼쪽으로 이동하면서 크기 4 윈도우의 평균을 봅니다.
| 윈도우 | 값 | 평균 Q |
|---|---|---|
| 마지막 4개 | 22, 18, 15, 10 | 16.25 |
| 한 칸 왼쪽 | 28, 22, 18, 15 | 20.75 |
| 두 칸 왼쪽 | 30, 28, 22, 18 | 24.5 |
임계 Q20을 처음 넘는 지점(두 칸 왼쪽, 평균 24.5)에서 오른쪽 전부 폐기합니다. 그러면 트리밍 결과는 앞의 ... Q35 Q33 Q30 Q28까지 남습니다.
이 슬라이딩 윈도우가 fastp의 --cut_tail --cut_tail_mean_quality 20, Trim Galore의 --quality 20, cutadapt의 -q 20 옵션이 실제로 하는 동작입니다.
Galaxy EU에서 노코드로 실습
CLI가 부담스러우면 Galaxy Europe에서 무료로 같은 작업을 마우스 클릭으로 돌릴 수 있습니다. 250GB 무료 저장공간 + Trim Galore/fastp/FastQC 워크플로우 프리셋을 지원합니다.
- 계정 생성 후 History 하나 만들기.
Upload Data→ 예제 FASTQ 업로드 (또는 EBI ENA에서 URL 직접 입력).- Tools 검색창에
FastQC→ 리드 파일 지정 후 실행. - 다시
fastp검색 → paired-end 선택, R1/R2 지정. MultiQC실행 → FastQC 결과와 fastp 결과를 한 페이지에 통합.
노코드 워크플로우는 이후 다른 팀원에게 파이프라인을 재현시키기 좋습니다.
MultiQC — 리포트 병합
30개 샘플을 각각 FastQC 리포트로 보는 건 지옥입니다. MultiQC를 실행하면 폴더 안의 모든 리포트(FastQC · fastp · STAR · samtools · GATK)를 자동으로 스캔해서 하나의 HTML로 합쳐줍니다.
multiqc . -o multiqc_report/이 한 줄이 실무에서 가장 사랑받는 명령입니다. 팀 미팅에서 "우리 어제 시퀀싱 어땠어요?"라는 질문에 이 HTML 한 장으로 답변합니다.
CS 매핑 — 슬라이딩 윈도우와 접미사 매칭
- 슬라이딩 윈도우 평균: 품질 트리밍 = DryBench "슬라이딩 윈도우 기초" 편의 바이오 실무 판.
- 접미사 매칭 (approximate): 어댑터 감지는 리드 3′ 접미사와 알려진 어댑터 서열의 근사 매칭.
kmismatch 허용의 접미사 서치 문제입니다. - 스트림 필터(Unix pipe): fastp 자체가 stdin/stdout 지원 → 파이프라인 안에 얹으면 zcat | fastp | bwa mem 같은 스트리밍이 가능합니다.
실무 결정 규칙 — 무엇을 얼마나 자를까요
새 프로젝트를 받았을 때 아래 순서로 결정합니다.
- 어댑터 감지 여부 확인: FastQC "Adapter Content" 그래프. 3′에서 5% 이상 올라가면 → 트리밍 필수.
- 품질 임계 선택:
- 변이 검출용 WGS/WES → Q20.
- RNA-seq 정량 → Q15 (트리밍이 오히려 정량 편향 유발 우려, 최근엔 트리밍 최소화 흐름).
- 어셈블리용 롱리드 → Q7~Q10 (원래 낮음).
- 길이 임계: 정렬기 요구에 따라 50bp 이상 권장. 어셈블리는 100bp 이상.
- 폐기율 모니터링: 트리밍 후 리드 유실이 20% 이상이면 라이브러리 자체 재검토.
이 네 지점이 다음 편(S03 BWA-MEM)의 입력 품질을 결정합니다.
마무리
FastQC로 보고, fastp로 자르고, MultiQC로 합칩니다. 이 세 도구가 다음 25편 내내 반복해서 등장합니다. 다음 편 S03에서는 정돈된 리드를 참조 게놈에 실제로 정렬합니다. BWA-MEM이 왜 아직도 표준인지, 그 안에서 M06에서 배운 Needleman-Wunsch 격자가 어떻게 국소적으로 재활용되는지 함께 봅시다.
더 깊게 파고 싶다면
- Andrews S. (2010), FastQC: A Quality Control Tool for High Throughput Sequence Data. Babraham Bioinformatics 공식 문서. FastQC 각 항목의 이론 배경.
- Chen S. et al. (2018), fastp: an ultra-fast all-in-one FASTQ preprocessor. Bioinformatics 34:i884. fastp 원 논문.
- Krueger F., Trim Galore! User Guide. Babraham Bioinformatics. Trim Galore 설계 배경과 cutadapt 옵션 매핑.
- EMBL-EBI Training — QC and Trimming (https://www.ebi.ac.uk/training/) 무료 튜토리얼 시리즈. 한국어 자막은 없지만 자동 번역 가능.
- Galaxy Training Network — Quality Control 튜토리얼. 위 Galaxy EU 실습의 원본 자료.
Colab에서 fastp 한 번 돌려보고 MultiQC로 리포트 하나 만들어보면 다음 편 진입이 매끄럽습니다. 리드를 열고 자르고 합쳐야 합니다.