QIIME2로 시작하는 16S rRNA 마이크로바이옴 분석 — Docker 설치부터 Diversity까지

이 글에서 만들 것 — 마이크로바이옴 분석의 사실상 표준 도구인 QIIME2 2026.1을 Docker로 5분 만에 띄우고, 공식 Moving Pictures 튜토리얼 데이터로 원시 FASTQ → ASV 테이블 → 알파·베타 다이버시티 → 분류군 바 플롯까지 한 번에 돌립니다. 한국어 자료가 거의 없는 영역인 만큼, 명령어 한 줄마다 한글 설명을 붙였고 자주 막히는 지점은 따로 정리했습니다. 앞서 마이크로바이옴 시리즈에서 다룬 개념·과학·산업을, 이번 글로 실제 데이터 분석까지 잇습니다.
🔗 관련 글 · 기본 개념: 마이크로바이옴 입문 · 산업 측면: 마이크로바이옴 화장품, 과학이 마케팅을 따라가는 시장
1. QIIME2가 뭔가요?
QIIME2 (Quantitative Insights Into Microbial Ecology 2)는 마이크로바이옴(특히 16S rRNA 같은 마커유전자 amplicon) 분석의 국제 표준 파이프라인입니다. 입력은 시퀀서가 뱉어 낸 FASTQ(앞선 FASTQ 입문 참고)이고, 출력은 군집 구성·다이버시티·통계·시각화까지 한 줄로 이어집니다.
다른 도구와 비교하면 자리매김이 또렷합니다.
| 도구 | 성격 | 특징 |
|---|---|---|
| QIIME2 | 통합 파이프라인 | 전 단계(import→denoise→tree→diversity→taxonomy) 한 우산. 결과는 .qza/.qzv 표준 객체 |
| Mothur | 통합 파이프라인 | C++ 기반. 명령어 체계가 다르고 커뮤니티 색이 다름 |
| DADA2 (R) | 디노이징 단일 | R 패키지. QIIME2 안에서도 디노이저로 호출됨 |
| phyloseq (R) | 분석·시각화 | QIIME2 결과를 R로 받아 추가 분석 |
QIIME2의 진짜 강점은 재현성입니다. 모든 입력·출력이 메타데이터를 품은 단일 파일(.qza, .qzv)이라 누가 언제 어떤 버전으로 만들었는지가 파일 안에 기록됩니다. 학술적으로도 산업적으로도 신뢰가 가는 이유입니다.
2. 사전 준비 — Docker 한 줄 설치
QIIME2 설치는 conda로도 되지만, 의존성 충돌이 잦습니다. Docker가 제일 깔끔합니다. OS와 무관하게 같은 결과를 보장합니다.
Docker 데스크톱 설치
- macOS / Windows: docker.com/products/docker-desktop
- Linux: 패키지 매니저로
docker.io설치
설치 후 확인:
docker --version
# 예: Docker version 27.x.x, build ...
QIIME2 이미지 받기
공식 Amplicon Distribution 이미지를 받습니다(약 3 GB, 한 번만).
docker pull quay.io/qiime2/amplicon:2026.1
작업 폴더에서 컨테이너 띄우기
작업할 디렉터리를 컨테이너의 /data에 마운트해 인터랙티브 셸로 들어갑니다.
mkdir qiime2-mp && cd qiime2-mp # 작업 폴더 생성·이동
docker run -it --rm \
-v "$PWD":/data -w /data \
quay.io/qiime2/amplicon:2026.1 bash
옵션 의미: -it(대화형) · --rm(종료 시 컨테이너 삭제) · -v "$PWD":/data(현재 폴더를 컨테이너의 /data에 연결) · -w /data(작업 위치 지정).
이제 프롬프트가 컨테이너 내부로 바뀌면 준비 끝입니다. 아래 모든 qiime ... 명령은 이 셸에서 실행합니다.
Windows 사용자 메모 — PowerShell에서는$PWD대신${PWD}로, 또는 절대경로(C:/Users/.../qiime2-mp)로 마운트하세요.
3. 단계별 실행 — Moving Pictures 튜토리얼
공식 튜토리얼은 한 사람의 창자·혀·왼손·오른손 시료를 시간에 걸쳐 추적한 유명한 데이터셋입니다. 데이터가 작아 노트북에서도 10여 분에 끝납니다.
STEP 1 — 메타데이터와 원자료 받기
# 메타데이터
wget -O sample-metadata.tsv \
"https://data.qiime2.org/2024.10/tutorials/moving-pictures/sample_metadata.tsv"
# 원시 시퀀스(EMP single-end 포맷: barcodes + sequences)
mkdir emp-single-end-sequences
wget -O emp-single-end-sequences/barcodes.fastq.gz \
"https://data.qiime2.org/2024.10/tutorials/moving-pictures/emp-single-end-sequences/barcodes.fastq.gz"
wget -O emp-single-end-sequences/sequences.fastq.gz \
"https://data.qiime2.org/2024.10/tutorials/moving-pictures/emp-single-end-sequences/sequences.fastq.gz"
QIIME2 객체(.qza)로 변환합니다.
qiime tools import \
--type EMPSingleEndSequences \
--input-path emp-single-end-sequences \
--output-path emp-single-end-sequences.qza
.qza가 뭔가요? QIIME2의 단일 결과물 파일입니다. 사실은 zip이고 안에 데이터+메타데이터(provenance, 즉 누가/언제/어떤 명령으로 만들었나)가 함께 들어 있습니다. .qzv는 그 시각화 버전이며 view.qiime2.org에 끌어다 놓으면 브라우저에서 바로 열립니다.
STEP 2 — 디멀티플렉싱
여러 시료의 시퀀스가 한 파일에 섞여 있으므로 바코드로 시료별로 가릅니다.
qiime demux emp-single \
--i-seqs emp-single-end-sequences.qza \
--m-barcodes-file sample-metadata.tsv \
--m-barcodes-column barcode-sequence \
--o-per-sample-sequences demux.qza \
--o-error-correction-details demux-details.qza
qiime demux summarize \
--i-data demux.qza \
--o-visualization demux.qzv # view.qiime2.org에서 열어 시료별 read 분포·품질을 확인
이 시점에 demux.qzv를 열어 시료당 read 수와 위치별 품질 곡선을 봐야 합니다. 다음 단계의 --p-trunc-len 값을 정하는 근거가 됩니다.
STEP 3 — DADA2로 디노이징 → ASV
DADA2는 오차 모델로 시퀀싱 에러를 보정해 정확한 1-염기 분해능의 ASV (Amplicon Sequence Variant)를 뽑아냅니다. 과거의 97% 유사도 OTU보다 해상도가 높고 재현 가능합니다.
qiime dada2 denoise-single \
--i-demultiplexed-seqs demux.qza \
--p-trim-left 0 \
--p-trunc-len 120 \
--o-representative-sequences rep-seqs-dada2.qza \
--o-table table-dada2.qza \
--o-denoising-stats stats-dada2.qza
--p-trunc-len 120은 품질이 떨어지는 꼬리 부분을 잘라 120 bp만 쓴다는 뜻입니다. STEP 2의 품질 곡선을 보고 정합니다.
산출물을 표준 이름으로 정리합니다.
mv rep-seqs-dada2.qza rep-seqs.qza # 대표 서열 (ASV)
mv table-dada2.qza table.qza # feature table (시료 × ASV 행렬)
qiime metadata tabulate \
--m-input-file stats-dada2.qza \
--o-visualization stats-dada2.qzv # 시료별 input/filtered/denoised/chimera 통계
STEP 4 — Feature table 요약 + 계통수
qiime feature-table summarize \
--i-table table.qza \
--o-visualization table.qzv \
--m-sample-metadata-file sample-metadata.tsv
qiime feature-table tabulate-seqs \
--i-data rep-seqs.qza \
--o-visualization rep-seqs.qzv
table.qzv에서 표본당 read 수 분포를 본 뒤, 너무 작아 의미가 떨어지는 시료를 가르는 기준값(rarefaction depth)을 다음 단계에서 정합니다.
계통적 다이버시티(예: Faith's PD, UniFrac)에 필요한 계통수를 만듭니다.
qiime phylogeny align-to-tree-mafft-fasttree \
--i-sequences rep-seqs.qza \
--o-alignment aligned-rep-seqs.qza \
--o-masked-alignment masked-aligned-rep-seqs.qza \
--o-tree unrooted-tree.qza \
--o-rooted-tree rooted-tree.qza
STEP 5 — 핵심 다이버시티 (알파·베타)
core-metrics-phylogenetic 한 줄로 알파·베타 지표 한 묶음과 PCoA 좌표·Emperor 시각화가 한꺼번에 떨어집니다.
qiime diversity core-metrics-phylogenetic \
--i-phylogeny rooted-tree.qza \
--i-table table.qza \
--p-sampling-depth 1103 \
--m-metadata-file sample-metadata.tsv \
--output-dir core-metrics-results
--p-sampling-depth 1103은 모든 시료를 1103개 read로 통일(rarefaction)합니다. 이 값은 STEP 4의 table.qzv에서 너무 작은 시료를 버리지 않으면서도 의미 있는 깊이를 고른 결과입니다(시료마다 다름).
알파 다이버시티 그룹 차이(예: 시료 부위별)를 검정합니다.
qiime diversity alpha-group-significance \
--i-alpha-diversity core-metrics-results/faith_pd_vector.qza \
--m-metadata-file sample-metadata.tsv \
--o-visualization core-metrics-results/faith-pd-group-significance.qzv

베타 다이버시티는 군집 간 거리(예: UniFrac) 차이를 PERMANOVA로 검정합니다.
qiime diversity beta-group-significance \
--i-distance-matrix core-metrics-results/unweighted_unifrac_distance_matrix.qza \
--m-metadata-file sample-metadata.tsv \
--m-metadata-column body-site \
--o-visualization core-metrics-results/unweighted-unifrac-body-site-significance.qzv \
--p-pairwise

알파 vs 베타? 알파 = 한 시료 안의 다양성(얼마나 많은 종이 얼마나 균등하게 사는가). 베타 = 시료들 사이의 차이(두 시료의 군집이 얼마나 닮았는가). 박스플롯과 PCoA 산점도가 각각의 표준 시각화입니다.
STEP 6 — 분류 (Taxonomy)
ASV의 정체(어떤 균인지)는 사전 학습된 분류기에 맡깁니다. 빠르고 안정적인 Greengenes 13_8 사전학습 분류기를 받습니다.
wget -O gg-13-8-99-515-806-nb-classifier.qza \
"https://data.qiime2.org/classifiers/sklearn-1.4.2/greengenes/gg-13-8-99-515-806-nb-classifier.qza"
qiime feature-classifier classify-sklearn \
--i-classifier gg-13-8-99-515-806-nb-classifier.qza \
--i-reads rep-seqs.qza \
--o-classification taxonomy.qza
Greengenes vs SILVA? Greengenes 13_8은 가볍고 빠르며 V4 영역(515F/806R)에 잘 맞는 클래식. SILVA 138은 더 최신·포괄적이고 V3-V4 등 다양한 영역을 지원합니다. 시료의 프라이머 영역과 맞는 분류기를 고르는 게 중요합니다.
분류 결과를 표·바 플롯으로 봅니다.
qiime metadata tabulate \
--m-input-file taxonomy.qza \
--o-visualization taxonomy.qzv
qiime taxa barplot \
--i-table table.qza \
--i-taxonomy taxonomy.qza \
--m-metadata-file sample-metadata.tsv \
--o-visualization taxa-bar-plots.qzv
taxa-bar-plots.qzv에서 수준(phylum·class·…·species)을 슬라이더로 바꿔 가며 시료별 구성을 비교할 수 있습니다. 발표용 그림은 보통 이 화면을 캡처해서 만듭니다.
4. 자주 발생하는 에러와 해결법
| 증상 | 원인 / 해결 |
|---|---|
--p-trunc-len을 너무 크게 잡아 모든 read가 버려짐 | demux.qzv의 위치별 품질이 떨어지는 지점 전에서 자르세요(보통 Q≥25 구간 끝). |
core-metrics-phylogenetic에서 시료가 대거 누락 | --p-sampling-depth보다 read 수가 적은 시료가 버려진 것. table.qzv의 분포를 보고 깊이를 낮추세요. |
Plugin error from feature-classifier (메모리 부족) | 분류기 학습이 RAM을 많이 씁니다. Docker 데스크톱의 메모리 한도를 8 GB 이상으로 올리거나, 사전학습 분류기를 쓰세요. |
Permission denied (Docker 마운트) | -v "$PWD":/data 경로가 Docker 데스크톱의 파일 공유 허용 목록에 있는지 확인. |
.qzv가 안 열림 | view.qiime2.org에 파일을 끌어다 놓거나, qiime tools view file.qzv(브라우저가 있는 환경) 사용. |
| Greengenes 분류기와 시료의 프라이머 영역이 안 맞음 | 시료가 V3-V4면 SILVA 138 V3-V4 분류기 또는 feature-classifier extract-reads + fit-classifier-naive-bayes로 직접 학습. |
5. 확장 / 응용
① DADA2 vs Deblur — 둘 다 ASV 디노이저입니다. DADA2가 더 정밀하고 표준이지만, Deblur는 빠르고 가벼워 대용량 케이스에 종종 쓰입니다. QIIME2에서는 qiime deblur denoise-16S로 호출합니다.
② 차등 풍부도(differential abundance) — ANCOM-BC — 군집 구성 차이를 통계적으로 검정합니다. 마이크로바이옴 데이터는 합이 1인 조성 데이터(compositional)라 보통 회귀로 다루면 안 됩니다. ANCOM-BC가 이 함정을 보정합니다.
qiime composition ancombc \
--i-table gut-table.qza \
--m-metadata-file sample-metadata.tsv \
--p-formula 'subject' \
--o-differentials ancombc-subject.qza
③ R로 가져오기 — phyloseq — QIIME2 결과를 R로 옮기면 phyloseq·microbiome 패키지로 더 자유로운 분석·시각화가 가능합니다. qiime2R 패키지의 qza_to_phyloseq()가 가장 손쉽습니다.
References
- Bolyen, E., et al. (2019). Reproducible, interactive, scalable and extensible microbiome data science using QIIME 2. Nature Biotechnology, 37, 852–857.
- Callahan, B. J., et al. (2016). DADA2: High-resolution sample inference from Illumina amplicon data. Nature Methods, 13(7), 581–583.
- Lin, H., & Peddada, S. D. (2020). Analysis of compositions of microbiomes with bias correction (ANCOM-BC). Nature Communications, 11, 3514.
- McMurdie, P. J., & Holmes, S. (2013). phyloseq: An R package for reproducible interactive analysis and graphics of microbiome census data. PLoS ONE, 8(4), e61217.
- QIIME 2 Amplicon Distribution — Official Documentation (2025.4 / 2026.1). amplicon-docs.qiime2.org
- Moving Pictures Tutorial — docs.qiime2.org/2024.10/tutorials/moving-pictures
- SILVA rRNA database — arb-silva.de
Pipette & Pipeline · A bio portfolio journal — bridging research, data, and industry.
'Code Bench > Microbiome Tools' 카테고리의 다른 글
| Phyloseq로 마이크로바이옴 분석하기 — QIIME2 결과를 R에서 다양성·조성으로 시각화 (0) | 2026.05.31 |
|---|