← 모든 글

해밍 코드: 컴퓨터가 스스로 오류를 잡아내는 방법

데이터는 취약합니다. 우주선이 RAM에서 약간 뒤집힙니다. 전기적 잡음은 신호를 손상시킵니다. 긁히면 디스크가 손상됩니다. 단일 비트 반전으로 인해 시스템이 충돌하거나 파일이 손상될 수 있는 세상에서 컴퓨터는 어떻게 계속 작동합니까?

그 대답은 컴퓨터 과학에서 가장 우아한 아이디어 중 하나인 오류 수정 코드에 있습니다.

주요 내용

  • 해밍 코드는 전략적 중복성을 추가합니다 — 2의 거듭제곱 위치에 패리티 비트를 배치하면 코드가 자동으로 단일 비트 오류를 ​​감지하고 수정할 수 있습니다.
  • 신드롬은 오류를 직접 가리킵니다 — 모든 “1” 비트의 위치를 ​​XOR하면 단일 비트 오류의 정확한 위치가 밝혀져 재전송 없이 수정할 수 있습니다.
  • 7비트는 4비트의 데이터를 전달 — Hamming(7,4)은 단 3개의 추가 비트를 사용하여 4개의 데이터 비트를 보호하고 완전한 단일 오류 수정을 제공하는 동시에 57% 효율성을 달성합니다.
  • 이 수학은 어디에나 있습니다 — ECC RAM, QR 코드, 심층 우주 통신, RAID 스토리지 및 Bluetooth는 모두 Hamming의 통찰력을 변형하여 사용합니다.
  • 정보에는 근본적인 한계가 있습니다 — Claude Shannon은 가능한 오류 수정 범위에 대한 이론적 최대치가 있음을 증명했습니다. 해밍 코드는 이 한계에 우아하게 접근합니다.

왜 데이터를 두 번 보낼 수 없나요?

오류 수정에 대한 순진한 접근 방식은 반복입니다. 모든 비트를 세 번 보냅니다. 0000가 되고, 1111가 됩니다. 010를 받으면 대다수 투표에서는 아마도 0일 것이라고 말합니다.

이것은 효과가 있지만 낭비입니다. 4비트의 정보를 보내려면 12비트를 전송해야 합니다. 효율은 33%입니다.

1950년 Bell Labs에서 근무했던 Richard Hamming은 더 나은 질문을 했습니다. 오류를 감지하고 수정하는 데 필요한 최소 중복성은 무엇입니까?

그의 대답은 컴퓨팅을 영원히 바꿔 놓았습니다.


Hamming(7,4) 코드는 어떻게 작동하나요?

해밍의 통찰력은 기하학적이었습니다. 무차별 반복 대신 이중 임무를 수행할 수 있는 전략적 위치에 패리티 비트를 배치하십시오. 각 패리티 비트는 동시에 여러 데이터 위치를 확인합니다.

Position:   1   2   3   4   5   6   7
Binary:    001 010 011 100 101 110 111
Type:       P1  P2  D1  P4  D2  D3  D4
            ↑   ↑       ↑
         Parity bits at powers of 2

마법: 위치 1, 2, 4는 패리티 비트입니다. 각각은 이진 표현에 해당 비트가 설정된 모든 위치를 확인합니다.

  • P1(위치 1 = 001) 위치 1, 3, 5, 7(모두 홀수 위치)을 확인합니다.
  • P2(위치 2 = 010) 위치 2, 3, 6, 7을 확인합니다.
  • P4(위치 4 = 100) 위치 4, 5, 6, 7을 확인합니다.

오류가 발생하면 각 패리티 검사는 통과(0)되거나 실패(1)됩니다. 세 가지 결과는 오류 위치를 직접 가리키는 이진수를 형성합니다.


시도해 보세요: 대화형 해밍 시뮬레이터

4개의 데이터 비트를 입력하고 인코딩한 다음 비트를 클릭하여 오류를 시뮬레이션합니다. 증후군 감지를 통해 정확한 오류 위치를 찾아보세요.


증후군이 오류를 가리키는 이유는 무엇입니까?

이것이 아름다운 부분이다. 1이 포함된 모든 위치를 XOR하면 오류 위치를 직접 얻게 됩니다.

위치 5가 뒤집혔다고 가정해 보겠습니다. 바이너리의 위치 5는 101입니다. - 비트 0이 설정됨 → P1 검사 실패 - 비트 1이 설정되지 않음 → P2 확인 통과 - 비트 2가 설정됨 → P4 확인 실패

증후군 = 101 = 5. 오류는 위치 5에 있습니다.

우연이 아닙니다. Hamming은 이진 표현이 이 정보를 인코딩하도록 위치를 설계했습니다. 모든 위치에는 고유한 바이너리 서명이 있으며 패리티 검사는 해당 서명을 읽습니다.


두 가지 오류가 발생하면 어떻게 되나요?

Hamming(7,4)은 다음을 수행할 수 있습니다. - ✓ 단일 비트 오류를 ​​감지하고 수정합니다. - ✓ 2비트 오류를 ​​감지하지만 정확하지는 않습니다. - ✗ 3개 이상의 오류가 잘못 수정될 수 있습니다.

더 높은 신뢰성을 위해 SECDED(Single Error Correction, Double ErrorDetection)라는 확장 버전은 모든 위치를 포괄하는 패리티 비트를 하나 더 추가합니다. 컴퓨터의 ECC RAM이 이를 사용합니다.


현재 해밍 코드는 어디에 사용되나요?

애플리케이션 중요한 이유
ECC RAM 우주선은 매월 GB당 ~1비트를 뒤집습니다. ECC는 자동으로 이를 수정합니다.
QR 코드 QR 코드의 최대 30%가 손상되어도 여전히 올바르게 스캔될 수 있습니다.
딥 스페이스 Voyager의 데이터는 Reed-Solomon 코드(Hamming의 후손)를 사용하여 수십억 마일을 횡단합니다.
레이드 2 초기 RAID 시스템은 디스크 어레이 전반에 걸쳐 해밍 코드를 사용했습니다.
블루투스 순방향 오류 수정은 무선 간섭을 처리합니다.

정보 이론 연결

Hamming의 작업은 정보 이론에 관한 Claude Shannon의 기초 논문(1948)과 함께 이루어졌습니다. Shannon은 잡음이 많은 채널에 대해 어느 정도 효율성 손실을 감수한다면 임의로 낮은 오류 확률로 데이터를 전송할 수 있는 오류 수정 코드가 있음을 증명했습니다.

섀넌 한계는 이론적 최대값을 정의합니다. 해밍 코드는 도달하지 못하지만 실용적이고 빠르며 우아합니다. 터보 코드LDPC 코드와 같은 최신 코드는 Shannon의 한계에 가까워지고 4G/5G 셀룰러에서 위성 TV에 이르기까지 모든 것에 전력을 공급합니다.


통찰력 뒤에 숨은 통찰력

Hamming의 솔루션을 훌륭하게 만드는 것은 그것이 작동한다는 것뿐만 아니라 오류 위치가 구조에서 나타난다는 것입니다. 패리티 비트는 오류가 어디에 있는지 “알지” 못합니다. 그들의 관계는 그것을 암시적으로 인코딩합니다.

이것은 훌륭한 엔지니어링의 패턴입니다. 복잡한 감지 논리를 구축하지 마십시오. 답이 수학에서 벗어나도록 시스템을 설계하십시오.


자주 묻는 질문

What is a Hamming code?

A Hamming code is an error-correcting code that adds parity bits at specific positions (powers of 2) to detect and correct single-bit errors. The most common version, Hamming(7,4), encodes 4 data bits into 7 total bits, allowing automatic correction of any single-bit error without retransmission.

How does the syndrome identify the error position?

Each parity bit checks positions whose binary representation has a 1 in that parity bit's position. When a bit flips, the parity checks that cover that position fail. The combination of failed checks forms a binary number that equals the error position. This works because each position has a unique binary "signature."

Can Hamming codes fix multiple errors?

Standard Hamming(7,4) can only correct single-bit errors. It can detect (but not correct) two-bit errors. For higher reliability, SECDED (Single Error Correction, Double Error Detection) adds an extra parity bit, and more sophisticated codes like Reed-Solomon can correct multiple errors.

Why are parity bits placed at powers of 2?

Positions 1, 2, 4, 8, etc. correspond to single bits in binary (001, 010, 100, 1000). This ensures each parity bit checks a non-overlapping "slice" of the codeword. The data positions (3, 5, 6, 7...) have multiple bits set in binary, so they're checked by multiple parity bits, creating the redundancy needed for error correction.

Where is ECC RAM used and why does it matter?

ECC (Error-Correcting Code) RAM is used in servers, workstations, and mission-critical systems. Cosmic rays and electrical noise cause roughly one bit flip per gigabyte per month. For systems running 24/7 with large amounts of RAM, uncorrected errors would cause crashes and data corruption. ECC RAM uses SECDED codes to silently correct these errors.


간략한 요약

해밍 코드는 패리티 비트를 2의 거듭제곱으로 배치하여 최소한의 중복으로 오류 수정을 해결합니다. 여기서 각 비트는 위치의 특정 하위 집합을 확인합니다. 오류가 발생하면 실패한 패리티 검사는 오류를 직접 가리키는 이진수를 형성합니다. 즉, 복잡한 논리가 필요하지 않고 XOR 연산만 수행됩니다. 1950년 Richard Hamming이 발명한 이 우아한 접근 방식은 ECC 메모리부터 QR 코드, 우주 통신까지 모든 것의 기초로 남아 있습니다.


추가 자료

  • The Art of Doing Science and Engineering - Richard Hamming 저 — 이 게시물에 영감을 준 책
  • 커뮤니케이션의 수학적 이론 - Claude Shannon(1948) — 정보 이론의 기초
  • Interactive visualization of error-correcting codes — 3Blue1Brown의 뛰어난 영상

이 포스팅은 알고리즘과 시각적 직관이 만나는 Interactive Explorations 시리즈의 일부입니다. 여기에서 살펴본 것과 동일한 “구조로부터의 출현” 패턴은 세 가지 간단한 규칙이 중앙 집중식 제어 없이 무리를 생성하는 Reynolds’ boids algorithm와 글로벌 계획이 아닌 로컬 규칙을 통해 조정되는 multi-agent AI systems에 나타납니다.

관련 게시물

Boids to Agents: Flocking Rules for AI Systems

Craig Reynolds' 1986 boids algorithm produces flocking from three local rules. The same principles and failure modes app…

15 분 소요

GLSL for Builders: A Shader Lab You Can Actually Use

A practical GLSL playground with live controls for learning shader intuition fast. Presets, uniform manipulation, and ze…

16 분 소요

Signal Scoring Pipeline: Deterministic Knowledge Triage

A 733-line Python pipeline that scores notes across four dimensions and routes 7,700+ items deterministically. The algor…

19 분 소요