1. 매일 아침 40대 PC 전원 버튼을 누르는 학교와 부대의 비효율
전국 초·중·고 정보 교사와 실습실 관리 교사들의 일과는 매일 아침 컴퓨터실 40~50대의 본체 전원 버튼을 하나씩 직접 누르고 다니는 단순 반복 노동으로 시작됩니다. 수업 시작 직전 학생들에게 켜라고 지시하면, 윈도우 부팅 및 업데이트 지연으로 수업 초반 15분 이상이 아무런 실습도 진행하지 못한 채 흘러가 버립니다.
국방 지휘통제실과 군사 훈련소 전산망 역시 마찬가지입니다. 평시 에너지 절약 및 하드웨어 보안을 위해 대기 전력을 차단해 둔 수십 대의 전술 단말기를 비상 소집이나 훈련 발령 시 즉시 0초 만에 동시 기상(Wake-up)시키지 못하면 골든타임 내에 지휘 체계를 가동할 수 없습니다.
ZeliDesk의 ZeliWake는 이러한 물리적 관리 한계를 극복하기 위해,
"이더넷 표준 규격에 정확히 부합하는 102바이트 매직 패킷(Magic Packet) 바이너리 빌더,
유효성 검증 기반 MAC 주소 정규화 파이프라인, 서브넷 타깃팅 L2/L3 브로드캐스트 UDP 전송,
그리고 디바이스 카탈로그 영속화 엔진"을 설계했습니다.
2. 102바이트 바이너리 조립: AMD Magic Packet 표준 규격 구현
Wake-on-LAN(WOL)은 컴퓨터의 운영체제가 완전히 종료되어 대기 모드(ACPI D3cold/S5)에 있더라도, 메인보드 랜카드(NIC)에 공급되는 미세 대기 전력(Standby Power)을 이용해 특정 패턴의 이더넷 프레임을 감지하면 전원 공급 장치(PSU)에 파워온 신호를 인가하는 하드웨어 표준 기술입니다.
이더넷 카드가 '자신을 깨우는 신호'로 인식하기 위해서는 엄격한 102바이트 바이너리 구조를 가져야 합니다:
| 바이트 구간 | 길이 | 데이터 내용 및 바이너리 구조 | 역할 및 기술적 사유 |
|---|---|---|---|
| 0 ~ 5 (6B) | 6 바이트 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF (6개 연속) |
동기화 스트림(Sync Stream) — 랜카드 수신 칩셋에 매직 패킷 시작을 알림 |
| 6 ~ 101 (96B) | 96 바이트 | 타깃 기기의 6바이트 MAC 주소를 16회 연속 복제 (6B × 16 = 96B) | 수신 랜카드가 자신의 물리 하드웨어 주소(MAC)와 16회 연속 일치함을 검증 |
| 총 102 바이트 | 이더넷 프레임 페이로드 또는 UDP 데이터그램으로 패키징되어 브로드캐스트 전송 | ||
private void BtnSend_Click(object sender, RoutedEventArgs e)
{
var macStr = TxtMac.Text?.Trim();
if (string.IsNullOrEmpty(macStr)) return;
try
{
// 1) 다양한 포맷의 문자열을 순수 6바이트 MAC 바이너리로 파싱
byte[] macBytes = ParseMac(macStr);
// 2) 102바이트 매직 패킷 버퍼 할당 (6 + 16 * 6 = 102)
byte[] magicPacket = new byte[6 + 16 * 6];
// 3) 헤더: 동기화 스트림 0xFF 6개 채우기
for (int i = 0; i < 6; i++)
magicPacket[i] = 0xFF;
// 4) 페이로드: 6바이트 MAC 주소를 정확히 16회 연속 복제
for (int i = 0; i < 16; i++)
Array.Copy(macBytes, 0, magicPacket, 6 + i * 6, 6);
// 5) 브로드캐스트 목적지 IP 및 UDP 포트(기본 9번/7번) 바인딩
var broadcastIp = IPAddress.Parse(TxtBroadcast.Text?.Trim() ?? "255.255.255.255");
int port = (int)NumPort.Value;
// 6) UDP 브로드캐스트 소켓 생성 및 즉시 송신
using var client = new UdpClient();
client.EnableBroadcast = true;
client.Send(magicPacket, magicPacket.Length, new IPEndPoint(broadcastIp, port));
TxtStatus.Text = string.Format(Loc.Get("Wake_SendSuccess"), macStr);
}
catch (Exception ex)
{
TxtStatus.Text = string.Format(Loc.Get("Wake_SendFail"), ex.Message);
}
}
3. MAC 주소 정규화 파이프라인: 콜론·하이픈·점·공백 통합 파서
현장의 교사들과 관리자들이 장부나 라벨에서 입력하는 MAC 주소는 제조사나 운영체제마다 표기 방식이 제각각입니다:
00:11:22:33:44:55(유닉스/리눅스 표기), 00-11-22-33-44-55(윈도우 ipconfig 표기),
0011.2233.4455(시스코 스위치 표기), 또는 구분자 없는 001122334455.
ParseMac 메서드는 입력 문자열에서 모든 구분 기호를 일괄 제거하고
정확히 12자리 16진수 문자열인지 엄격히 검증한 후 6바이트 배열로 변환합니다.
private byte[] ParseMac(string mac)
{
// 콜론(:), 하이픈(-), 점(.), 공백을 일괄 제거하여 순수 Hex 문자열로 정규화
mac = mac.Replace(":", "").Replace("-", "").Replace(".", "").Trim();
// 48비트 MAC 주소는 반드시 12자리의 16진수여야 함
if (mac.Length != 12)
throw new FormatException(Loc.Get("Wake_InvalidMac"));
byte[] bytes = new byte[6];
for (int i = 0; i < 6; i++)
{
// 2글자씩 1바이트 16진수로 안전하게 변환
bytes[i] = Convert.ToByte(mac.Substring(i * 2, 2), 16);
}
return bytes;
}
사용자가 11자리만 입력하거나 오타를 입력했을 때 FormatException을 던지며,
상위 이벤트 핸들러의 catch (Exception ex) 블록에서
상태 표시줄에 다국어 지원 오류 메시지(Loc.Get("Wake_SendFail"))만 안전하게 출력합니다.
단 1줄의 오류로도 메인 런처 프로세스가 크래시되지 않도록 완벽히 방어합니다.
4. 서브넷 브로드캐스트 라우팅: L2 로컬 브로드캐스트 vs L3 Directed 브로드캐스트
많은 WOL 소프트웨어가 무조건 255.255.255.255로만 패킷을 쏩니다.
하지만 대규모 학교나 군부대 전산망은 VLAN(가상 LAN)으로 서브넷이 층별·교실별로 나뉘어 있습니다.
제한된 브로드캐스트(Limited Broadcast, 255.255.255.255)는 라우터(L3 스위치)를 절대 통과하지 못하므로,
교무실 PC에서 컴퓨터실 PC를 켤 수 없습니다.
ZeliWake는 타깃 서브넷 브로드캐스트(Subnet-Directed Broadcast, 예: 192.168.10.255)를
자유롭게 지정할 수 있도록 아키텍처화되었습니다.
| 브로드캐스트 방식 | 목적지 IP 예시 | L3 라우터 통과 여부 | 권장 적용 환경 |
|---|---|---|---|
| 제한된 브로드캐스트 (Local L2) | 255.255.255.255 |
불가 (라우터 차단) | 동일 스위치 허브에 연결된 컴퓨터실 내부 단일망 |
| 서브넷 지향 브로드캐스트 (Directed L3) | 192.168.20.255 등 |
가능 (ip directed-broadcast 허용 시) | 교무실 ➔ 3층 컴퓨터실, 대대 본부 ➔ 중대 지휘소 원격 기상 |
5. 컴퓨터실 40대 PC 카탈로그 관리: ObservableCollection & JSON 영속화
매번 12자리 MAC 주소를 손으로 타이핑하는 것은 비효율적입니다.
ZeliWake는 WolDevice 엔티티를 ObservableCollection<WolDevice> 컬렉션으로 바인딩하여
컴퓨터실 40대의 '좌석 번호(라벨)'와 'MAC 주소'를 직관적인 목록으로 영속화합니다.
public class WolDevice
{
public string Label { get; set; } // 예: "컴퓨터실-01", "교탁-교사용PC", "지휘소-전술01"
public string Mac { get; set; } // 예: "00:E0:4C:68:01:23"
}
private void SaveDevices()
{
try
{
var settings = Windows.Storage.ApplicationData.Current.LocalSettings;
// 40대 PC 디바이스 목록을 단일 JSON 문자열로 직렬화하여 원자적 저장
settings.Values["ZeliWake_Devices"] = JsonSerializer.Serialize(_devices.ToList());
}
catch { /* I/O 예외 시 런처 무결성 보존 */ }
}
private void LoadDevices()
{
try
{
var settings = Windows.Storage.ApplicationData.Current.LocalSettings;
string json = settings.Values["ZeliWake_Devices"] as string;
if (!string.IsNullOrEmpty(json))
{
var list = JsonSerializer.Deserialize<List<WolDevice>>(json);
if (list != null)
foreach (var d in list) _devices.Add(d);
}
}
catch { }
}
6. 종합 아키텍처 다이어그램
ZeliWake가 102바이트 매직 패킷을 생성하여 L2/L3 네트워크를 통해 목적지 PC의 랜카드를 깨우는 전체 제어 흐름도입니다:
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ ZeliWake Desktop Host │
│ │
│ [ Device Catalog ] ──► "컴퓨터실-01" (00:E0:4C:68:01:23) │
│ │ │
│ ▼ │
│ [ ParseMac Pipeline ] ──► Normalization (Strip ':', '-', '.') ➔ 6-Byte Binary │
│ │ │
│ ▼ │
│ [ 102-Byte Magic Packet Builder ] │
│ ├── 6 Bytes Sync Header: [ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ] │
│ └── 96 Bytes Payload: [ MAC_Bytes ] x 16 Repetitions │
│ │ │
│ ▼ │
│ [ UdpClient Socket ] ──► EnableBroadcast = true │
│ Destination: 192.168.1.255 : Port 9 │
└─────────────────────────────────┬──────────────────────────────────────────────────────┘
│ UDP Broadcast
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ L2/L3 Network Switch Fabric │
│ │ │
│ ┌───────────────────────┼───────────────────────┐ │
│ ▼ ▼ ▼ │
│ [ PC-01 NIC ] [ PC-02 NIC ] [ PC-40 NIC ] │
│ (MAC 일치! ➔ PowerOn!) (MAC 불일치 ➔ 무시) (MAC 불일치 ➔ 무시) │
└────────────────────────────────────────────────────────────────────────────────────────┘
7. 결론: 손끝 하나로 40대 PC를 지휘하는 인텔리전트 전원 거버넌스
WOL 매직 패킷 기술은 단순한 네트워크 유틸리티를 넘어, 공교육 교원들의 행정 피로도를 획기적으로 줄이고 국방 지휘소의 긴급 전술 전개 속도를 10배 이상 끌어올리는 핵심 인프라 제어 기술입니다.
ZeliWake는 102바이트 정밀 바이너리 조립과 다형적 MAC 파서, 그리고 서브넷 지향 브로드캐스트를 결합하여 어떠한 폐쇄망 환경에서도 신뢰할 수 있는 단말 전원 원격 제어를 완성했습니다. 앞으로도 ZeliDesk는 현장의 번거로움을 자동화하는 실용적 엔지니어링을 지속해 나갈 것입니다.