개요 Overview
오늘날 우리가 사용하는 대부분의 컴퓨터 장치는 서로 데이터를 주고받기 위해 다양한 통신 방식을 사용합니다.
세상에 존재하는 다양한 전자 기기 들은 이러한 통신 표준을 준수하며 산업별 특성에 맞는 기술이 적용되고 있습니다.
그 중에서도 직렬 통신(Serial Communication)은 비교적 오래된 통신 방식임에도 불구하고, 여전히 임베디드 시스템, 디버깅 환경, 산업 장비 등 여러 분야에서 꾸준히 사용되고 있는 표준 통신 인터페이스 중 하나입니다.
직렬 통신은 이름 그대로 데이터를 한 비트씩 차례대로 전송하는 방식으로, 과거 하드웨어 자원이 제한적이던 시절에 등장하였습니다. 병렬 통신에 비해 속도는 느릴 수 있지만, 구현이 단순하고 안정성이 높다는 장점 덕분에 오랫동안 표준적인 통신 방식으로 자리 잡아왔습니다.
실제로 직렬 통신이 처음 등장하던 시기에는 병렬 통신과 함께 기술 패권에 대한 경쟁이 치열했는데요. 하지만 최종적으로는 직렬 통신이 이 경쟁에서 승리하게 되면서 병렬 통신은 역사적 기록으로써 남게 되었습니다.
오늘 포스팅에서는 직렬 통신이 어떤 배경에서 등장하게 되었는지 간단한 역사적 흐름을 살펴보고, 현재까지도 사용되고 있는 이유와 함께 기본 개념을 정리해 보고자 합니다.
시리얼 통신은 무엇인가요?
시리얼 통신이란, 데이터를 한 번에 한 비트씩 순차적으로 전송하는 통신 방식을 의미합니다.
https://en.wikipedia.org/wiki/Serial_communication
이 기술 표준을 이해하려면 아래와 같이 시리얼 통신용 하드웨어 규격을 함께 보는 것이 좋습니다.

| 핀 번호 | 데이터 방향 | 이름 | 설명 |
| Pin 1 | I | DCD(Data Carrier Detect) | 입력 포트 |
| Pin 2 | I | RXD(Receive Data) | 데이터 수신 |
| Pin 3 | O | TXD(Transmit Data) | 데이터 발신 |
| Pin 4 | O | DTR(Data Terminal Ready) | 데이터 단말 준비 |
| Pin 5 | I | GND(Ground) | 접지 |
| Pin 6 | O | DSR(Data Set Ready) | 데이터 세트 준비 |
| Pin 7 | I | RTS(Ready to Send) | 발신 요청 |
| Pin 8 | I | CTS(Clear to Send) | 발신 가능 |
| Pin 9 | I | RI(Ring Indicator) | 링 표시 |
위 그림과 같이 시리얼 통신은 예전에 컴퓨터 모니터를 연결할 때 사용하던 VGA 규격과 유사하게 생긴 것이 특징입니다.
하지만, 당연히 그래픽용 규격과는 전혀 다른 기술 표준이기 때문에 반드시 구분해서 알아두시는 것이 좋습니다.
이러한 방식은 동시에 여러 비트를 전송하는 병렬 통신에 비해 속도는 느릴 수 있지만, 전송선의 수가 적고 회로 구성이 단순하다는 장점이 있습니다. 덕분에 케이블 길이가 길어지거나 잡음이 많은 환경에서도 비교적 안정적인 통신이 가능해서 여전히 산업 분야나 연구 장비에서는 많이 채택하고 있는 규격이기도 합니다.
또한, 과거에는 PC의 COM 포트(RS-232)를 통해 마우스, 키보드, 모뎀 등이 직렬 통신 방식으로 연결되었습니다.
그러나 시리얼 통신은 일반적인 개인 PC에서는 더는 거의 사용되지 않는 규격인데요. 그 이유로는 USB의 높은 보급률을 예시로 들 수 있겠습니다.
시리얼 통신에서 사용하는 규격은?
시리얼 통신은 하나의 통신 방식이지만, 실제로는 여러 가지 물리적·전기적 규격 위에서 구현됩니다.
이 규격들은 데이터 전송 방식뿐 아니라, 커넥터 형태, 전압 수준, 사용 목적까지 서로 다르기 때문에 상황에 맞는 선택이 중요합니다. 대표적으로 많이 사용되는 규격에는 RS-232, RJ-45, RJ-11 이 있으며, 이들은 종종 혼동되지만, 물리적인 형태와 사용 목적이 구분되는 통신 규격입니다.
아래 표는 이 세 가지 규격을 시리얼 통신 관점에서 비교한 내용입니다.
| 구분 | RS-232 | RJ-45 | RJ-11 |
| 분류 | 직렬 통신 전기적 규격 | 커넥터 규격 | 커넥터 규격 |
| 주 용도 | PC ↔ 장비 간 직렬 통신 | 네트워크(Ethernet), 산업용 시리얼 | 전화선, 간단한 시리얼 |
| 데이터 전송 방식 | 비동기 직렬 통신 | 규격에 따라 상이 | 단순 직렬 신호 |
| 대표 커넥터 | DB-9, DB-25 | 8P8C (일반적으로 RJ-45) | 6P2C / 6P4C |
| 전압 레벨 | ±3V ~ ±15V | 규격에 따라 다름 | 낮은 전압 |
| 최대 통신 거리 | 약 15m | 최대 100m (Ethernet 기준) | 짧은 거리 |
| 주 사용 환경 | 디버깅, 산업 장비, 계측기 | 네트워크 장비, 콘솔 포트 | 전화기, 모뎀, 단순 장비 |
| 현재 사용 빈도 | 감소 추세이나 여전히 사용 | 매우 높음 | 제한적 사용 |
| RS-232 | RJ-45 | RJ-11 |
![]() |
![]() |
![]() |
시리얼 통신을 위한 프로그램 코드 작성하기
시리얼 통신은 OS와 플랫폼에 따라 접근 방식이 크게 달라집니다. Windows에서는 비교적 직접적인 접근이 가능하지만, Android에서는 보안 정책과 하드웨어 접근 제한으로 인해 몇 가지 제약이 존재합니다.
지금부터 살펴볼 내용은 앞서 언급한 두 환경에서 시리얼 통신을 위한 기본적인 접근 방식과 개념에 대해서만 간단히 살펴보겠습니다.
Windows
Windows에서는 시리얼 통신을 COM 포트를 통해 비교적 쉽게 사용할 수 있습니다.
운영체제 차원에서 시리얼 포트를 파일처럼 취급하기 때문에,
전용 드라이버만 정상적으로 설치되어 있다면 추가 권한 설정 없이 접근할 수 있습니다.
[윈도우 시리얼 통신의 기본 흐름]
- COM 포트 이름 확인 (예: COM3)
- 통신 속도(Baud Rate), 데이터 비트, 패리티, 스톱 비트 설정
- 포트 열기(Open)
- 데이터 송수신
- 포트 닫기(Close)
아래의 코드는 윈도우에서 C# 으로 시리얼 통신 관련 기능을 구현한 간단한 예제입니다.
using System.IO.Ports;
SerialPort port = new SerialPort("COM3", 9600);
port.Open();
port.WriteLine("Hello Serial");
string response = port.ReadLine();
port.Close();
Windows에서는 위와 같이 시리얼 장치에 대해서 비교적 접근 및 관련 기능이 수월한 편입니다.
Windows에서는 API 수준에서 시리얼 통신을 직접 지원하기 때문에
디버깅 도구, 테스트 유틸리티, 산업용 제어 프로그램 등에서 널리 활용되고 있습니다.
Android
Android에서는 Windows와 달리 기본적으로 시리얼 포트 접근이 허용되지 않습니다.
이는 Android가 모바일 환경을 전제로 한 운영체제이며, 임의의 하드웨어 접근을 제한하는 보안 정책을 가지고 있기 때문입니다.
하지만, 기본적으로는 리눅스 커널을 포함하는 운영체제이기 때문에 /dev/tty* 과 같은 형태로 주변 장치가 설치되는 것은 확인할 수 있습니다.
Android에서의 시리얼 통신을 위한 주요 제약
- /dev/tty* 와 같은 디바이스 파일 접근 제한
- 일반 앱은 커널 레벨 디바이스에 직접 접근 불가
- 루팅(root) 또는 시스템 앱 권한이 필요한 경우 존재
안드로이드에서 시리얼 통신을 위한 일반적인 접근 방식은 다음과 같습니다.
- USB Serial 통신 방식 사용
- USB-to-Serial 변환 칩 사용
- Android USB Host API 활용
안드로이드에서는 다양한 형태의 시리얼 장치를 USB 기반의 API를 통해 사용할 수 있도록 기능을 제공하고 있습니다.
이와 관련해서는 내용이 길어질 수 있어서, 다음에 더 자세히 다뤄보도록 하겠습니다.
시리얼 통신의 장단점
시리얼 통신은 오래된 통신 방식이지만, 단순히 “구식 기술”로만 보기에는 여전히 강력한 장점을 가지고 있습니다.
가령 사용이 간편하다고 여겨지는 USB 규격의 경우, 최대 수 미터 정도의 길이까지는 연결 케이블이나 통신이 양호하지만,
그 이상을 넘어가는 길이에서는 급격하게 통신 품질이 나빠질 수 있으며 케이블 제작에 드는 비용이 급격히 상승할 수도 있습니다.
하지만, 일반적으로 지름 수 미터 이내에서 사용되는 주변장치에서는 USB가 가진 강점이 강력해서 목적에 따라 필요한 규격이 선택되고 있습니다.
이러한 직렬 통신에 대한 장단점을 정리하자면 아래와 같습니다.
장점
- 시리얼 통신은 데이터 전송 구조가 단순하여 초기 구현이 쉽다. 통신 속도, 패리티, 스톱 비트와 같은 기본 설정만 맞추면 빠르게 통신 환경을 구성할 수 있다.
- 병렬 통신에 비해 필요한 신호선의 수가 적어, 회로 설계가 간단하며 비용 측면에서도 유리하다. 이에 따라 임베디드 시스템이나 소형 장비에서 여전히 많이 사용된다.
- 전송 방식이 단순하므로 통신 흐름을 추적하기 쉽고, 문제가 발생했을 때 디버깅이 상대적으로 수월하다. 특히 장비 제어, 로그 출력, 디버깅 용도로 매우 적합하다.
단점
- 데이터를 한 비트씩 차례대로 전송하기 때문에, 대용량 데이터 전송에는 적합하지 않다. 현대적인 네트워크나 고속 인터페이스와 비교하면 성능 차이가 분명하다.
- 최근 시스템 환경에서는 USB, Ethernet, 무선 통신이 표준으로 자리 잡고 있어, 시리얼 통신만을 지원하는 장비는 활용 범위가 제한적일 수 있다.
- 특히 Android와 같은 모바일 운영체제에서는 보안 정책으로 인해 직접적인 시리얼 통신이 어렵다. 이에 따라 추가 하드웨어나 우회 방식이 필요해질 수 있다.
시리얼 통신에 대한 총평
시리얼 통신은 최신 기술 트렌드의 중심에 있는 방식은 아니지만, 여전히 “현장에서 살아 있는 기술” 이다.
시리얼 통신은 단순함과 안정성이라는 강점 덕분에, 장비 제어, 초기 디버깅, 임베디드 시스템 등 특정 영역에서는 대체하기 어려운 위치를 차지하고 있습니다.
다만 모든 상황에 적합한 만능 해법은 아니기 때문에, 대용량 데이터 처리나 확장성이 중요한 환경에서는 USB나 네트워크 기반 통신이 더 적절한 선택이 될 수도 있습니다.
결국 시리얼 통신은 “언제, 어떤 목적으로 사용하는가” 에 따라 그 가치가 결정된다고 할 수 있겠습니다.
개인적으로 소견을 덧붙이자면 기술 선택의 관점에서 중요한 것은 최신 여부가 아니라, 문제에 가장 잘 맞는 도구를 선택하는 것으로 생각합니다.
때로는 철 지난 구식 기술이라고 보일 수 있어도, 제품이 배포될 시장의 환경과 상황을 충분히 고려하며 적합한 기술을 선택하는 것이 최고의 엔지니어링이라고 생각합니다.
참고 자료
Serial | API reference | Android Developers
developer.android.com
https://developer.android.com/develop/connectivity/usb/host?hl=ko
USB 호스트 개요 | Connectivity | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. USB 호스트 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 지원 기기가 USB 호스트 모드일
developer.android.com
https://developer.android.com/reference/java/io/Serial
Serial Ports - Connect - REST API (Azure Serial Console)
직렬 콘솔 서비스에 대한 자세한 정보 - 대상 리소스의 직렬 포트에 연결
learn.microsoft.com
'CS BASIC' 카테고리의 다른 글
| [Windows] 시리얼 통신과 WinAPI의 활용 (0) | 2026.01.20 |
|---|


