Skip to Content

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

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

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

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

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


배경 — 기계가 편한 길

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

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

스토리 — 5개의 구멍

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

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

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

같은 5비트 코드에 두 가지 뜻을 겹쳐 담은 겁니다. “지금부터 문자 모드” 신호를 보내면 11000은 A, “지금부터 숫자 모드” 신호를 보내면 같은 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