참조 게놈이 없을 때 — 지도를 스스로 그려야 하는 순간
지금까지 S03~S16에서 우리가 한 일은 모두 참조 게놈에 리드를 붙이는 것이었습니다. BWA-MEM도, GATK도 인간 참조 서열이라는 완성된 지도가 있다는 전제였습니다.
그런데 병원 감염 사례에서 정체불명의 박테리아가 배양됐다고 해봅시다. 종(species)조차 확실하지 않습니다. 붙일 지도가 없습니다. 이때 우리는 리드 수백만 개만으로 게놈을 밑바닥부터 재구성해야 합니다. 이것이 de novo 어셈블리입니다. M23에서 배운 de Bruijn 그래프가 드디어 실전 도구 SPAdes로 살아나는 순간입니다.
de Bruijn 그래프 — 빠른 복습
리드를 길이 의 조각(k-mer)으로 잘라, 각 (k−1)-mer를 노드로, k-mer를 엣지로 놓습니다. 그러면 게놈 재구성은 모든 엣지를 정확히 한 번씩 지나는 오일러 경로를 찾는 문제가 됩니다. M23에서 손으로 그렸던 바로 그 그래프입니다.
실제 데이터에서 이 그래프는 깔끔하지 않습니다. 세 가지 오염이 있습니다.
- tip(막다른 짧은 가지): 리드 끝의 시퀀싱 오류
- bubble(갈라졌다 합쳐지는 두 경로): 이형접합 변이 또는 오류
- 반복 서열: 게놈에 같은 서열이 여러 번 나오면 그래프가 엉켜 경로가 유일하지 않음
어셈블러의 실력은 이 셋을 얼마나 잘 정리하느냐로 갈립니다.
SPAdes의 핵심 아이디어: k를 하나 고르지 말고 여러 개 써라
de Bruijn 그래프의 골칫거리는 k 값의 딜레마입니다.
- k가 작으면: 저커버리지 영역도 연결되지만, 반복 서열에서 그래프가 심하게 엉킵니다.
- k가 크면: 반복이 잘 풀리지만, 커버리지가 낮은 곳에서 그래프가 뚝뚝 끊깁니다.
SPAdes의 해법은 우아합니다. 하나를 고르지 말고 여러 k를 순차로 쓴다. 작은 k(예: 21)로 만든 그래프에서 얻은 정보를 큰 k(예: 55, 77)의 그래프로 넘겨주며 점진적으로 정제합니다. 이 multi-k 전략이 SPAdes를 미생물 어셈블리의 사실상 표준으로 만든 핵심입니다. 낮은 해상도로 큰 그림을 잡고, 높은 해상도로 디테일을 살리는 것 — 이미지 처리의 image pyramid와 같은 발상입니다.
여기에 SPAdes는 두 가지를 더 얹습니다.
- BayesHammer — 그래프를 만들기 전에 리드의 시퀀싱 오류를 베이즈 방식으로 교정합니다. k-mer 빈도 분포에서 "너무 드문 k-mer는 오류일 확률이 높다"를 이용합니다.
- paired-end 정보로 반복 풀기 — 쌍읽기(read pair)의 거리 정보로, 반복 때문에 갈라진 경로 중 어느 것이 옳은지 골라냅니다.
조립 품질은 무엇으로 재나 — N50
어셈블리 결과는 완벽한 하나의 원형 염색체가 아니라, 여러 개의 연속 조각(contig)입니다. 품질을 어떻게 한 숫자로 요약할까요? 평균 길이는 짧은 조각 수천 개에 휘둘려 오해를 부릅니다. 그래서 N50을 씁니다.
정의: contig를 긴 것부터 늘어놓고 길이를 누적할 때, 전체 어셈블리 길이의 50%를 처음 넘기는 그 지점의 contig 길이.
손으로 N50 계산하기
contig 길이가 [500, 400, 300, 200, 100] kb, 총합 1,500 kb라고 해봅시다. 절반은 750 kb.
| contig | 길이(kb) | 누적(kb) |
|---|---|---|
| C1 | 500 | 500 |
| C2 | 400 | 900 ← 750 넘김 |
| C3 | 300 | 1200 |
| C4 | 200 | 1400 |
| C5 | 100 | 1500 |
누적이 750을 처음 넘긴 것은 C2(누적 900)입니다. 따라서 N50 = 400 kb. N50이 클수록 조립이 덜 조각나 있다는 뜻입니다. 단, N50만 크고 실제 게놈보다 총길이가 부풀었다면 오조립(misassembly)일 수 있으니 항상 QUAST로 함께 봐야 합니다.
Galaxy에서 직접 조립하기 (노코드 + CLI 둘 다)
명령줄이 부담되면 usegalaxy.eu에서 클릭만으로 전체 파이프라인을 돌릴 수 있습니다. 250GB 무료 저장과 GPU/CPU가 제공됩니다.
Galaxy 워크플로우 (노코드)
- Upload — E. coli 소규모 paired-end 리드(예: SRA의 서브샘플) 두 파일.
- FastQC → fastp — S02에서 배운 품질 확인·트리밍.
- SPAdes — 입력에 forward/reverse 지정,
--isolate또는 careful 모드 선택. k는 자동(auto) 권장. - QUAST — contigs.fasta를 넣어 N50·총길이·오조립 리포트.
- Bandage — assembly_graph.gfa를 시각화해 반복 매듭을 눈으로 확인.
같은 작업을 CLI로
# SPAdes 설치는 conda 권장 (S-후속 편 Pixi/uv 참고)spades.py \ -1 reads_R1.fastq.gz \ -2 reads_R2.fastq.gz \ --isolate \ -k 21,33,55,77 \ -o ecoli_assembly \ -t 4 -m 16
# 품질 평가quast.py ecoli_assembly/contigs.fasta -o quast_report--isolate는 순수 배양 단일 균주에 맞는 모드입니다. 임상 검체처럼 저커버리지·불균등이면 --careful(소규모 게놈 한정)이 오조립을 줄여줍니다. -k를 명시하면 multi-k 단계를 직접 통제할 수 있습니다.
결과의 contigs.fasta에서 가장 긴 contig 하나를 NCBI BLAST에 넣어보면, 이 정체불명 박테리아의 정체가 드러나기 시작합니다. 다음 편 S24의 분류(taxonomy)로 그 정체를 확정하게 됩니다.
CS 매핑
- 오일러 경로: de Bruijn 그래프에서 모든 엣지를 한 번씩 지나는 경로. DryBench의 그래프 순회 편과 직결됩니다. 해밀턴 경로(OLC)와 달리 다항 시간에 풀립니다.
- 그래프 단순화: tip 제거·bubble 병합은 그래프 축약(contraction) 연산입니다. 컴파일러의 제어흐름 그래프 최적화와 발상이 같습니다.
- multi-k = image pyramid: 저해상도에서 고해상도로 정보를 넘기는 다중 스케일 접근은 컴퓨터 비전의 이미지 피라미드, 수치해석의 multigrid와 형제입니다.
- k-mer 해싱: k-mer를 해시로 카운트하는 것은 M15의 FM-index/해시 인덱싱과 이어집니다.
자주 만나는 결함
- 트리밍 없이 바로 조립 — 어댑터·저품질 끝단이 그래프에 tip 폭발을 일으킵니다. FastQC/fastp는 선행 필수입니다.
--careful를 큰 게놈에 사용 — 이 모드는 소규모(세균) 전용입니다. 진핵 대형 게놈에서는 메모리·시간이 폭발합니다.- N50만 보고 만족 — 총길이가 예상 게놈 크기와 크게 다르면(부풀거나 결손) 오조립·오염 신호입니다. QUAST의 misassembly와 GC 분포를 함께 봅시다.
- k를 하나만 강제 — SPAdes의 강점인 multi-k를 버리는 것입니다. 특별한 이유가 없으면 auto나 여러 k를 씁시다.
더 깊게 파고 싶다면
본문은 BPD가 직접 재구성한 서술입니다. 심화는 아래 정통 자료를 활용합시다.
- Galaxy Training Network — De Bruijn Graph Assembly 및 Unicycler assembly 튜토리얼 (training.galaxyproject.org, 자막·문서 완비). 노코드 실습의 정석입니다.
- 원 논문(SPAdes): Bankevich et al. (2012), SPAdes: A New Genome Assembly Algorithm and Its Applications to Single-Cell Sequencing, Journal of Computational Biology 19:455. multi-k와 BayesHammer의 원천입니다.
- 평가 도구: Gurevich et al. (2013), QUAST: quality assessment tool for genome assemblies, Bioinformatics 29:1072. N50·오조립 지표의 표준입니다.
- 시각화: Wick et al. (2015), Bandage: interactive visualization of de novo genome assemblies, Bioinformatics 31:3350 (rrwick.github.io/Bandage). 그래프 매듭을 눈으로 보는 도구입니다.
숏리드만으로는 반복 서열을 끝까지 풀 수 없어 조각이 남습니다. 다음 편 S23에서 롱리드를 결합해 이 한계를 넘는 **하이브리드 어셈블리(Unicycler)**로 나아갑니다.