# 02. 라이브러리에서 FASTQ까지

> paired-end 방식으로 cDNA fragment의 양 끝을 읽고, Illumina SBS가 염기서열과 Phred 품질 점수를 FASTQ에 기록하는 과정을 설명한다.

cDNA 라이브러리를 시퀀서에 넣으면 **염기서열과 글자별 신뢰도**가 담긴 FASTQ 파일이 나옵니다. 이 수업은 fragment 하나가 FASTQ의 read 두 개로 바뀌는 과정만 따라갑니다.

> **이 수업의 질문**: 시퀀서는 cDNA fragment를 어떻게 읽고, 얼마나 확실히 읽었는지 어떻게 기록하는가?

대규모 병렬 작업이 입력 레코드마다 결과와 실행 메타데이터를 남기는 장면을 떠올리면 전체 구조가 보입니다. 시퀀서는 수백만 개의 fragment를 동시에 처리하고, 각 fragment에서 읽은 문자열뿐 아니라 **물리적 주소와 글자별 신뢰도**도 함께 직렬화합니다.

| 시스템 관점 | 시퀀싱에서 대응하는 것 |
| --- | --- |
| 작업 단위 | flow cell 위의 cluster 하나 |
| 반복 루프 | 한 cycle마다 염기 하나 판독 |
| 결과 데이터 | A·C·G·T·N 문자열 |
| 관측 메타데이터 | cluster 주소, 염기별 Phred 점수 |
| 출력 형식 | FASTQ 레코드 |

## 1. fragment의 양 끝을 읽는다

길이가 500 bp인 fragment를 양 끝에서 100 bp씩 읽는다고 해봅시다. 장비는 앞쪽 100 bp와 뒤쪽 100 bp를 읽고, 가운데 300 bp는 읽지 않습니다.

한 fragment의 양 끝을 각각 읽는 방식이 **paired-end sequencing**입니다. 두 read는 같은 fragment에서 왔다는 ID를 공유하고, 앞쪽은 R1, 뒤쪽은 R2 파일에 저장됩니다.

두 파일은 독립적인 로그가 아니라 같은 작업에서 나온 짝입니다. 배열의 같은 인덱스에 있는 R1과 R2 레코드가 한 fragment의 양 끝을 나타냅니다. 한쪽 파일의 레코드만 삭제하거나 순서를 바꾸면 이 관계가 깨집니다.

read 길이는 원래 mRNA 길이가 아니라 장비가 fragment 끝에서 실제로 읽은 길이입니다. 보통 한쪽 끝에서 100~150 bp를 읽습니다.

paired-end가 한 fragment의 양 끝을 어떻게 읽는지 짧은 애니메이션으로 보면 직관적입니다 (Simple Science, 영어):

<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin:1rem 0;border-radius:8px;">
  <iframe style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;" src="https://www.youtube-nocookie.com/embed/0vqajoP08Jg" title="NGS: How does paired-end sequencing work? (Simple Science)" loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>


## 2. Flow cell에서 동시에 읽는다

시퀀서는 fragment 하나를 손에 들고 차례로 읽지 않습니다. 수백만 개의 fragment를 **flow cell**이라는 유리 칩 표면에 붙이고 같은 사이클에 함께 촬영합니다.

fragment 한 분자가 내는 형광은 카메라가 구분하기에 너무 약합니다. 그래서 표면에 붙은 fragment를 그 자리에서 수천 개로 복제해 같은 서열의 밝은 점을 만듭니다. 이 점이 **cluster**입니다. paired-end 방식에서는 cluster 하나에 붙은 library fragment 하나에서 R1과 R2가 만들어집니다.

Flow cell은 시약이 흐르는 독립 채널인 **lane**으로 나뉩니다. 카메라는 lane 전체를 한 장에 담지 않고 작은 촬영 구획인 **tile**로 나눠 찍습니다. 아래 위젯에서 한 fragment가 놓인 물리적 주소까지 단계별로 들어가 보세요.



FASTQ 헤더의 `C5GAPACXX:4:1101:2723:1997` 같은 문자열은 이 주소를 기록합니다.

| 헤더 조각 | 가리키는 위치 |
| --- | --- |
| `C5GAPACXX` | flow cell ID |
| `4` | lane 번호 |
| `1101` | tile 번호 |
| `2723:1997` | tile 안 cluster의 x:y 좌표 |

한 lane에는 여러 샘플을 함께 넣을 수도 있습니다. 샘플마다 고유한 **index 서열**을 붙여 섞은 뒤, 판독이 끝나면 index를 기준으로 FASTQ를 다시 나눕니다. 이 과정을 multiplexing과 demultiplexing이라고 합니다. 우리가 받는 샘플별 FASTQ는 보통 분리가 끝난 결과입니다.

분산 작업의 결과를 `sample_id`로 다시 파티셔닝하는 것과 같은 구조입니다. 다만 index 서열도 장비가 실제로 읽는 짧은 DNA이므로 판독 오류가 생길 수 있고, 지나치게 비슷한 index를 쓰면 레코드가 잘못된 샘플로 배정될 수 있습니다.

## 3. 형광 신호에서 염기 하나를 고른다

fragment의 첫 위치에서 T 신호만 강하게 빛난다고 해봅시다. 장비는 첫 글자를 T로 기록합니다. 다음 위치에서 A와 C가 비슷하게 빛나면 하나를 고르더라도 신뢰도는 낮게 기록합니다.

Illumina 장비는 염기를 하나 붙이고 형광을 촬영하는 과정을 반복합니다. 합성하면서 읽기 때문에 이 방식을 **SBS(sequencing by synthesis)** 라고 합니다.

기계 안에서 실제로 어떻게 동작하는지는 Illumina 공식 애니메이션으로 보면 한결 명확합니다 (영어):

<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin:1rem 0;border-radius:8px;">
  <iframe style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;" src="https://www.youtube-nocookie.com/embed/fCd6B5HRaZ8" title="Overview of Illumina Sequencing by Synthesis Workflow (Illumina)" loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>

> **형광 촬영 → 가장 강한 염기 선택 → 선택이 틀릴 확률 기록**

형광에서 A·C·G·T 중 하나를 고르는 과정이 **베이스 콜링(base calling)** 입니다. 어느 염기도 고르기 어려우면 `N`으로 기록합니다.

### 1,000개를 읽어 1개 틀릴 확률

**Phred 품질 점수 Q**는 베이스 콜링이 틀렸을 확률을 나타냅니다. Q30은 같은 조건으로 염기 1,000개를 읽을 때 평균적으로 약 1개를 틀릴 확률입니다.

| Phred Q | 오류 확률 | 정확도 |
| --- | --- | --- |
| Q20 | 1/100 | 99% |
| **Q30** | **1/1000** | **99.9%** |
| Q40 | 1/10000 | 99.99% |

Q값이 10 오를 때 오류 확률이 왜 10분의 1이 되는지와 로그 공식은 [확률과 Phred 점수](/reference/probability-and-phred/)에서 설명합니다.

FASTQ는 Q값을 ASCII 문자로 저장합니다. 염기 하나마다 품질 점수 하나가 대응하므로 서열과 품질 문자열의 길이는 같습니다.

FASTQ 레코드는 다음처럼 네 줄짜리 구조를 가집니다.

```text
@read42/1
TACGTTAG
+
IIIII5II
```

두 번째 줄의 염기 8개와 네 번째 줄의 품질 문자 8개가 위치별로 대응합니다. 즉 `sequence[i]`를 읽을 때 `quality[i]`를 함께 확인할 수 있는 병렬 배열입니다. 헤더는 레코드 ID와 장비 주소를 담습니다.

실제 paired-end 파일에서 네 줄 레코드와 품질 분포를 확인하는 과정은 [RNA-seq 실습의 raw FASTQ 점검 단계](/practice/rna-seq-from-fastq/#3-1-raw-fastq-구조와-품질-확인)에서 이어집니다.

PacBio와 Oxford Nanopore처럼 긴 read를 만드는 장비도 있습니다. 이 노트는 짧은 paired-end read를 만드는 Illumina 장비를 기준으로 설명합니다.


## 정리

시퀀서는 fragment의 양 끝을 여러 사이클에 걸쳐 읽습니다. 매 사이클마다 형광 신호에서 염기를 하나 고르고, 그 선택이 틀릴 확률을 Phred 점수로 계산합니다.

> **cDNA fragment → 형광 촬영과 베이스 콜링 반복 → 염기서열 + 품질 점수 → FASTQ**

다음 [FASTQ 품질 확인과 트리밍](/lessons/rna-seq-to-matrix/)에서는 FASTQ를 받은 뒤 품질을 확인하고 정렬에 쓸 read를 준비합니다.

---

### 출처

- 레퍼런스 게놈 ALT/HLA/decoy 제거 방식: [GTEx / TOPMed RNA-seq pipeline](https://github.com/broadinstitute/gtex-pipeline/blob/master/TOPMed_RNAseq_pipeline.md)
- 정상 조직 발현 레퍼런스(GTEx): [GTEx Portal: bulk tissue expression](https://gtexportal.org/home/downloads/adult-gtex/bulk_tissue_expression) · [Nature Genetics 2013](https://www.nature.com/articles/ng.2653)
- 암 발현·유전체 레퍼런스(PCAWG): [Pan-cancer analysis of whole genomes, *Nature* 2020](https://www.nature.com/articles/s41586-020-1969-6) · [ICGC/ARGO 데이터 접근](https://docs.icgc-argo.org/docs/data-access/icgc-25k-data)
- Sid 공개 발현 뷰어: [osteosarc.com/rnaseq](https://osteosarc.com/rnaseq/)