왜 RNA-seq은 다른 정렬기를 쓰나요
DNA 리드는 참조 게놈에 연속으로 붙습니다. 그런데 RNA는 mRNA로 성숙하면서 인트론이 제거되어 있습니다. 그래서 RNA 리드를 참조 게놈에 정렬하려면 리드가 두 조각으로 나뉘어 서로 다른 엑손에 붙어야 하는 상황이 늘 벌어집니다. 사이의 인트론 구간은 참조에서는 존재하지만 리드에서는 통째로 빠져 있는 거죠.
이 "gap이 수백~수만 bp짜리인 정렬"을 BWA-MEM은 잘 처리하지 못합니다. BWA-MEM의 아핀 갭 페널티는 갭 길이에 로그 페널티만 붙어 있어서 인트론 크기 전형(200bp ~ 100kbp)을 다루기에 부적합합니다. 그래서 RNA-seq 전용 정렬기 — STAR와 HISAT2 — 가 필요합니다.
스플라이스 정션이란 무엇인가요
한 엑손의 3′ 끝과 다음 엑손의 5′ 시작이 이어붙는 지점을 **스플라이스 정션(splice junction)**이라고 부릅니다.
게놈: ...[엑손1==========]--------인트론(2kb)--------[엑손2==========]...
리드: ACGTCC | 리드가 정션을 가로지릅니다 | AATCGA리드가 이 정션을 가로지르면, 리드는 앞부분(엑손1)에 100bp가 붙고 뒷부분(엑손2)에 50bp가 붙는 식으로 쪼개져 정렬됩니다. 사이의 CIGAR에는 100M2000N50M 처럼 N (skipped region) 태그가 들어갑니다. 이 N이 스플라이스 정션의 흔적입니다.
정션 검출이 왜 어려운가는 세 가지입니다.
- 정션 위치를 미리 다 알 수 없음: GENCODE에 등록된 정션 외에도 새로운(novel) 정션이 있음.
- 인트론 길이가 극단적으로 넓음: 20bp에서 1Mbp까지 자연스럽게 나타남.
- 정션 근처가 짧음: 정션 반대편 엑손에 리드의 몇 bp만 걸리는 경우 정렬 신뢰도가 낮아짐.
STAR와 HISAT2는 이 세 문제를 다른 방식으로 해결합니다.
STAR — 큰 인덱스, 강력한 정확도
Alex Dobin이 2013년에 발표한 STAR는 접미사 배열(SA) 검색 + 스플라이스 정션 확장 전략을 씁니다. 정렬 원리를 두 문장으로 요약하면 이렇습니다.
- 리드에서 게놈에 완전히 붙는 최대 연속 구간(MMP, Maximum Mappable Prefix)을 찾습니다.
- 리드의 남은 조각을 다른 위치에서 찾아내어, 그 사이 간격이 인트론 후보이면 정션으로 확정.
이 접근이 좋은 이유는 정션 정보를 GTF 파일에서 미리 로드하지 않아도 데노보로 정션을 찾을 수 있다는 점입니다.
인덱스와 메모리 요구
STAR의 대가는 큰 인덱스입니다. 인간 게놈이면 약 30GB RAM의 인덱스를 통째로 메모리에 올려야 합니다. 이게 STAR가 클라우드에서 비싼 이유입니다. Colab 무료 티어(12GB)에서는 못 돕니다.
인덱스 만들기:
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-패스 모드
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입니다.
기본 실행
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에서 아래 명령으로 뽑습니다.
hisat2_extract_splice_sites.py gencode.v44.annotation.gtf > gencode_ss.tsvSTAR 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는 이렇게 판단합니다.
- 앞 90bp의 MMP: chr7:100-190에 확정.
- 나머지 60bp를 참조의 다른 위치에서 재검색.
- 60bp가 chr7:2190-2250에 붙음을 발견.
- 사이 간격 2000bp = 인트론 크기 후보 (인트론 길이 분포 100bp~1Mbp에 부합).
- 정션 확정: chr7:190 → chr7:2190.
- CIGAR에
90M2000N60M기록.
이 논리가 STAR가 "정션 정보 없이도" 데노보로 정션을 찾을 수 있는 이유입니다. 2-패스 모드는 이 데노보 정션들을 모아서 재정렬에 재활용합니다.
GTF와 GENCODE — 정션의 참조 사전
RNA-seq 정렬 품질은 GTF 파일 품질에 크게 의존합니다.
- GENCODE (https://www.gencodegenes.org/): 인간·마우스 표준. 매년 업데이트.
- Ensembl (https://www.ensembl.org/): GENCODE와 대체로 같지만 다른 종 지원.
- RefSeq (NCBI): 임상 리포트 관습.
버전 관리가 중요합니다. GENCODE v44와 v46 사이에도 정션 카탈로그가 변합니다. 프로젝트 시작 시 GTF 버전을 고정해서 문서화해두면 뒤에 재현 검증이 편해집니다.
Colab에서 HISAT2로 소형 실습
인간 전체 게놈은 8GB라도 무거우니, 예제로 인간 22번 염색체(약 50MB)만으로 인덱스를 만들어봅시다.
!wget -q https://hgdownload.soe.ucsc.edu/goldenPath/hg38/chromosomes/chr22.fa.gz!gunzip chr22.fa.gz!hisat2-build chr22.fa chr22_hisat2!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.samflagstat 결과에서 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을 실무처럼 다뤄봅시다.