BioPlayground

🧬
목록으로

STAR와 HISAT2: 스플라이스 정렬이 필요한 이유와 두 알고리즘의 선택 규칙

RNA-seq에는 왜 BWA-MEM 대신 STAR나 HISAT2가 필요할까요. 스플라이스 정션 검출 원리, 인덱스 크기 차이(30GB vs 8GB), 2-패스 학습이 무엇이며 어떤 프로젝트에 어떤 도구를 골라야 하는지 정리합니다.

중급
|
20
|
검증 완료 (2026-07-22)
RNA-seq alignmentspliced alignmentSTARHISAT2
진행률0/52 (0%)

왜 RNA-seq은 다른 정렬기를 쓰나요

DNA 리드는 참조 게놈에 연속으로 붙습니다. 그런데 RNA는 mRNA로 성숙하면서 인트론이 제거되어 있습니다. 그래서 RNA 리드를 참조 게놈에 정렬하려면 리드가 두 조각으로 나뉘어 서로 다른 엑손에 붙어야 하는 상황이 늘 벌어집니다. 사이의 인트론 구간은 참조에서는 존재하지만 리드에서는 통째로 빠져 있는 거죠.

이 "gap이 수백~수만 bp짜리인 정렬"을 BWA-MEM은 잘 처리하지 못합니다. BWA-MEM의 아핀 갭 페널티는 갭 길이에 로그 페널티만 붙어 있어서 인트론 크기 전형(200bp ~ 100kbp)을 다루기에 부적합합니다. 그래서 RNA-seq 전용 정렬기 — STAR와 HISAT2 — 가 필요합니다.

스플라이스 정션이란 무엇인가요

한 엑손의 3′ 끝과 다음 엑손의 5′ 시작이 이어붙는 지점을 **스플라이스 정션(splice junction)**이라고 부릅니다.

text
게놈:   ...[엑손1==========]--------인트론(2kb)--------[엑손2==========]...
리드:               ACGTCC | 리드가 정션을 가로지릅니다 | AATCGA

리드가 이 정션을 가로지르면, 리드는 앞부분(엑손1)에 100bp가 붙고 뒷부분(엑손2)에 50bp가 붙는 식으로 쪼개져 정렬됩니다. 사이의 CIGAR에는 100M2000N50M 처럼 N (skipped region) 태그가 들어갑니다. 이 N이 스플라이스 정션의 흔적입니다.

정션 검출이 왜 어려운가는 세 가지입니다.

  1. 정션 위치를 미리 다 알 수 없음: GENCODE에 등록된 정션 외에도 새로운(novel) 정션이 있음.
  2. 인트론 길이가 극단적으로 넓음: 20bp에서 1Mbp까지 자연스럽게 나타남.
  3. 정션 근처가 짧음: 정션 반대편 엑손에 리드의 몇 bp만 걸리는 경우 정렬 신뢰도가 낮아짐.

STAR와 HISAT2는 이 세 문제를 다른 방식으로 해결합니다.

STAR — 큰 인덱스, 강력한 정확도

Alex Dobin이 2013년에 발표한 STAR는 접미사 배열(SA) 검색 + 스플라이스 정션 확장 전략을 씁니다. 정렬 원리를 두 문장으로 요약하면 이렇습니다.

  1. 리드에서 게놈에 완전히 붙는 최대 연속 구간(MMP, Maximum Mappable Prefix)을 찾습니다.
  2. 리드의 남은 조각을 다른 위치에서 찾아내어, 그 사이 간격이 인트론 후보이면 정션으로 확정.

이 접근이 좋은 이유는 정션 정보를 GTF 파일에서 미리 로드하지 않아도 데노보로 정션을 찾을 수 있다는 점입니다.

인덱스와 메모리 요구

STAR의 대가는 큰 인덱스입니다. 인간 게놈이면 약 30GB RAM의 인덱스를 통째로 메모리에 올려야 합니다. 이게 STAR가 클라우드에서 비싼 이유입니다. Colab 무료 티어(12GB)에서는 못 돕니다.

인덱스 만들기:

bash
STAR --runMode genomeGenerate \
--genomeDir /data/star_index \
--genomeFastaFiles hg38.fa \
--sjdbGTFfile gencode.v44.annotation.gtf \
--sjdbOverhang 100 \
--runThreadN 16

--sjdbGTFfile로 GENCODE GTF를 넣어주면 알려진 정션 정보를 사전 로드해 첫 정렬 정확도가 크게 오릅니다. --sjdbOverhang은 리드 길이 - 1로 설정하는 게 관례 (150bp 리드면 100~149 사이 아무 값).

기본 실행 + 2-패스 모드

bash
STAR --runMode alignReads \
--genomeDir /data/star_index \
--readFilesIn clean_R1.fq.gz clean_R2.fq.gz \
--readFilesCommand zcat \
--outSAMtype BAM SortedByCoordinate \
--outSAMattrRGline ID:S1 SM:SAMPLE01 LB:lib1 PL:ILLUMINA \
--twopassMode Basic \
--runThreadN 16 \
--outFileNamePrefix SAMPLE01_

--twopassMode Basic이 STAR의 킬러 기능입니다. 원리는 이렇습니다.

  • 1차 패스: 게놈 + 알려진 정션(GTF)만으로 정렬. 이 과정에서 데노보 정션 후보를 수집.
  • 2차 패스: 1차에서 발견된 데노보 정션을 알려진 정션에 추가해 다시 정렬.

한 샘플만 봐도 새 정션을 학습해서 재정렬하니 novel isoform 검출 감도가 눈에 띄게 오릅니다. RNA-seq 신규 분석에 표준으로 씁니다.

HISAT2 — 작은 인덱스, 그래프 시대의 도구

HISAT2는 Ben Langmead와 Daehwan Kim이 발표한 그래프 기반 정렬기입니다. STAR의 30GB 인덱스가 부담스러운 상황을 정면 돌파했습니다.

인덱스가 왜 작은가

HISAT2는 계층적 FM-index (HISAT2 하위 이름 그대로) + 알려진 정션·변이를 그래프로 인코딩한 GFM(Graph FM-index)을 씁니다. 이 자료구조 덕분에 인간 게놈 + 알려진 변이/정션 인덱스가 약 8GB로 압축됩니다.

  • STAR: 30GB (게놈 원본에 가까움)
  • HISAT2: 8GB (그래프 압축)

Colab 무료 티어에서 돌릴 수 있는 유일한 RNA-seq 정렬기가 실질적으로 HISAT2입니다.

기본 실행

bash
hisat2-build hg38.fa hg38_hisat2 # 인덱스 생성
hisat2 -x hg38_hisat2 \
-1 clean_R1.fq.gz -2 clean_R2.fq.gz \
--rg-id S1 --rg SM:SAMPLE01 --rg LB:lib1 --rg PL:ILLUMINA \
--known-splicesite-infile gencode_ss.tsv \
-p 16 \
| samtools sort -@ 4 -o SAMPLE01.bam -

--known-splicesite-infile가 STAR의 --sjdbGTFfile에 대응하는 알려진 정션 입력 옵션. GTF에서 아래 명령으로 뽑습니다.

bash
hisat2_extract_splice_sites.py gencode.v44.annotation.gtf > gencode_ss.tsv

STAR vs HISAT2 — 실무 결정 규칙

상황추천이유
DGEA 표준 분석 (TCGA·GTEx 재현)STAR + --twopassMode정션 감도, 대부분의 논문 표준
RAM 8~16GB 환경 (Colab, 랩탑)HISAT2인덱스 8GB로 진입 가능
아이소폼 검출·splicing 정량(rMATS·SUPPA)STAR정션 검출 정확도가 결과 품질을 좌우
대량 배치 처리 (수백 샘플)HISAT2정렬 자체가 빠르고 RAM이 병목이 안 됨
후속 Salmon/kallisto 유사 정렬 사용별도 필요 없음정렬 없이 정량 (S17에서 다룸)

손 계산 — MMP가 실제로 하는 일

STAR의 MMP를 감으로 잡아봅시다. 리드가 150bp인데 처음 90bp는 chr7:100-190에 완벽히 붙고 나머지 60bp는 참조의 그 위치 바로 다음에 안 붙는다고 합시다.

STAR는 이렇게 판단합니다.

  1. 앞 90bp의 MMP: chr7:100-190에 확정.
  2. 나머지 60bp를 참조의 다른 위치에서 재검색.
  3. 60bp가 chr7:2190-2250에 붙음을 발견.
  4. 사이 간격 2000bp = 인트론 크기 후보 (인트론 길이 분포 100bp~1Mbp에 부합).
  5. 정션 확정: chr7:190 → chr7:2190.
  6. CIGAR에 90M2000N60M 기록.

이 논리가 STAR가 "정션 정보 없이도" 데노보로 정션을 찾을 수 있는 이유입니다. 2-패스 모드는 이 데노보 정션들을 모아서 재정렬에 재활용합니다.

GTF와 GENCODE — 정션의 참조 사전

RNA-seq 정렬 품질은 GTF 파일 품질에 크게 의존합니다.

버전 관리가 중요합니다. GENCODE v44와 v46 사이에도 정션 카탈로그가 변합니다. 프로젝트 시작 시 GTF 버전을 고정해서 문서화해두면 뒤에 재현 검증이 편해집니다.

Colab에서 HISAT2로 소형 실습

인간 전체 게놈은 8GB라도 무거우니, 예제로 인간 22번 염색체(약 50MB)만으로 인덱스를 만들어봅시다.

bash
!wget -q https://hgdownload.soe.ucsc.edu/goldenPath/hg38/chromosomes/chr22.fa.gz
!gunzip chr22.fa.gz
!hisat2-build chr22.fa chr22_hisat2
bash
!wget -q https://sra-pub-src-1.s3.amazonaws.com/SRR1039508/SRR1039508_1.fastq.gz -O r1.fq.gz
!hisat2 -x chr22_hisat2 -U r1.fq.gz -p 2 -S out.sam
!samtools flagstat out.sam

flagstat 결과에서 mapped 리드 비율을 볼 수 있습니다. 22번만 인덱싱했으니 대부분은 안 붙는 게 정상입니다.

CS 매핑

  • 접미사 배열 조회 (STAR): 문자열 접미사 정렬을 통한 정렬 위치 검색. DryBench 그래프 인덱스 편(graph-index-fundamentals) 참고.
  • 그래프 FM-index (HISAT2): 게놈 + 알려진 변이를 그래프로 인코딩하고 그 위에서 검색. 자료구조 압축과 그래프 검색의 결합.
  • 2-패스 학습: 1차 정렬에서 학습한 파라미터로 2차 정렬을 개선. ML에서의 self-training 아이디어가 정렬기에 들어온 사례.

마무리

BWA-MEM은 DNA를 연속으로 붙이고, STAR/HISAT2는 스플라이스 정션을 넘어서 붙입니다. 다음 편(S05)에서는 지금까지 만든 BAM 파일을 정리·인덱싱·CRAM 압축하는 samtools 세계로 들어갑니다. 이후 S06부터 GATK4 파이프라인이 시작되고, RNA-seq 정량은 S17~S21에서 이어집니다.

더 깊게 파고 싶다면

  • Dobin A. et al. (2013), STAR: ultrafast universal RNA-seq aligner. Bioinformatics 29:15. STAR 원 논문 — MMP·2-패스 원리가 자세합니다.
  • Kim D. et al. (2019), Graph-based genome alignment and genotyping with HISAT2 and HISAT-genotype. Nature Biotechnology 37:907. HISAT2의 그래프 FM-index.
  • Xiaole Shirley Liu Harvard STAT115 W4 — RNA-seq 정렬 강의. 자막 완비. 정렬 지표(unique/multi-mapper 비율)의 임상 해석이 좋습니다.
  • Broad Institute BroadE — RNA-seq alignment 유튜브 시리즈. STAR 옵션 튜닝의 실무 사례.
  • GENCODE Documentation (https://www.gencodegenes.org/human/): 정션 카탈로그의 원전.

Colab에서 HISAT2로 22번 염색체 정렬 한 번 돌려보면 스플라이스 정션의 감이 옵니다. 다음 편에서 samtools로 이 BAM을 실무처럼 다뤄봅시다.