💡 핵심 인사이트
길쌈 코드는 해밍 코드처럼 데이터를 특정 크기의 블록(Block) 단위로 자르지 않고, 물 흐르듯 끝없이 이어지는 연속적인 비트 스트림(Stream) 자체에 꼬리를 물듯 과거의 상태(기억)를 엮어서 패리티를 생성하는 전진 오류 수정(FEC) 기법입니다.
이를 해독하기 위해 모든 경우의 수(트리) 중 가장 그럴싸한 생존 경로를 찾아내는 **'비터비(Viterbi) 알고리즘'**이 세트로 사용됩니다.
Ⅰ. 블록 코드(Block Code)와의 차이점
- 블록 코드 (해밍, RS, BCH):
- 데이터를 고정된 크기(예: 8비트)의 도마 위에 올려놓고 무를 썰듯 텅텅 자릅니다. 그리고 그 8비트 덩어리 뒤에 3비트의 힌트를 붙입니다. 이전 덩어리와 다음 덩어리는 서로 아무런 연관이 없습니다.
- 길쌈 코드 (Convolutional Code):
- 도마가 아니라, **'과거의 기억을 간직한 미끄럼틀(Shift Register)'**에 데이터를 1비트씩 연속해서 집어넣습니다.
- 지금 들어간 1비트가 출력될 때, 그 1비트만 쓰이는 게 아니라 방금 전, 2초 전, 3초 전에 미끄럼틀을 지나갔던 과거의 비트들과 서로 '길쌈(베 짜기, 얽힘)'되어서 완전히 새로운 여러 개의 비트로 뻥튀기되어 출력됩니다.
Ⅱ. 비터비(Viterbi) 알고리즘의 해독 마법
송신기가 데이터를 실타래처럼 엮어서 꼬아버렸으니, 수신기는 이걸 어떻게 풀까요? 우주 공간을 날아오며 에러가 섞여 들어온 이 난해한 실타래를 풀기 위해 고안된 천재적인 해독법이 비터비(Viterbi) 알고리즘입니다.
트렐리스 도도(Trellis Diagram)와 최적 경로 탐색
- 송신기가 데이터를 꼴 때 나올 수 있는 모든 경우의 수를 그리면 엄청나게 복잡한 나뭇가지(트리) 혹은 그물망(Trellis) 모양이 됩니다.
- 수신기는 도착한 찌그러진 데이터를 들고 이 그물망의 맨 앞에서부터 출발합니다.
- 갈림길이 나올 때마다, **"내가 지금 받은 쓰레기 데이터와 가장 비슷하게 생긴(해밍 거리가 가장 짧은) 길(생존 경로, Survivor Path)"**이 어디인지 확률을 계산하며 따라갑니다.
- 이 짓을 끝까지 반복하여 가장 확률이 높은 단 하나의 최적 경로를 찾아내면, 그것이 바로 **"송신기가 원래 보냈던 진짜 데이터!"**라고 100% 확신하며 에러를 고쳐냅니다.
Ⅲ. 길쌈 코드의 한계와 위상
비터비 알고리즘은 20세기 디지털 통신, 위성 통신, 초기 2G/3G 휴대폰의 절대적인 표준 에러 정정 코드였습니다.
치명적 한계 (에러 전파):
- 과거의 기억을 엮어서 만든다는 구조적 특성 때문에, 만약 비터비 알고리즘이 중간에 한 번 길을 잘못 들면(오진), 그 뒤에 줄줄이 나오는 데이터까지 전부 연쇄적으로 틀리게 해석해 버리는 '에러 전파(Error Propagation)' 현상이 발생합니다.
- 이 한계를 극복하기 위해 블록 코드(RS 코드)와 섞어 쓰다가, 현대에는 터보 코드로 진화하게 됩니다.
📢 섹션 요약 비유: 블록 코드가 글자를 한 글자씩 또박또박 끊어서 적고 옆에 주석을 다는 **'인쇄체'**라면, 길쌈 코드는 펜을 떼지 않고 앞글자의 꼬리가 뒷글자의 머리로 이어지는 **'연속된 필기체(흘림체)'**입니다. 글씨가 비에 젖어 뭉개져도(에러), 셜록 홈즈(비터비 알고리즘)는 그 필기체의 부드러운 연결 궤적(Trellis)을 유추하여 원래 무슨 단어였는지 기가 막히게 역추적해 냅니다.