얼마전 친구와 카레를 먹으러 간날 생긴 일이다. 카레를 먹던 친구는 나에게 물었다.
카카오톡도 통신과정에서 데이터가 1bit이라도 틀릴 수 있지 않나..?
모든 경우에서 100%란 없을 텐데 어떻게 데이터 신뢰성을 보장할 수 있나?
전산에 기본 지식이 있는 친구였기에 더 자세히 설명해주고 싶었지만, 못내 제대로 설명을 해주지 못한 점이 마음에 걸렸다.
게다가 그런 얘기를 들으니 무선 통신이라는 녀석이 더 신기하게 다가오는게 아닌가..! 그래서! 공부겸 정리겸 원리만 간단하게 나마 정리해두려 한다.

데이터 전송의 기본: 변조와 복조

데이터를 한 곳에서 다른 곳으로, 특히 무선으로 보내려면 몇 가지 단계를 거쳐야 한다. 가장 기본적인 원리는 보내려는 데이터(정보)전송 매체(채널) 에 적합한 신호 형태로 바꾸어 보내고(변조), 받은 쪽에서는 이 신호를 다시 원래 데이터로 복원하는(복조) 것이다.

1. 전송할 데이터

우리가 보내려는 데이터는 크게 아날로그(연속적인 값, 예: 예전 라디오 음성)와 디지털(이산적인 값, 예: 컴퓨터 파일, 카톡 메시지)로 나눌 수 있다. 현대 통신에서는 대부분의 정보가 디지털 데이터(0과 1의 조합) 형태로 처리된다.

2. 변조 (Modulation)

디지털 데이터(0과 1)는 그 자체로는 멀리 전송하기 어렵다. 특히 무선 환경에서는 더욱 그렇다. 변조는 이 디지털 데이터를 특정 주파수를 가진 반송파(Carrier Wave)에 실어 보내기 위한 과정이다. 즉, 데이터를 전송 매체(공기, 광케이블 등)의 특성에 맞는 전기적 신호 파형으로 변환하는 것이다.

디지털 변조 예시

위 그림처럼, ‘0’과 ‘1’이라는 디지털 데이터를 특정 규칙에 따라 아날로그 신호 파형의 진폭(Amplitude), 주파수(Frequency), 또는 위상(Phase)을 변화시키는 방식으로 표현한다. 대표적인 디지털 변조 방식으로는 다음과 같은 것들이 있다.

  • ASK (Amplitude Shift Keying): 진폭의 크고 작음으로 0과 1을 구분한다.
  • FSK (Frequency Shift Keying): 주파수의 높고 낮음으로 0과 1을 구분한다.
  • PSK (Phase Shift Keying): 위상의 변화(꺾임)로 0과 1을 구분한다. (위 그림 예시)

변조는 데이터를 전송 가능한 형태로 만들 뿐 아니라, 한정된 주파수 자원을 여러 사용자가 효율적으로 나누어 사용할 수 있게(다중 접속) 하는 역할도 한다.

3. 복조 (Demodulation)

수신 측에서는 변조된 신호를 받아 원래의 디지털 데이터(0과 1)를 복원해야 한다. 이 과정을 복조라고 하며, 기본적으로 변조의 역과정을 수행한다. 수신된 신호의 진폭, 주파수, 위상 변화를 감지하여 원래의 디지털 데이터 스트림을 알아낸다.

데이터 신뢰성 확보의 핵심: 오류 제어 (Error Control)

변조와 복조만으로는 친구가 질문했던 ‘데이터 신뢰성’ 문제를 해결할 수 없다. 현실의 통신 채널(특히 무선 채널)은 잡음(Noise), 간섭(Interference), 신호 감쇠(Attenuation) 등 다양한 요인으로 인해 전송 중인 신호에 오류가 발생할 가능성이 항상 존재한다. 1이 0으로 바뀌거나, 0이 1로 바뀌는 등의 오류가 생길 수 있다는 뜻이다.

이러한 오류를 극복하고 데이터의 정확성을 보장하기 위해 오류 제어 기술이 사용된다. 데이터 전송의 전체 과정을 좀 더 자세히 보면 다음과 같다. (송신 과정 기준)

원본 데이터 → 소스 코딩 → 채널 코딩 → 변조 → 전송

(수신 과정은 이 역순으로 진행된다: 수신 → 복조 → 채널 디코딩 → 소스 디코딩 → 복원된 데이터)

여기서 데이터 신뢰성과 직접적으로 관련된 단계는 채널 코딩(Channel Coding)이다.

채널 코딩 (Channel Coding) 이란?

채널 코딩은 전송할 원래 데이터에 의도적으로 추가 정보(잉여 비트, Redundancy)를 덧붙이는 과정이다. 이 추가 정보는 수신 측에서 데이터 전송 중 발생한 오류를 검출(Detection)하거나 심지어 정정(Correction)하는 데 사용된다.

잡음이 많은 환경에서 중요한 내용을 전달할 때, 우리가 같은 말을 여러 번 반복하거나 핵심 단어를 강조해서 말하는 것과 비슷하다고 생각할 수 있다. 채널 코딩은 이런 ‘반복’과 ‘강조’를 수학적으로 정교하게 설계하여, 오류가 발생하더라도 원래 정보를 복원할 수 있는 가능성을 높이는 기술이다.

채널 코딩 기법은 크게 오류 검출오류 정정으로 나눌 수 있다.

1. 오류 검출 (Error Detection) 기법

오류 검출은 수신된 데이터에 오류가 발생했는지 ‘알아채는’ 데 중점을 둔다. 오류가 검출되면, 보통 수신 측은 송신 측에 데이터 재전송을 요청한다 (ARQ: Automatic Repeat reQuest 방식).

  • 패리티 검사 (Parity Check): 가장 간단한 방법이다. 데이터 블록 끝에 1비트(패리티 비트)를 추가하여, 전체 비트 중 ‘1’의 개수가 항상 짝수(짝수 패리티) 또는 홀수(홀수 패리티)가 되도록 만든다. 수신 측에서 ‘1’의 개수를 세어 약속된 규칙(짝수/홀수)을 만족하지 않으면 오류가 발생했다고 판단한다.
    • 장점: 구현이 매우 간단하다.
    • 단점: 홀수 개의 비트 오류만 검출할 수 있다 (2개 비트 오류 등 짝수 개 오류는 검출 불가). 오류 정정은 불가능하다.
  • 체크섬 (Checksum): 데이터를 일정 크기의 블록으로 나누고, 각 블록의 값을 더한 후 그 합의 보수(complement) 등을 계산하여 데이터와 함께 보낸다. 수신 측에서 동일한 계산을 수행하여 결과가 일치하는지 확인한다. 패리티보다는 강력하지만, 여전히 일부 오류 패턴을 놓칠 수 있다.
  • CRC (Cyclic Redundancy Check, 순환 중복 검사): 현재 가장 널리 사용되는 강력한 오류 검출 기법 중 하나이다. 전송할 데이터를 특정 다항식(Polynomial)으로 나누어 그 나머지를 계산하고, 이 나머지 값(CRC 코드)을 데이터 뒤에 붙여 전송한다. 수신 측에서 받은 데이터와 CRC 코드를 이용해 동일한 다항식으로 나누어 나머지가 0인지 확인한다. 나머지가 0이 아니면 오류가 발생한 것으로 간주한다.
    • 장점: 하드웨어 구현이 용이하고, 특히 여러 비트가 연속적으로 깨지는 버스트 오류(Burst Error) 검출에 매우 효과적이다. 이더넷(LAN), 와이파이(Wi-Fi), 하드 디스크, 압축 파일(ZIP) 등 다양한 곳에서 사용된다.

2. 오류 정정 (Forward Error Correction, FEC) 기법

오류 정정은 수신 측에서 재전송 요청 없이 스스로 오류를 찾아 수정하는 것을 목표로 한다. 이를 위해 오류 검출 기법보다 더 많은 잉여 비트를 추가한다. 실시간 통신(전화, 화상 회의)이나 재전송이 어려운 환경(우주 통신)에서 필수적이다.

  • 해밍 코드 (Hamming Code): 비교적 간단한 FEC 코드 중 하나이다. 1비트 오류를 정정하고 2비트 오류를 검출할 수 있다. 메모리(RAM) 오류 검출 등에 사용되기도 했다.
  • 리드-솔로몬 코드 (Reed-Solomon Code): 여러 개의 비트가 묶인 심볼(Symbol) 단위로 오류를 정정하는 강력한 블록 코드이다. 특히 버스트 오류 정정에 효과적이어서 CD, DVD, QR 코드, 디지털 방송 등 다양한 분야에서 핵심적으로 사용된다.
  • 컨볼루션 코드 (Convolutional Code): 데이터 스트림을 처리하며 잉여 비트를 생성하는 방식으로, 비터비 알고리즘(Viterbi Algorithm) 등 효율적인 디코딩 방법과 함께 사용된다. 위성 통신, 이동 통신(GSM, CDMA) 등에 널리 사용되었다.
  • 터보 코드 (Turbo Code) / LDPC 코드 (Low-Density Parity-Check Code): 현대 통신의 핵심 기술로, 이론적 한계(섀넌 한계)에 근접하는 매우 뛰어난 오류 정정 성능을 보여준다. 3G, 4G LTE, 5G 이동 통신, Wi-Fi (802.11n 이상), 디지털 비디오 방송(DVB-S2) 등 고속/고신뢰 통신 시스템에 필수적으로 사용된다.

오류 제어의 트레이드오프: 오류 검출 및 정정 능력을 높이려면 더 많은 잉여 비트를 추가해야 한다. 이는 전체 전송 데이터 양을 늘리고, 실제 데이터 전송률(Throughput)을 감소시키는 결과를 낳는다. 따라서 통신 시스템 설계 시에는 채널 환경, 요구되는 신뢰도 수준, 허용 가능한 전송 속도 등을 고려하여 적절한 오류 제어 기법과 부호화율(원본 데이터 대비 전체 데이터 비율)을 선택하는 것이 중요하다.

결론: 신뢰성은 그냥 얻어지는 것이 아니다

다시 처음 질문으로 돌아가 보자. 카카오톡 메시지가 과연 1비트의 오류도 없이 전달될 수 있을까? 물리적인 전송 과정만 보면 오류 발생 가능성은 항상 존재한다. 하지만 우리가 일상에서 데이터 전송 오류를 거의 체감하지 못하는 이유는, 바로 앞에서 설명한 다양한 계층의 오류 제어 기술 덕분이다.

물리 계층(Physical Layer)에서의 채널 코딩(오류 검출 및 정정)뿐만 아니라, 그 상위 계층인 데이터 링크 계층(Data Link Layer)이나 전송 계층(Transport Layer, 예: TCP 프로토콜)에서도 CRC, 체크섬, 재전송 메커니즘 등을 통해 추가적인 오류 검사와 복구를 수행한다.

이처럼 여러 단계에 걸친 정교한 오류 제어 매커니즘이 있기 때문에, 우리는 잡음 많고 불안정한 통신 환경 속에서도 친구에게 보낸 카톡 메시지나 중요한 파일이 정확하게 전달될 것이라고 신뢰할 수 있는 것이다. 100% 완벽한 전송이란 물리적으로 불가능할지 몰라도, 현실적으로는 거의 100%에 가까운 신뢰도를 달성하도록 설계된 것이 현대의 통신 시스템이다.