IOSignal 한눈에 보기
IOSignal은 웹브라우저, Node.js 프로그램, Arduino 장치를 하나의 메시지 서버로 연결하는 오픈소스 실시간 메시징 라이브러리입니다. 클라이언트는 서버에 접속해 태그가 붙은 메시지(시그널)를 보내고, 서버는 태그를 보고 받을 대상을 찾아 전달합니다. 공유 키 인증과 암호화(boho)도 함께 제공합니다.
핵심 개념 네 가지
| 개념 | 한 줄 설명 | 자세히 |
|---|---|---|
| 서버 | 클라이언트 연결을 받고 메시지를 중계합니다. Node.js 코드 또는 CLI로 실행합니다. | 서버 실행 |
| CID | 서버가 연결마다 부여하는 클라이언트 주소입니다. ready 이벤트 이후 확정됩니다. | 인증과 암호화 |
| 태그 | room#topic, CID@topic처럼 받을 대상과 주제를 나타내는 문자열입니다. | 태그와 3가지 전달 방식 |
| 홈채널 | 채널 이름을 생략한 #topic은 같은 공인 IP(같은 공유기)의 연결끼리만 전달됩니다. 인증 경계는 아닙니다. | 홈채널 |
메시지는 세 가지 방식으로 전달됩니다. 채널을 구독한 모두에게 보내는 채널 발행, 특정 CID 하나에게 보내는 CID 직접 송신, 한 장치가 자기 CID로 발행하고 관심 있는 클라이언트가 구독하는 CID 발행입니다.
구성
- JavaScript 라이브러리
iosignal: Node.js 서버·클라이언트와 브라우저 클라이언트를 하나의 npm 패키지로 제공합니다. - Arduino 라이브러리
IOSignal: ArduinoClient인터페이스를 사용하는 C/C++ 클라이언트입니다. 별도 버전으로 배포됩니다. - iosignal-cli: 코드 없이 서버와 대화형 클라이언트를 실행하는 Mac·Windows·Linux용 명령입니다.
- boho: IOSignal이 인증과 암호화에 사용하는 공유 키 라이브러리입니다. boho 설계와 기술 상세
IOSignal과 Remocon은 별도 프로젝트입니다. IOSignal은 통신 라이브러리이고, Remocon은 이를 활용하는 웹앱과 Arduino 예제입니다. 패키지별 버전은 버전과 검증 기준을 확인하세요.
환경별 시작 문서
| 목적 | 클라이언트 또는 도구 | 시작할 문서 |
|---|---|---|
| HTML 파일에서 연결 | 브라우저 IO, WebSocket | HTML과 CDN |
| React·Svelte·Vite 앱 | 브라우저 IO, WebSocket | 번들러 |
| Node.js 프로그램 | IO(WebSocket), IOCongSocket(TCP) | Node.js 클라이언트 |
| Arduino 기기 | IOSignal C++, CongSocket(TCP) | Arduino 설치 |
| 터미널에서 시험 | iosignal-cli | CLI로 첫 메시지 보내기 |
| 메시지 중계 서버 운영 | Node.js Server 또는 CLI | 서버 실행 |
브라우저는 import IO from 'iosignal/io', Node.js는 import { IO } from 'iosignal'을 사용합니다. 같은 패키지의 서로 다른 진입점입니다.
서버의 port는 WebSocket, congPort는 Arduino와 IOCongSocket용입니다. 두 종류의 클라이언트를 함께 연결하려면 두 포트를 모두 설정합니다.
import { Server } from 'iosignal';
new Server({ port: 7777, congPort: 8888 });
응용예
- WebRTC 시그널링
- 서버 간 메시지 전달
운영 중인 활용 사례:
- Remocon: Arduino·웹 장치를 홈채널에서 찾아 바로 제어하는 리모컨 웹앱
- bayo.tv: IOSignal 클라이언트를 내장해 Remocon으로 원격 제어할 수 있는 동영상 플레이어
IOSignal은 메시지 전달을 담당합니다. 방의 참여 권한, 장치 명령의 의미, 처리 결과 응답 같은 규칙은 응용 앱에서 정합니다.
사용자 유형별 안내
- 처음 사용: 5분 빠른 시작으로 서버와 두 클라이언트를 실행한 뒤 태그와 3가지 전달 방식을 읽으세요.
- 서버 운영자·백엔드 JS 개발자: Node.js 클라이언트와 서버 실행 후 서버 인증 설정으로 이어갑니다.
- 웹앱 프론트엔드 JS 개발자: 브라우저 클라이언트 선택, 클라이언트 API, 연결 수명주기와 구독을 차례로 확인합니다. 프레임워크에 묶이지 않으며 예제는 Vanilla·React·Svelte로 제공합니다.
- Arduino(C/C++) 개발자: Arduino 라이브러리 설치 후 UNO 이더넷 예제로 시작합니다. 자체 서버 없이 시작하려면 공개 서버를 사용할 수 있습니다.
자주 틀리는 동작은 자주 하는 실수에 모았습니다.