모스 부호는 점(·)과 선(—)만으로 모든 문자를 표현하는 부호 체계입니다. 아마추어 무선부터 스마트폰 접근성 기능까지 지금도 활발히 사용됩니다. 이 가이드에서는 모스 부호의 기초와 양방향 변환 원리를 설명합니다.
모스 부호란?
1830년대 새뮤얼 모스와 앨프리드 베일이 전신기와 함께 개발한 부호 시스템입니다. 짧은 신호(점)와 긴 신호(선)의 조합으로 문자를 표현합니다.
- 점(·): 1단위 짧은 신호
- 선(—): 3단위 긴 신호
- 문자 내 기호 간격: 1단위
- 문자 간 간격: 3단위
- 단어 간 간격: 7단위
이 1:3:7 시간 비율이 지켜지면 숙련된 운용자는 분당 25단어 이상의 속도로 송수신할 수 있습니다.
모스 부호표
알파벳
| 문자 | 부호 | 문자 | 부호 | 문자 | 부호 |
|---|---|---|---|---|---|
| A | ·— | J | ·——— | S | ··· |
| B | —··· | K | —·— | T | — |
| C | —·—· | L | ·—·· | U | ··— |
| D | —·· | M | —— | V | ···— |
| E | · | N | —· | W | ·—— |
| F | ··—· | O | ——— | X | —··— |
| G | ——· | P | ·——· | Y | —·—— |
| H | ···· | Q | ——·— | Z | ——·· |
| I | ·· | R | ·—· |
숫자
| 숫자 | 부호 | 숫자 | 부호 |
|---|---|---|---|
| 0 | ————— | 5 | ····· |
| 1 | ·———— | 6 | —···· |
| 2 | ··——— | 7 | ——··· |
| 3 | ···—— | 8 | ———·· |
| 4 | ····— | 9 | ————· |
자주 쓰는 기호
| 기호 | 부호 |
|---|---|
| .(마침표) | ·—·—·— |
| ,(쉼표) | ——··—— |
| ?(물음표) | ··——·· |
| /(슬래시) | —··—· |
프로사인
프로사인(절차 부호)은 문자 간 간격 없이 연속으로 전송하는 2자 조합입니다. 아마추어 무선 교신에서 자주 사용됩니다:
| 프로사인 | 의미 |
|---|---|
| AR | 메시지 종료 |
| AS | 대기 (스탠바이) |
| BT | 단락 구분 (= 해당) |
| CQ | 전체 국 호출 |
| DE | 송신자 식별 (~로부터) |
| K | 응답 요청 |
| SK | 교신 종료 |
| SOS | 조난 신호 (···———···) |
SOS가 유명한 이유는 어느 방향에서 봐도 대칭인 패턴이라 혼란스러운 상황에서도 인식하기 쉽기 때문입니다.
양방향 변환 원리
텍스트 → 모스 부호: 각 문자를 부호표에서 찾아 치환합니다. 단어 구분은 /로 표시합니다. 동일한 문자는 항상 동일한 부호로 변환됩니다.
모스 부호 → 텍스트: /와 공백으로 분리해 역방향으로 조회합니다. 올바른 간격으로 전송된 모스 부호는 유일하게 디코딩됩니다.
JavaScript 구현
const MORSE_MAP = {
'A': '.-', 'B': '-...', 'C': '-.-.',
'D': '-..', 'E': '.', 'F': '..-.',
'G': '--.', 'H': '....', 'I': '..',
'J': '.---', 'K': '-.-', 'L': '.-..',
'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.',
'S': '...', 'T': '-', 'U': '..-',
'V': '...-', 'W': '.--', 'X': '-..-',
'Y': '-.--', 'Z': '--..',
'0': '-----', '1': '.----', '2': '..---',
'3': '...--', '4': '....-', '5': '.....',
'6': '-....', '7': '--...', '8': '---..',
'9': '----.'
};
const REVERSE_MAP = Object.fromEntries(
Object.entries(MORSE_MAP).map(([k, v]) => [v, k])
);
function textToMorse(text) {
return text.toUpperCase().split('').map(char => {
if (char === ' ') return '/';
return MORSE_MAP[char] ?? '?';
}).join(' ');
}
function morseToText(morse) {
return morse.split(' / ').map(word =>
word.split(' ').map(code => REVERSE_MAP[code] ?? '?').join('')
).join(' ');
}
// 예시
textToMorse('SOS'); // '... --- ...'
morseToText('... --- ...'); // 'SOS'
Python 구현
MORSE_MAP = {
'A': '.-', 'B': '-...', 'C': '-.-.',
'D': '-..', 'E': '.', 'F': '..-.',
'G': '--.', 'H': '....', 'I': '..',
'J': '.---', 'K': '-.-', 'L': '.-..',
'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.',
'S': '...', 'T': '-', 'U': '..-',
'V': '...-', 'W': '.--', 'X': '-..-',
'Y': '-.--', 'Z': '--..',
'0': '-----', '1': '.----', '2': '..---',
'3': '...--', '4': '....-', '5': '.....',
'6': '-....', '7': '--...', '8': '---..',
'9': '----.',
}
REVERSE_MAP = {v: k for k, v in MORSE_MAP.items()}
def text_to_morse(text: str) -> str:
return ' '.join(
'/' if c == ' ' else MORSE_MAP.get(c.upper(), '?')
for c in text
)
def morse_to_text(morse: str) -> str:
words = morse.strip().split(' / ')
return ' '.join(
''.join(REVERSE_MAP.get(code, '?') for code in word.split())
for word in words
)
print(text_to_morse('SOS')) # ... --- ...
print(morse_to_text('... --- ...')) # SOS
실용적인 활용 사례
아마추어 무선 (햄 라디오): 모스 부호(CW 모드)는 여전히 현역 통신 수단입니다. 음성보다 대역폭이 좁아 잡음이 많은 환경에서도 전달되며, 한국아마추어무선연맹(KARL) 시험에서 관련 지식이 요구됩니다.
접근성: iOS와 Android 모두 모스 부호 입력을 지원합니다. 스위치 접근성 등 단일 입력 수단만 사용할 수 있는 사용자도 점과 선의 조합으로 모든 문자를 입력할 수 있습니다.
임베디드 학습 프로젝트: LED나 피에조 버저로 모스 부호를 출력하는 것은 Arduino·라즈베리파이 피코의 ‘Hello, World’로 유명합니다. 타이밍 제어 연습에도 효과적입니다.
CTF 챌린지: 보안 대회에서 음성 파형이나 이미지 메타데이터에 모스 부호를 숨긴 문제가 자주 출제됩니다.
온라인으로 변환하기
ZeroTool 모스 부호 변환기는 텍스트 ↔ 모스 부호 실시간 양방향 변환을 지원합니다. ITU 표준 알파벳·숫자·일반 기호를 모두 지원하며, 가입 없이 브라우저에서 바로 사용할 수 있습니다.