Skip to Content

3장. 보도 코드와 5비트의 기계

만화로 보는 요약 — 먼저 읽어보세요

만화로 보는 요약 — 먼저 읽어보세요

보도 코드는 모든 글자를 5비트로 고정해 기계가 쉽게 읽게 했지만, 좁은 32칸을 늘리려 만든 시프트 모드는 상태 의존이라는 대가를 남겼다.

면접 실전 질문: ① 고정 길이가 기계에 편한 이유는? ② 5비트는 몇 가지 조합을 만드는가? ③ 시프트 신호가 유실되면 왜 문제가 되는가?


배경 — 기계가 편한 길

2장 끝에서 문제를 하나 남겼죠. 모스 부호는 글자마다 길이가 달라서, 어디서 한 글자가 끝나는지 기계가 알기 어려웠어요. 사람 귀엔 리듬이지만, 기계엔 골칫거리였습니다.

해결책은 의외로 단순해요. 모든 글자를 똑같은 길이로 만들면 됩니다. “이 코드는 무조건 5칸짜리”라고 못 박으면, 기계는 그냥 5칸씩 뚝뚝 끊어 읽기만 하면 돼요. 경계를 고민할 필요가 없어집니다. 모스의 영리함(빈도 최적화)을 포기하는 대신, 기계가 편한 길을 택한 거죠. 그 길을 처음 닦은 사람이 프랑스의 에밀 보도(Émile Baudot) 입니다.

스토리 — 5개의 구멍

1870년대, 보도는 글자 하나를 5개의 신호로 표현하는 코드를 만듭니다. 각 자리는 켜짐 아니면 꺼짐, 요즘 말로 비트(bit) 예요. 5비트니까 조합은 2 × 2 × 2 × 2 × 2 = 32가지. 예시로 A11000, B10011이라 둬 볼게요. (실제 비트 배정은 코드 계열마다 다르니, 여기서는 설명을 위한 임의 값으로 봐주세요.)

핵심은 길이가 전부 5로 똑같다는 겁니다. 종이테이프에 5칸씩 구멍을 뚫어두면, 텔레타이프 기계가 테이프를 드르륵 넘기며 5칸마다 한 글자로 자동 해독했어요. 사람의 숙련된 귀가 필요 없어진 거죠. 모스가 전신 기사의 손기술이었다면, 보도 코드는 기계가 알아서 하는 일이 됐어요. (참고로 통신 속도 단위 보(baud) 가 이 사람 이름에서 나왔어요.)

그런데 문제가 하나 있었습니다. 32가지로는 부족했어요. 알파벳만 26자인데, 숫자와 문장부호, 기호까지 넣으려면 32가지는 턱없이 좁습니다. 그래서 나온 꾀가 시프트(shift) 예요.

같은 5비트 코드에 두 가지 뜻을 겹쳐 담은 겁니다. “지금부터 문자 모드” 신호를 보내면 11000A, “지금부터 숫자 모드” 신호를 보내면 같은 11000- 같은 기호가 되는 식이죠. 타자기의 shift 키로 대문자·소문자를 오가는 것과 똑같은 발상입니다. 이걸로 32가지를 사실상 두 배로 늘렸어요. (엄밀히는, 우리가 아는 이 문자/숫자 시프트는 보도의 원안이라기보다 1901년 도널드 머레이가 다듬어 훗날 ITA2로 정착시킨 형태에 더 가깝습니다. 이 책에서는 이 5비트 계열을 통틀어 ‘보도 코드’라 부를게요.)

핵심 — 고정 길이의 승리, 그리고 숨은 대가

보도 코드를 인코딩의 눈으로 보면 이렇습니다.

첫째, 고정 길이의 승리. 모든 글자가 정확히 5비트예요. 2장의 “경계가 모호하다”는 문제가 통째로 사라집니다. 기계는 그냥 5칸씩 잘라 표에서 찾으면 끝이에요.

CODE = {"11000": "A", "10011": "B", "01110": "C"} # 5비트 고정 표 stream = "110001001101110" # 붙여 써도 문제없다! chars = [stream[i:i+5] for i in range(0, len(stream), 5)] # 5칸씩 뚝뚝 print("".join(CODE[c] for c in chars)) # ABC

모스와 달리 구분자(간격)가 필요 없죠. 붙여 써도 5칸씩 끊으면 되니까요. 코드 = 고정 폭 숫자 + 표라는, 오늘날 인코딩의 골격이 여기서 완성됩니다.

이번엔 대가를 볼까요.

  • 숨은 대가 ①: 빈도 최적화를 버렸다. 자주 쓰는 E도, 드문 Q도 똑같이 5비트예요. 모스의 “자주 쓰는 걸 짧게”라는 영리함은 사라졌습니다. 대신 기계의 단순함을 얻었죠. (효율 vs 단순함 — 이 트레이드오프는 UTF-8에서 다시 만납니다.)

  • 숨은 대가 ②: 시프트라는 ‘모드’. 32가지가 좁아 시프트로 늘렸지만, 이건 상태(state) 를 만들었어요. 같은 코드가 지금 문자 모드냐 숫자 모드냐에 따라 뜻이 달라집니다. 그런데 중간에 “문자 모드로 바꾼다”는 신호 하나가 유실되면? 그 뒤 글자가 전부 엉뚱하게 해독 돼요. 상태에 기댄 인코딩의 위험이 여기서 처음 싹틉니다.

즉 보도 코드는 기계 시대를 연 인코딩이었어요. 고정 길이로 기계를 편하게 했지만, 32가지라는 좁은 방과 시프트라는 임시방편을 안고 있었죠. 방을 넓히려면, 비트를 더 써야 합니다.

정리

  • 모스의 “경계 모호” 문제를 고정 길이(5비트) 로 해결한 게 보도 코드(에밀 보도, 1870년대). 기계가 5칸씩 뚝뚝 끊어 읽으면 되니 구분자가 필요 없다. → 코드 = 고정 폭 숫자 + 표.
  • 대가: ① 빈도 최적화 포기(모두 5비트) ② 32가지가 좁아 시프트(모드 전환)로 확장 — 하지만 시프트 신호가 유실되면 뒤가 전부 깨지는 상태 의존의 위험을 낳았다.
  • 통신 속도 단위 보(baud) 가 보도의 이름에서 왔다.

생각해볼 질문: 32가지가 좁은 게 근본 문제였어요. 시프트 같은 꾀 말고, 그냥 비트를 더 쓰면 방이 넓어집니다. 6비트면 64가지, 7비트면 128가지, 8비트면 256가지. 그럼 대체 몇 비트가 적당할까요? 이 질문에 미국이 내놓은 답이, 반세기 동안 컴퓨터를 지배합니다.

4장 · 왜 하필 7비트였나 — ASCII의 탄생

Last updated on