USB 모뎀, 휴대폰, 블루투스 어댑터, 시리얼-USB 변환기 등 새로운 COM 장치나 USB 장치를 컴퓨터에 연결하면, Windows는 플러그 앤 플레이(Plug-n-Play) 방식으로 이를 자동 인식하고 COM1~COM255 범위 내에서 COM 포트 번호(COM1, COM2, COM3 등)를 할당합니다. 동일한 장치를 다시 연결하면 이전에 예약된 COM(Communication, 즉 Serial) 포트 번호가 그대로 배정되며, 새로운 장치에는 비어 있는 첫 번째 COM 포트 번호가 순서대로 부여됩니다.
특히 외부 장치 하나가 여러 개의 COM 포트를 동시에 생성하는 경우도 흔합니다. 실제로 블루투스 어댑터 하나를 연결했더니 무려 10개의 새로운 COM 포트가 시스템에 추가된 사례도 있습니다.
왜 COM 포트 번호를 정리해야 할까요?
일부 구형(레거시) 응용 프로그램은 두 자릿수 COM 포트 번호만 인식할 수 있어 COM100 이상의 포트와는 호환되지 않으며, 최악의 경우 COM1~COM9 포트에서만 작동하기도 합니다. 그렇다면 장치에 이미 높은 번호의 COM 포트가 할당되어 있다면 어떻게 해야 할까요? 예약된 COM 포트의 번호 매기기를 초기화하고 불필요하게 할당된 포트를 삭제할 수 있을까요?
목차
- Windows에서 장치의 COM 포트 번호 변경하는 방법
- Windows에서 시리얼 COM 포트를 사용 중인 프로세스 확인하기
- Windows 레지스트리에서 COM 포트 번호 초기화하기
Windows에서 장치의 COM 포트 번호 변경하는 방법
Windows에서는 장치에 할당된 COM 포트 번호를 수동으로 변경할 수 있습니다. 원하는 COM 포트가 이미 사용 중이라면, 먼저 해당 포트를 비우는 작업부터 시도해 보세요.
devmgmt.msc명령을 실행하여 장치 관리자(Device Manager)를 엽니다;- 메뉴에서 보기(View) → 숨겨진 장치 표시(Show Hidden Devices)를 선택합니다;
- 포트(Ports, COM & LPT) 항목을 확장하고 목록에서 해당 장치를 찾습니다;
- 포트 설정(Port Settings) 탭으로 이동한 후 고급(Advanced) 버튼을 클릭합니다;
- COM 포트 번호(COM Port Number) 필드에서 현재 장치에 할당된 COM 포트 번호를 확인할 수 있습니다;
- 번호를 변경하려면 드롭다운 목록을 열고 원하는 COM 포트 번호를 선택합니다.
하지만 대부분의 경우 하위 번호의 COM 포트가 이미 모두 사용 중이어서 장치 속성에서 다른 포트 번호로 변경할 수 없습니다. 이럴 때는 기존의 COM 포트 예약을 해제해야 합니다.
- 포트(Ports, COM & LPT) 분기를 확장하고 필요한 COM 포트 번호가 어떤 장치에 할당되어 있는지 찾습니다. 아이콘이 옅은 색으로 표시된 장치는 COM 포트가 예약되어 있지만 현재 연결되어 있지 않은 상태입니다;
- 해당 장치를 마우스 오른쪽 버튼으로 클릭하고 장치 제거(Uninstall)를 선택합니다;
- 이제 비워진 COM 포트를 다른 장치에 할당할 수 있습니다. 대상 장치의 속성을 다시 열고 포트 설정 → 고급 탭으로 이동한 뒤, 드롭다운 목록에서 비어 있는 COM 포트를 선택하면 됩니다.
다만 이 방법으로도 모든 경우에 사용 중인 COM 포트를 해제할 수 있는 것은 아닙니다.
PowerShell을 사용하면 Windows에서 현재 사용 중인 COM 포트의 전체 목록을 확인할 수 있습니다:
Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description
또한 장치 이름으로 특정 장치의 COM 포트 번호를 조회할 수도 있습니다. 예를 들면 다음과 같습니다:
Get-WMIObject Win32_SerialPort | Where-Object { $_.Name -like "*Arduino*"} | select name, deviceid
또는Get-WMIObject Win32_SerialPort | Where-Object { $_.Name -like "*GPS*"} | select name, deviceid
Windows에서 시리얼 COM 포트를 사용 중인 프로세스 확인하기
Windows 자체나 실행 중인 프로그램(프로세스)이 사용 중인 장치의 COM 포트는 해제할 수 없습니다. 따라서 먼저 해당 COM 포트를 점유하고 있는 프로세스를 종료해야 합니다. Sysinternals의 Process Explorer 도구를 활용하면 특정 COM 포트를 사용 중인 프로세스 이름을 쉽게 찾아낼 수 있습니다.
먼저 COM 포트를 사용 중인 서비스 이름을 확인해야 합니다. PowerShell에서 다음 명령을 실행하세요:
get-pnpdevice -class Ports -ea 0 | Select Name, PNPDeviceID, Status, Service
출력 결과의 Service 열에서 각 COM 포트의 서비스 이름을 확인할 수 있습니다. 예를 들어 COM2의 서비스 이름은 Serial입니다. 이제 Process Explorer를 관리자 권한으로 실행한 후 메뉴에서 Find → Find Handle or DLL을 선택합니다. Handle or DLL substring 입력란에 앞서 확인한 서비스 값(예: Serial)을 입력합니다.
Process Explorer가 현재 해당 COM 포트를 사용 중인 프로세스 이름을 표시해 줍니다. COM 포트를 해제하려면 해당 프로세스나 프로그램을 종료하면 됩니다.
Windows 레지스트리에서 COM 포트 번호 초기화하기
사용 중인 COM 포트에 대한 정보는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter 레지스트리 키의 CommDB 값에 저장됩니다.
- 레지스트리 편집기(
regedit.exe)를 실행하고 위의 레지스트리 키로 이동합니다.
중요! 작업을 진행하기 전에 반드시 해당 레지스트리 키를 백업(파일 → 내보내기)하시기 바랍니다. 문제가 발생하더라도 원래의 COM 포트 설정을 복원할 수 있습니다; - ComDB 값은 바이너리 형식으로 Windows에 예약된 COM 포트 목록을 나타냅니다. 각 비트(bit)는 1~255번까지의 해당 포트 상태를 의미합니다. 예를 들어 COM3만 예약을 유지하고 싶다면 ComDB의 16진수 값을 04(0000 0100)로 설정하면 됩니다.
주의! 매우 신중하게 작업해야 하며, 파라미터에 임의의 비트를 추가하면 시스템이 BSOD(블루스크린) 오류로 실패할 수 있습니다; - 모든 COM 포트 바인딩을 초기화하려면 ComDB 값을 0으로 변경합니다.
참고: Windows에 현재 연결된 COM 포트의 전체 목록은 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 레지스트리 키에서 확인할 수 있습니다. SERIALCOMM 하위의 항목은 기본 장치가 연결되어 준비된 상태일 때만 존재하며, 이 하위 키는 HARDWARE 키의 일부이므로 시스템이 시작될 때마다 다시 생성됩니다; - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports 레지스트리 키에는 할당된 모든 COM 포트 번호 목록이 저장되어 있습니다. 여기서 불필요한 포트 예약을 삭제할 수 있습니다. 예를 들어 COM3만 남기고 나머지 포트 항목을 모두 삭제할 수 있습니다;
- 모든 외부 장치의 연결을 해제하고 컴퓨터를 재시작합니다;
- 재부팅 후에는 장치를 원하는 순서대로 다시 연결하고, USB-시리얼 변환기 등을 재설치합니다. 시스템이 감지한 모든 COM 포트 장치는 자동으로 인식되어 순차적인 COM 포트 번호가 할당됩니다.
COM 포트 정리에 유용한 무료 도구
예약된 COM 포트를 정리할 때 아래의 무료 도구들도 활용할 수 있습니다:
- COM Name Arbiter Tool – COM 포트 예약을 초기화하고 사용 중인 COM 포트 번호를 찾는 데 유용한 도구입니다. 도구를 다운로드하여 관리자 권한으로 실행한 뒤, 해제하려는 COM 포트를 선택하고 Clear unused Reservations와 Remove non-present devices 버튼을 클릭하면 됩니다;
- Device Cleanup Tool – 레지스트리(
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum)에서 이전에 연결했던 장치들을 검색하여, 사용하지 않는 장치를 제거하고 COM 포트 예약을 정리하는 유틸리티입니다.