패리티 비트와 해밍 코드 (Parity Bit and Hamming Code)
한눈에 보기
비트 오류를 다루는 패리티 비트와 해밍 코드의 원리를 정리한다. 오류 검출과 정정의 차이, 신드롬으로 오류 위치를 찾는 과정, ECC 메모리 등 실무 적용까지 다룬다.
최종 업데이트 2026.09.17
패리티 비트(parity bit)와 해밍 코드(Hamming code)는 데이터가 저장되거나 전송되는 과정에서 비트가 뒤집히는 오류를 다루기 위한 대표적인 기법이다. 패리티 비트는 1의 개수를 맞추는 비트 하나를 덧붙여 홀수 개 비트의 오류를 검출만 할 수 있고, 해밍 코드는 여러 개의 패리티 비트를 겹치게 배치해 1비트 오류의 위치까지 찾아 정정할 수 있다. 두 기법은 오류 검출(error detection)과 오류 정정(error correction)의 차이를 보여주는 가장 기본적인 사례로, ECC 메모리와 통신 프로토콜의 바탕이 된다.
오류는 왜 생기고 어떻게 다루는가
전송 선로의 잡음, 우주 방사선에 의한 메모리 비트 반전, 저장 매체의 열화 등으로 0이 1로, 1이 0으로 바뀌는 오류는 언제든 발생할 수 있다. 이를 다루는 전략은 두 갈래다. 오류 검출은 오류가 났다는 사실만 알아내고 재전송을 요청하는 방식으로, 재전송이 가능한 네트워크 통신에 적합하다. 오류 정정은 수신한 데이터만으로 오류를 스스로 고치는 방식으로, 재전송이 불가능하거나 비싼 메모리, 위성 통신, 저장장치에 적합하다. 어느 쪽이든 원리는 같다. 원본 데이터에 잉여 정보(redundancy)를 계산해 붙이고, 받는 쪽에서 다시 계산해 일치 여부를 확인하는 것이다.
패리티 비트의 원리와 한계
패리티 비트는 데이터의 1의 개수가 짝수 또는 홀수가 되도록 덧붙이는 1비트다. 짝수 패리티(even parity)는 패리티 비트를 포함한 전체 1의 개수를 짝수로, 홀수 패리티(odd parity)는 홀수로 맞춘다. 예를 들어 데이터 1011001은 1이 4개이므로 짝수 패리티에서는 0을 붙여 10110010으로 보낸다. 수신 측은 1의 개수를 세어 홀수가 나오면 오류가 발생했음을 안다.
한계는 명확하다. 첫째, 비트 2개가 동시에 뒤집히면 1의 개수의 짝홀이 유지되어 오류를 놓친다. 즉 홀수 개의 비트 오류만 검출한다. 둘째, 오류가 있다는 사실만 알 뿐 몇 번째 비트가 잘못되었는지는 모르므로 정정이 불가능하다. 그래서 패리티는 오류율이 낮고 재전송이 쉬운 환경, 예를 들어 과거의 직렬 통신이나 일부 메모리의 단순 검사에 쓰였고, 더 강한 검출이 필요한 네트워크에서는 순환 중복 검사(CRC, Cyclic Redundancy Check) 같은 기법이 쓰인다.
해밍 코드의 동작 방식
해밍 코드는 패리티 비트를 여러 개 두되, 각 패리티 비트가 담당하는 데이터 비트의 집합을 서로 겹치게 설계해 오류 위치를 알아내는 기법이다. 비트 위치를 1부터 번호 매기고, 2의 거듭제곱 위치(1, 2, 4, 8, ...)에 패리티 비트를 배치한다. 위치 번호를 이진수로 썼을 때 특정 자리가 1인 모든 위치를 그 자리의 패리티 비트가 담당한다. 예를 들어 1번 패리티는 위치 1, 3, 5, 7을, 2번 패리티는 위치 2, 3, 6, 7을 검사한다.
데이터 4비트에 패리티 3비트를 붙이는 해밍(7,4) 코드로 예를 들면, 수신 측은 각 패리티 그룹을 다시 검사해 실패한 그룹의 패리티 위치 번호를 모두 더한다. 이 합을 신드롬(syndrome)이라고 하며, 신드롬이 0이면 오류가 없고, 0이 아니면 그 값이 바로 오류가 난 비트의 위치다. 예컨대 1번과 4번 그룹이 실패했다면 5번 위치의 비트가 뒤집힌 것이므로 그 비트를 반전시켜 정정한다. 여기에 전체 패리티 비트 하나를 더 추가한 확장 해밍 코드는 1비트 오류는 정정하고 2비트 오류는 검출하는 SECDED(Single Error Correction, Double Error Detection) 능력을 갖는다.
패리티 비트와 해밍 코드 비교
| 구분 | 패리티 비트 | 해밍 코드 |
|---|---|---|
| 추가 비트 수 | 1비트 | 데이터 길이에 따라 여러 비트 (7,4 코드는 3비트) |
| 검출 능력 | 홀수 개 비트 오류 검출 | 1비트 오류 검출, 확장형은 2비트 검출 |
| 정정 능력 | 없음 | 1비트 오류 정정 |
| 오류 위치 파악 | 불가능 | 신드롬으로 위치 특정 |
| 주 사용처 | 단순 검사, 재전송 가능한 환경 | ECC 메모리, 저장장치, 통신 |
실무에서 만나는 오류 정정
서버용 메모리에 쓰이는 ECC(Error Correcting Code) 메모리는 SECDED 방식의 해밍 계열 코드를 하드웨어로 구현해, 방사선 등으로 발생하는 일시적 비트 반전을 운영체제 개입 없이 즉시 고친다. 일반 데스크톱 메모리에는 비용 문제로 ECC가 빠지는 경우가 많지만, 데이터 무결성이 중요한 서버와 워크스테이션에서는 사실상 필수다. SSD의 낸드 플래시는 오류율이 높아 해밍 코드보다 강력한 BCH 코드나 LDPC(Low-Density Parity-Check) 코드를 쓰고, 네트워크 계층에서는 CRC로 검출한 뒤 TCP의 재전송으로 복구하는 전략을 취한다. 이처럼 매체의 오류 특성과 재전송 가능 여부에 따라 검출과 정정 중 어떤 능력에 얼마나 투자할지가 달라진다는 것이 이 주제의 핵심 통찰이다.
면접에서 이렇게 물어본다
- 패리티 비트의 동작 원리와 2비트 오류를 검출하지 못하는 이유를 설명해보시오.
- 오류 검출과 오류 정정의 차이, 그리고 각각이 적합한 상황을 예를 들어 설명해보시오.
- 해밍 코드에서 패리티 비트를 2의 거듭제곱 위치에 두는 이유를 설명해보시오.
- 해밍(7,4) 코드에서 신드롬으로 오류 위치를 찾는 과정을 예를 들어 설명해보시오.
- ECC 메모리가 무엇이며 서버 환경에서 왜 중요한지 말해보시오.
컴퓨터 구조에서 같이 읽기
- ARM 프로세서 (ARM Processor)RISC 철학 기반 ARM 프로세서의 설계 원칙과 적재 저장 구조, x86과의 비교, AArch64 세대 구분, Apple Silicon과 AWS Graviton 등 서버 칩으로의 확장 흐름까지 정리한다.
- 캐시 메모리 (Cache Memory)CPU와 주기억장치의 속도 차이를 메우는 캐시 메모리의 원리를 다룬다. 메모리 계층 구조, 시간과 공간 지역성, 매핑 방식 비교, 쓰기 정책과 MESI 캐시 일관성까지 정리한다.
- 컴퓨터의 구성 (Computer Components)CPU, 기억장치, 입출력장치, 시스템 버스라는 컴퓨터의 4대 구성 요소와 폰 노이만 구조를 정리한다. 메모리 계층, 인터럽트와 DMA, 하버드 구조와의 절충까지 다룬다.
- 고정 소수점과 부동 소수점 (Fixed Point and Floating Point)컴퓨터가 실수를 표현하는 고정 소수점과 부동 소수점 방식을 비교한다. IEEE 754의 비트 구성과 편향 지수, 0.1 + 0.2 오차의 원인, FP16과 bfloat16 등 최신 흐름까지 정리한다.
이 개념, 내 코드에서는 어떻게 물어볼까요
데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.
공고 넣고 시작하기