왜 이 편이 필요한가
M01에서 DNA는 네 글자짜리 문자열이라고 했습니다. 그런데 사실 DNA는 두 가닥의 문자열이 서로를 마주 보고 있는 이중 나선입니다. 한 가닥의 서열을 알면, 반대편 가닥의 서열은 자동으로 결정됩니다. 이것을 역상보(reverse complement) 라고 합니다.
이 편이 짧습니다. 계산 자체가 파이썬 한 줄이니까요. 하지만 실무에서 방향성(strand orientation)을 잘못 잡으면 어떤 사고가 나는지, 그리고 왜 정렬 도구들이 처음부터 두 가닥을 모두 검색하는지를 짚어봅시다.
규칙 — 두 개의 관례가 결합됩니다
관례 1: 상보(Complement) 짝짓기
Watson-Crick 짝짓기는 이렇게 결정됩니다.
A↔TC↔G
즉 한 가닥의 각 위치에 A가 있으면 반대 가닥의 같은 위치에 T가 있고, C가 있으면 G가 있습니다. 이건 물리화학적 · 수소 결합 기하의 결과입니다.
관례 2: 방향(Direction)
DNA 가닥은 화학적 방향성이 있습니다. 5′ 말단과 3′ 말단이 있고, 서열은 관례상 5′→3′ 로 씁니다. 두 가닥은 서로 반대 방향(antiparallel) 으로 결합합니다.
이 두 관례가 결합하면 "역상보"라는 조작이 나옵니다.
조작: 역상보 = 뒤집기 + 상보
한 가닥 X = x₁ x₂ … xₙ이 있으면, 반대 가닥은 Y = complement(xₙ) … complement(x₂) complement(x₁)입니다. 즉 뒤집고, 각 문자를 상보로 바꿉니다.
예시입니다.
X (5'→3'): A A A A C C C G G T
complement
X' T T T T G G G C C A
reverse
Y (5'→3'): A C C G G G T T T TX의 역상보가 Y입니다.
파이썬 한 줄로 구현
COMPLEMENT = str.maketrans("ACGT", "TGCA")
def reverse_complement(dna: str) -> str: return dna.upper().translate(COMPLEMENT)[::-1]
# Rosalind REVC 예시print(reverse_complement("AAAACCCGGT")) # ACCGGGTTTTstr.maketrans가 문자별 대응표를 만들고, translate가 그걸 이용해 한 번에 치환합니다. [::-1]은 파이썬의 뒤집기 슬라이스입니다. 두 연산이 한 줄에 들어갑니다.
Rosalind REVC는 이 한 함수로 통과입니다.
왜 실무에서 이걸 신경 써야 하는가
시나리오 1: 정렬 도구가 두 가닥을 모두 검색해야 하는 이유
당신이 시퀀싱한 리드는 어느 가닥에서 왔는지 시퀀서가 처음부터 알려주지 않습니다. Illumina의 페어드 엔드도 두 리드가 어느 가닥의 어느 위치에서 왔는지 사후에 판별합니다.
그래서 BWA, Bowtie2, minimap2 같은 정렬 도구는 참조 게놈에 대해 리드의 정방향(forward)과 역상보(reverse complement) 둘 다 검색합니다. 이게 계산량을 두 배로 만드는 주범 중 하나입니다. 그리고 역상보로 정렬된 리드는 SAM/BAM 파일의 FLAG 필드에 비트 0x10 이 세팅됩니다.
시나리오 2: RNA-seq에서 strand-specific vs unstranded
일반 RNA-seq 프로토콜은 어느 가닥에서 전사됐는지 정보를 잃습니다. 정방향과 역상보 모두 리드로 나옵니다. 그래서 유전자 발현 정량 시 어느 가닥의 유전자에 리드가 매핑되는지 애매해집니다.
Strand-specific RNA-seq 은 프로토콜 자체에서 가닥 정보를 보존합니다. 이런 데이터를 featureCounts -s 0(unstranded)으로 처리하면 안 됩니다. -s 1 또는 -s 2로 가닥을 명시해야 정확한 정량이 나옵니다. S03 · S18 편에서 다시 나옵니다.
시나리오 3: 프라이머 · gRNA 디자인
PCR 프라이머나 CRISPR gRNA를 디자인할 때는 정확히 어느 가닥의 어느 위치를 겨냥할지 결정해야 합니다. 역상보 계산 실수 = 실험 전체 실패. 실무에서는 프라이머 디자인 도구(Primer3 · IDT)가 자동으로 처리하지만, 손으로 디자인할 때는 실수하기 쉽습니다.
흥미로운 성질 — GC 비율은 대칭입니다
M04에서 다룬 GC 비율은 서열과 그 역상보에서 정확히 같습니다. 왜냐하면 각 위치의 G↔C, A↔T 교환은 GC 개수를 바꾸지 않기 때문입니다. 그래서 게놈 전체 GC 비율은 어느 가닥에서 재도 같습니다.
한편 AT 비율도 대칭이지만, AA 다이머 비율은 대칭이 아닙니다. 반대 가닥의 대응은 TT입니다. 이런 다이머 · 트리머 편향에서 종 특이성이 추가로 드러납니다. 정보를 더 짜내는 방향입니다.
실습 — 자기 유전자를 두 가닥으로 열어봅시다
NCBI에서 자신에게 익숙한 유전자(BRCA1, TP53 등) 하나를 FASTA로 다운받아 봅시다. 그 서열의 역상보를 계산해서, 원래 서열과 반대 가닥이 어떻게 다른지 눈으로 보면 감이 옵니다. Rosalind REVC 문제는 5분입니다.
# 완전 실습sequence = "GAAAAGCCAAAGGGAGAAATGGCCAT" # BRCA1 일부 (가짜 발췌)print(f"5'→3' 정방향: {sequence}")print(f"5'→3' 역방향: {reverse_complement(sequence)}")이 예시가 왜 헛갈리는가 하면, 두 개의 서열이 모두 "5'→3'로 표기"됐기 때문입니다. 물리적으로 두 가닥이 마주 보고 있을 때, 위 가닥을 5'→3'로 쓰면 아래 가닥은 자연히 3'→5' 방향으로 놓입니다. 위 예시에서 reverse_complement 결과는 그 아래 가닥을 다시 5'→3' 표기로 뒤집은 것입니다.
자주 만나는 실무 함정
- N 문자의 상보:
N의 상보는N입니다. 위 함수는 이걸 자동으로 처리하지 못합니다.COMPLEMENT를 확장하려면str.maketrans("ACGTN", "TGCAN")로 바꿉시다. - 소문자 서열: 저복잡도 마스킹된 서열은 소문자입니다. 위 함수는
dna.upper()로 정규화하지만, 원본의 케이스를 보존해야 하는 경우도 있습니다. 파이프라인 정책에 따라 다릅니다. - RNA와 혼용: RNA의 상보는 A↔U, C↔G입니다.
str.maketrans("ACGU", "UGCA")로 바꿔야 합니다. 원본이 DNA인지 RNA인지 반드시 확인합시다. - BED · GFF 파일의 strand 필드: 유전자 어노테이션 파일에는 각 특성이
+가닥인지-가닥인지 표시됩니다. 특성 서열을 뽑을 때-가닥이면 자동으로 역상보를 취해야 합니다.bedtools getfasta -s가 이걸 처리합니다.
CS 매핑
- 문자열 뒤집기 + 문자 매핑: 이 두 연산은 CS 첫 학기에 배우는 기본입니다. 그런데 두 연산의 순서가 결과를 바꾸지 않습니다(교환 가능). 왜인지 종이에 그려보면 좋습니다.
- 대칭 매핑: 상보 관계는 자기 역함수(involution)입니다.
complement(complement(x)) = x. 즉 상보 → 뒤집기 → 상보 → 뒤집기를 하면 원래 서열로 돌아옵니다. - 이중 인덱스: 유전체 브라우저와 정렬 도구는 사실상 참조 서열의 두 가닥에 대한 이중 인덱스를 관리합니다. 이건 저장 · 검색 효율의 관점에서 흥미로운 자료구조 문제입니다.
다음 편으로 이어지는 갈래
- 다음 편 (M06): Needleman-Wunsch — 두 서열의 정렬. 리드의 정방향과 역상보 모두 정렬을 시도한 후 더 좋은 것을 취합니다.
- 두 편 뒤 (M07): Smith-Waterman — 국소 정렬. 마찬가지로 양 가닥 모두 검색.
- 여덟 편 뒤 (M13~M15): BWT · FM-index — 참조 게놈의 이중 인덱스 자료구조.
- 열두 편 뒤 (M16): minimap2 — 롱리드도 정방향 · 역방향 모두 매핑.
더 깊게 파고 싶다면
본문은 BPD가 자체 재구성한 서술입니다. 심화는 아래로.
- Harvard STAT115 — Xiaole Shirley Liu 교수의 Week 1: Central Dogma and Strand Orientation (자막 완비, 자동 번역 우수). M01과 함께 봐도 좋습니다.
- NCBI Handbook — The Sequence Read Archive (SRA). 실제 리드 데이터의 방향성 정보가 어떻게 저장되는지 정리돼 있습니다.
- 참고 무료 웹북: Bioinformatics for Beginners Chapter 3. 역상보 계산의 원리 · 실무 예제.
- 참고 도구: Biopython (
Bio.Seq.reverse_complement) — 실무에서는 이 함수 하나면 됩니다.
Rosalind에서 REVC · GC · DNA를 이어서 풀어봅시다. 그리고 자기 관심 유전자로 정방향 · 역상보를 계산해서 두 가닥이 어떻게 마주 보고 있는지 감을 잡아봅시다. 다음 편 M06의 Needleman-Wunsch 정렬 실습에서 이 감이 필요해집니다.