webOS 제어 채널과 전원

실측한 TV 동작을 기준으로 설계했습니다. SSAP 요청, 단방향 포인터 소켓, Wake-on-LAN이 제어의 서로 다른 부분을 맡습니다.

소스 기준: 앱 1.0.0 (1) · 2026년 8월 14일

실측 기준

프로토콜 기준은 2018년형 LG OLED C8, webOS 4.x에서 측정했습니다. 일반 리모컨 제어는 안정적으로 성립하지만 모든 TV 앱에 임의의 글자를 넣을 수는 없다는 실기 결과를 반영해 제품 방향을 바꿨습니다.

주 API보안 WebSocket을 쓰는 LG webOS SSAP
포인터 입력줄바꿈 프레임을 쓰는 별도 단방향 보안 WebSocket
전원 끄기SSAP system/turnOff
전원 켜기미리 저장한 인터페이스 MAC에 Wake-on-LAN 매직 패킷 전송

탐색, 신뢰와 페어링

켜진 TV를 로컬 네트워크에서 찾고 보안 SSAP 끝점에 연결한 뒤 권한 명세를 보내 TV 화면의 승인을 기다립니다. 돌려받은 클라이언트 키는 Android Keystore 기반 구현으로 저장하고 같은 권한 명세와 함께 재사용합니다.

제어 채널과 상태 재확인

SSAP 요청은 음량·음소거·채널 정보·앱 실행·전원과 상태 구독을 다룹니다. 포인터 이동·클릭·스크롤·리모컨 버튼 프레임은 응답을 돌려주지 않는 포인터 소켓을 사용합니다.

전송 성공과 상태 성공은 다릅니다. webOS가 조회나 구독을 제공하면 음량·채널·전원·현재 앱 상태를 다시 읽습니다. 포인터 전용 명령은 같은 수준의 증거를 만들 수 없습니다.

이동값을 모아 합친 뒤 포인터 프레임으로 보냅니다. 제스처 처리는 이동·탭·두 손가락 스크롤·튕기기를 다루는 결정적 상태 기계이며, 실제 시간 대신 가상 시계로 시험할 수 있습니다.

전원 왕복

깨어 있는 TV는 SSAP로 끌 수 있습니다. 깊은 대기 상태에서는 SSAP와 탐색 기능이 닫힐 수 있어 깨울 시점에 MAC을 물어볼 수 없습니다. TV가 깨어 있을 때 활성 유선 또는 Wi-Fi MAC을 저장해 뒀다가 WoL 매직 패킷을 보냅니다.

검증과 확인된 제약

순수 코어 상태 기계와 Android 전송 어댑터를 나누고 가짜 TV 시험 장치, 가상 스케줄러, SSAP 코덱, 페어링·전송, 포인터·제스처, WoL 패킷, UI 시험과 실기 탐침을 사용합니다.