BioPlayground

🧬
목록으로

로컬 BLAST 데이터베이스 서버 구축: 자기 서열로 자기 실무 세팅하기

왜 실무에서는 NCBI 웹이 아닌 로컬 BLAST를 쓰는가. makeblastdb로 자기 서열을 인덱싱하고, blastn·blastp를 CLI로 실행하고, 결과를 파싱하는 전체 절차.

입문
|
15
|
검증 완료 (2026-07-19)
BLAST+makeblastdblocal databasebioinformatics workflow
진행률0/34 (0%)

왜 로컬 BLAST가 필요한가

NCBI BLAST 웹은 편리하지만 세 가지 한계가 있습니다.

  1. 트래픽 제약: 하루에 수백 개 쿼리를 자동으로 돌리면 NCBI 서버가 제한을 걸 수 있습니다. 실무 파이프라인에는 부담됩니다.
  2. 자기 데이터: 자기가 조립한 미생물 게놈, 자기 실험실의 발현 서열, 미공개 데이터에 대해 BLAST를 하려면 로컬이 유일한 답입니다.
  3. 재현성: 웹 BLAST의 검색 결과는 데이터베이스가 갱신되면 달라집니다. 논문의 재현성을 위해서는 특정 시점의 데이터베이스로 로컬에서 실행해야 합니다.

이 편에서 우리는 BLAST+ (NCBI가 배포하는 로컬 BLAST 도구 모음)을 설치하고, 자기 서열을 데이터베이스로 만들고, 쿼리를 실행하는 전체 절차를 밟습니다. 이 편이 끝나면 blastn · blastp · tblastn 명령어를 자연스럽게 다룰 수 있게 됩니다.

1단계 — BLAST+ 설치

플랫폼별 설치 방법입니다.

Ubuntu · Debian

bash
sudo apt-get update
sudo apt-get install -y ncbi-blast+
blastn -version

macOS (Homebrew)

bash
brew install blast
blastn -version

Conda 환경(권장)

bash
conda create -n blast-env -c bioconda blast
conda activate blast-env
blastn -version

Docker

bash
docker pull ncbi/blast
docker run --rm -v $(pwd):/blast/blastdb ncbi/blast blastn -version

정상적으로 설치되면 다음이 뜹니다.

text
blastn: 2.14.0+
 Package: blast 2.14.0, build ...

2단계 — 자기 데이터베이스 만들기

makeblastdb가 FASTA 파일을 BLAST가 검색할 수 있는 인덱스로 변환합니다.

DNA 데이터베이스

bash
makeblastdb \
-in my_contigs.fasta \
-dbtype nucl \
-out my_db_nucl \
-title "My Custom Nucleotide Database"
ls -la my_db_nucl.*

이 명령이 다음 파일들을 만듭니다.

text
my_db_nucl.nhr  # 헤더
my_db_nucl.nin  # 인덱스
my_db_nucl.nsq  # 서열

단백질 데이터베이스

bash
makeblastdb \
-in my_proteins.fasta \
-dbtype prot \
-out my_db_prot \
-title "My Custom Protein Database"

파일 확장자가 .phr, .pin, .psq로 바뀝니다.

인덱싱 자체는 서열이 100MB 정도라면 몇 초, 인간 게놈 규모(3GB)라면 몇 분 걸립니다. 한 번 만들면 그 뒤로는 계속 재사용합니다.

3단계 — BLAST 검색 실행

bash
# 쿼리 서열이 query.fasta에 있다고 가정
blastn \
-query query.fasta \
-db my_db_nucl \
-out results.txt \
-outfmt 7 \
-evalue 1e-5 \
-num_threads 4

주요 옵션:

  • -outfmt 7: 결과를 탭 구분 표(주석 포함)로 출력. -outfmt 6은 주석 없는 순수 표. -outfmt 5는 XML.
  • -evalue 1e-5: E-value 임계. 유의한 매치만 뱉음.
  • -num_threads 4: 4 CPU 코어로 병렬화.
  • -max_target_seqs 100: 상위 100개 매치만 보고.

단백질 검색은 blastp, 번역 검색은 tblastn · blastx를 씁니다.

4단계 — 결과 파싱

-outfmt 6 표 형식의 각 열은 다음과 같습니다.

text
qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore

예시 결과 한 줄:

text
Contig_1  gene_BRCA1  99.5  1420  7  0  1  1420  100  1519  0.0  2620

파이썬으로 파싱하는 예시입니다.

python
import pandas as pd
cols = [
"qseqid", "sseqid", "pident", "length", "mismatch", "gapopen",
"qstart", "qend", "sstart", "send", "evalue", "bitscore"
]
df = pd.read_csv("results.txt", sep="\t", names=cols, comment="#")
# 유의한 매치만
sig = df[df["evalue"] < 1e-10].sort_values("evalue")
print(sig.head())

이 표를 pandas로 다루기 시작하면 실무의 문이 열립니다. 그룹별 집계, 유전자 어노테이션 병합, 시각화 다 자연스럽게 이어집니다.

5단계 — 자동화 파이프라인

여러 쿼리를 배치로 돌리는 스크립트 예시입니다.

bash
#!/bin/bash
# batch_blast.sh
QUERIES_DIR=queries/
RESULTS_DIR=results/
mkdir -p $RESULTS_DIR
for query_file in $QUERIES_DIR/*.fasta; do
name=$(basename "$query_file" .fasta)
blastn \
-query "$query_file" \
-db my_db_nucl \
-out "$RESULTS_DIR/${name}.tsv" \
-outfmt 6 \
-evalue 1e-5 \
-num_threads 4
echo "완료: $name"
done

이걸 나중에 Snakemake(F27) · Nextflow(F28) 같은 워크플로우 관리자로 감싸면 재현성 있는 파이프라인이 됩니다.

실습 — 자기 미생물 게놈 하나로

가장 재밌는 실습은 자기 관심 미생물 게놈으로 시작하는 것입니다.

  1. NCBI Genome에서 관심 미생물 게놈(예: E. coli K-12 MG1655)을 다운로드.
  2. makeblastdb로 인덱싱.
  3. 자기가 실험적으로 검증했거나 관심 있는 유전자 서열을 쿼리로 사용.
  4. E-value 임계를 조정하며 결과 관찰.

Colab에서도 가능합니다. !apt install ncbi-blast+ 한 줄이면 셋업입니다.

NCBI 공식 데이터베이스 다운로드

자기 데이터가 아닌 NCBI 공식 데이터베이스(nr, refseq_rna, swissprot 등)를 로컬로 가져올 수도 있습니다.

bash
# nr 다운로드 (매우 큰 파일 — 200GB+ 압축, 500GB+ 압축 해제)
update_blastdb.pl --decompress nr
# swissprot (작음 — 200MB)
update_blastdb.pl --decompress swissprot

update_blastdb.pl은 BLAST+ 설치에 포함된 헬퍼입니다. 병렬 다운로드와 무결성 검증까지 자동으로 해줍니다.

정기 갱신을 위해 cron으로 등재하면 항상 최신 데이터베이스를 로컬에 유지할 수 있습니다.

자주 만나는 실무 함정

  • 디스크 공간: nr 전체는 500GB+ 필요합니다. 사전에 확인.
  • 메모리 사용: 큰 데이터베이스로 검색 시 메모리가 부족할 수 있습니다. -mt_mode 1 (query 병렬) vs 기본(database 병렬) 옵션의 트레이드오프를 파악하세요.
  • 버전 호환성: 다른 버전의 BLAST+로 만든 데이터베이스가 최신 버전에서 안 열릴 수 있습니다. 데이터베이스와 실행 도구의 버전을 문서화합시다.
  • 쿼리 서열 오염: FASTA 헤더에 특수 문자나 공백이 있으면 파싱이 실패합니다. seqkit clean 같은 도구로 정리하고 시작합시다.
  • 저복잡도 필터: 기본으로 dust · seg 필터가 켜져 있습니다. 반복 서열이 많은 쿼리(전이인자 등)를 검색할 때는 -dust no로 끕니다.

CS 매핑

  • 인덱스 사전 계산 vs 실시간 검색: makeblastdb가 하는 일이 정확히 데이터베이스 인덱싱의 CS 원리입니다. 사전 계산의 대가로 검색이 빨라집니다.
  • 로컬 파일시스템 vs 원격 API: 로컬 BLAST는 파일시스템 I/O에 최적화됩니다. NCBI 웹은 네트워크 라운드트립에 최적화. 서로 다른 트레이드오프.
  • 배치 vs 대화형: 로컬 BLAST가 자연스럽게 배치 처리에 맞습니다. 워크플로우 관리자로 감싸기 쉽고, 재현성 있는 파이프라인의 뿌리입니다.

다음 편으로 이어지는 갈래

  • 다음 편 (M13): 접미사 트리 · 배열 — BLAST 인덱스보다 정교한 자료구조.
  • 두 편 뒤 (M14): BWT — BWA · Bowtie2가 사용하는 압축 인덱스.
  • 세 편 뒤 (M15): FM-index — BWT + 랭크/셀렉트로 완성되는 초고속 매핑 자료구조.
  • 다섯 편 뒤 (M17): DIAMOND — BLAST의 100배 빠른 대안.
  • 스물다섯 편 뒤 (F27): Snakemake — 배치 BLAST를 재현성 있는 파이프라인으로.

더 깊게 파고 싶다면

본문은 BPD가 자체 재구성한 서술입니다. 심화는 아래로.

  • NCBI HandbookChapter 16: BLAST+ User Manual. 실무 옵션의 정통 참고.
  • NCBI TrainingStandalone BLAST Setup (자막 완비). 설치 · 검색 · 파싱을 30분 안에.
  • EMBL-EBI TrainingSequence Similarity Searches. BLAST의 실무 응용.
  • 참고 도구: Biopython (Bio.Blast.NCBIWWW.qblast + Bio.Blast.NCBIXML) — 웹 BLAST를 파이썬에서 조작. 프로토타입에 좋음.
  • 참고 컨테이너: ncbi/blast Docker 이미지. 컨테이너 안에서 재현성 있게 실행.

로컬 BLAST를 세팅하고 자기 관심 서열로 몇 번 실행해보면, NCBI 웹의 답답함이 완전히 사라집니다. 이 편의 정착이 M12 이후 편에서 등장할 매핑 · 어셈블리 · 변이 검출 파이프라인의 기반이 됩니다.