# 04. RNA read를 게놈에 정렬하기

> 짧은 RNA-seq read의 원래 게놈 위치를 찾고, 스플라이싱 때문에 splice-aware aligner가 필요한 이유를 설명한다.

정리된 FASTQ에도 read가 **어느 유전자에서 왔는지**는 적혀 있지 않습니다. 레퍼런스 게놈에서 원래 위치를 찾아야 유전자별로 셀 수 있습니다. 이 수업의 출력은 **정렬된 BAM**입니다.

> **이 수업의 질문**: 짧은 RNA read를 게놈의 올바른 위치에 어떻게 되돌려 놓는가?

코드 조각만 있고 어느 저장소의 몇 번째 줄에서 복사됐는지 모르는 상황을 생각해 봅시다. 전체 코드베이스를 검색해 가장 잘 맞는 위치를 찾고, 파일과 줄 번호를 붙이면 출처를 추적할 수 있습니다. 정렬도 같은 형태의 **검색과 주소 부여** 작업입니다.

| 입력 | 검색 기준 | 처리 | 출력 |
| --- | --- | --- | --- |
| FASTQ의 짧은 read | 레퍼런스 게놈 + GTF | 후보 위치 검색, 가장 맞는 위치 선택 | 좌표와 신뢰도가 붙은 BAM |

## 1. 정렬: 짧은 read의 원래 위치 찾기

정렬은 FASTQ의 각 read를 레퍼런스 게놈 위에 되돌려 놓는 과정입니다. RNA-seq에서는 성숙 mRNA의 인트론이 이미 제거돼 있어, read 하나가 게놈에서 멀리 떨어진 두 엑손에 걸칠 수 있습니다. 그래서 read를 나누어 붙일 수 있는 **splice-aware aligner**가 필요합니다.

예를 들어 read가 `EXON1`의 끝과 `EXON2`의 시작을 이어 붙인 문자열이라고 해봅시다. 게놈에는 두 구간 사이에 긴 인트론이 있으므로 단순한 부분 문자열 검색은 실패합니다.

```text
read:    ...ACCTG | GAACT...
genome:  ...ACCTG | <긴 intron> | GAACT...
result:  앞부분은 exon 1, 뒷부분은 exon 2에 나누어 정렬
```

splice-aware aligner는 검색 중간의 큰 간격을 허용하고, 알려진 엑손 경계와 새 접합 후보를 이용해 두 조각이 하나의 read였음을 기록합니다. 개발자 관점에서는 여러 파일에 걸친 소스맵을 만드는 것과 구조가 비슷하지만, 실제 후보는 반복 서열과 염기 판독 오류 때문에 하나로 정해지지 않을 수도 있습니다.

![splice-aware 정렬 도식: pre-mRNA에서 인트론이 제거돼 mRNA가 되고, 거기서 나온 short read가 두 엑손에 걸쳐 split 정렬됨](/images/lessons/rna-seq-pipeline/alignment-splice.png)

*성숙 mRNA에서 나온 read는 인트론을 사이에 둔 두 엑손에 걸칠 수 있다. STAR와 HISAT2 같은 도구는 이 read를 나누어 올바른 위치에 정렬한다.*

대표 도구로 STAR와 HISAT2가 있습니다. 중요한 것은 도구 이름보다 **같은 레퍼런스 게놈과 GTF 버전을 사용하고, 한 위치에 확실히 붙은 read와 여러 위치에 모호하게 붙은 read를 구분하는 것**입니다. 코드와 소스맵의 버전이 다르면 주소가 어긋나듯, 게놈과 GTF 버전이 맞지 않으면 좌표와 유전자 경계가 어긋납니다.

STAR 명령을 실행하고 `Log.final.out`, genome BAM과 transcriptome BAM을 함께 점검하는 과정은 [RNA-seq 실습의 정렬 단계](/practice/rna-seq-from-fastq/#3-3-star로-게놈과-전사체에-정렬)에서 확인할 수 있습니다.

> STAR·HISAT2의 차이, 인덱스 원리, multi-mapping과 결과 판독은 [RNA-seq aligner 레퍼런스](/reference/aligners/)에서 확인하세요.


## 정리

RNA read는 인트론이 제거된 성숙 RNA에서 나왔기 때문에 게놈의 두 엑손에 나뉘어 붙을 수 있습니다. STAR와 HISAT2 같은 splice-aware aligner가 이 간격을 처리합니다.

> **정렬용 FASTQ + 레퍼런스 게놈·GTF → splice-aware 정렬 → BAM**

다음 [read를 발현량 행렬로 바꾸기](/lessons/rna-seq-quantification/)에서는 BAM의 read를 유전자별 발현량으로 바꿉니다.