WebUSB๋ฅผ ํ์ํ์ฌ ์น์ฌ์ดํธ๊ฐ USB ์ฅ์น์ ์ง์ ํต์ ํ ์ ์๋๋ก ์ง์ํ๋ ๊ฐ๋ ฅํ API๋ก, ์น ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
WebUSB: ๋ธ๋ผ์ฐ์ ์์ ์ง์ USB ์ฅ์น ์ก์ธ์ค ํ์ฉํ๊ธฐ
WebUSB๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด USB ์ฅ์น์ ์ง์ ํต์ ํ ์ ์๋๋ก ์ง์ํ๋ ํ์ ์ ์ธ API์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ 3D ํ๋ฆฐํฐ, ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ, ๊ณผํ ๊ธฐ๊ธฐ ๋๋ ๊ธฐํ USB ์ง์ ์ฅ์น์ ์ํํ๊ฒ ์ํธ ์์ฉํ ์ ์๋ ์ธ์์ ์์ํด ๋ณด์ธ์. WebUSB๋ ์ด๋ฅผ ํ์ค๋ก ๋ง๋ค์ด ์น ๊ธฐ๋ฐ ํ๋์จ์ด ์ ์ด ๋ฐ ๋ฐ์ดํฐ ์์ง์ ์ํ ๊ด๋ํ ์์ญ์ ์ด์ด์ค๋๋ค.
WebUSB๋ ๋ฌด์์ ๋๊น?
๊ธฐ์กด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์ ์ํธ ์์ฉํ๊ณ ์ ๋ณด๋ฅผ ํ์ํ๋ ๋ฐ ๊ตญํ๋ฉ๋๋ค. WebUSB๋ ์ด๋ฌํ ์ฅ๋ฒฝ์ ํ๋ฌผ๊ณ ์น์ฌ์ดํธ๊ฐ USB ์ฅ์น์ ์ง์ ์ก์ธ์คํ ์ ์๋ ์์ ํ๊ณ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ง์ ๊ฒฝ์ฐ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ธ๋ผ์ฐ์ ํ์ฅ์ด ํ์ ์์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ํํ๊ณ ๋ณด์์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
WebUSB์ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฐ์ํ๋ ์ฌ์ฉ์ ๊ฒฝํ: ์ฌ์ฉ์๋ ๋๋ผ์ด๋ฒ๋ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ ํ์ ์์ด ํด๋ฆญ ํ ๋ฒ์ผ๋ก USB ์ฅ์น์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
- ํฅ์๋ ๋ณด์: WebUSB๋ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ ์๋๋ฐ์ค ๋ด์์ ์๋ํ์ฌ ์ ์ฑ ์ฝ๋๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํฉ๋๋ค. ๊ถํ์ ์ฌ์ดํธ๋ณ๋ก ๋ถ์ฌ๋์ด ์ฌ์ฉ์๊ฐ ์ด๋ค ์น์ฌ์ดํธ๊ฐ USB ์ฅ์น์ ์ก์ธ์คํ ์ ์๋์ง ์ ์ดํ ์ ์์ต๋๋ค.
- ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ: WebUSB๋ ๋ค์ํ ์ด์ ์ฒด์ ์ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋ฏ๋ก ๊ด๋ฒ์ํ ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ฐ๋ฐ ์ค๋ฒํค๋ ๊ฐ์: ์น ๊ฐ๋ฐ์๋ ๊ธฐ์กด ์น ๊ธฐ์ (HTML, CSS, JavaScript)์ ํ์ฉํ์ฌ ํ๋์จ์ด ์ฐ๊ฒฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ผ๋ฏ๋ก ํ๋ซํผ๋ณ ๋ค์ดํฐ๋ธ ๊ฐ๋ฐ์ ๋ฐฐ์ธ ํ์๊ฐ ์์ต๋๋ค.
WebUSB ์๋ ๋ฐฉ์
WebUSB API๋ USB ์ฅ์น์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ฒญํ๊ณ , ์ธํฐํ์ด์ค๋ฅผ ํด๋ ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ณ , ์ฅ์น ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํ JavaScript ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐ๋ณธ ์ํฌํ๋ก๋ ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค.
- ์ฅ์น ์ก์ธ์ค ์์ฒญ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ `navigator.usb.requestDevice()`๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ USB ์ฅ์น๋ฅผ ์ ํํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒค๋ ID, ์ ํ ID ๋๋ ๊ธฐํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ํ ๋ฒ์๋ฅผ ์ขํ ์ ์์ต๋๋ค.
- ์ฅ์น ์ด๊ธฐ: ์ฌ์ฉ์๊ฐ ๊ถํ์ ๋ถ์ฌํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ `device.open()`์ ํธ์ถํ์ฌ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
- ์ธํฐํ์ด์ค ํด๋ ์: USB ์ฅ์น๋ ์ข ์ข ํน์ ๊ธฐ๋ฅ์ ๋ํ๋ด๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ `device.claimInterface()`๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ํด๋ ์ํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ก: ๋ฐ์ดํฐ๋ `device.transferIn()` ๋ฐ `device.transferOut()` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ์น์ ๊ตํ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ฅผ ํตํด ์ฅ์น์ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ ์ด ์ ์ก, ๋๋ ์ ์ก ๋ฐ ์ธํฐ๋ฝํธ ์ ์ก์ ์ํํ ์ ์์ต๋๋ค.
- ์ฅ์น ๋ซ๊ธฐ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ฃ๋๋ฉด `device.releaseInterface()`๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ํด์ ํ๊ณ `device.close()`๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ์น๋ฅผ ๋ซ์์ผ ํฉ๋๋ค.
์: USB ์๋ฆฌ์ผ ์ฅ์น์ ์ฐ๊ฒฐ
์ค์ฉ์ ์ธ ์: USB ์๋ฆฌ์ผ ์ฅ์น(์: USB-to-serial ์ด๋ํฐ๊ฐ ์๋ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ)์ ์ฐ๊ฒฐํ์ฌ WebUSB๋ฅผ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
async function connectToSerial() {
try {
const device = await navigator.usb.requestDevice({
filters: [{
vendorId: 0x2341, // Arduino's vendor ID
}],
});
await device.open();
await device.selectConfiguration(1); // Assuming configuration 1 is the desired one
await device.claimInterface(0); // Assuming interface 0 is the serial interface
console.log("Connected to serial device!");
// Now you can use device.transferIn() and device.transferOut() to send and receive data.
} catch (error) {
console.error("Error connecting to serial device:", error);
}
}
์ด ์ฝ๋ ์ค๋ํซ์ Arduino ๋ฒค๋ ID๊ฐ ์๋ USB ์ฅ์น์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ฒญํ๊ณ , ์ฅ์น๋ฅผ ์ด๊ณ , ๊ตฌ์ฑ์ ์ ํํ๊ณ , ์ธํฐํ์ด์ค๋ฅผ ํด๋ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ธํฐํ์ด์ค๊ฐ ํด๋ ์๋๋ฉด `transferIn()` ๋ฐ `transferOut()` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฆฌ์ผ ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์์ต๋๋ค.
WebUSB์ ์ฌ์ฉ ์ฌ๋ก
WebUSB๋ ๋ค์ํ ์ฐ์ ๋ถ์ผ์์ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- 3D ํ๋ฆฐํ : ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์ 3D ํ๋ฆฐํฐ๋ฅผ ์ ์ดํ์ฌ ์ฌ์ฉ์๊ฐ ๋ฐ์คํฌํฑ ์ํํธ์จ์ด๋ฅผ ์ค์นํ์ง ์๊ณ ๋ ๋ชจ๋ธ์ ์ ๋ก๋ํ๊ณ , ์งํ ์ํฉ์ ๋ชจ๋ํฐ๋งํ๊ณ , ์ค์ ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ฌ๋ผ์ด์ฑ ์๋น์ค๊ฐ ํ๋ฆฐํฐ๋ก ์ง์ ์ง์นจ์ ๋ณด๋ด๋ ๊ฒ์ ์์ํด ๋ณด์ธ์.
- ๊ณผํ ๊ธฐ๊ธฐ: ์น ์ธํฐํ์ด์ค์์ ์ง์ ์ค์ค๋ก์ค์ฝํ, ๋ถ๊ด๊ณ ๋ฐ ๋ฐ์ดํฐ ๋ก๊ฑฐ์ ๊ฐ์ ๊ณผํ ๊ธฐ๊ธฐ์ ์ก์ธ์คํ๊ณ ์ ์ดํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๊ฒฉ ๋ฐ์ดํฐ ์์ง, ๋ถ์ ๋ฐ ํ์ ์ด ์ฉ์ดํด์ง๋๋ค. ์ ์ธ๊ณ ๋ํ์ ์น ๊ธฐ๋ฐ ์คํ์ค ์ค์ ์ ํํ์ ๋๋ฆฌ๊ณ ์์ต๋๋ค.
- ์ฐ์ ์๋ํ: ์๊ฒฉ ๋ชจ๋ํฐ๋ง, ์ ์ด ๋ฐ ์ง๋จ์ ์ํด ์น ๊ธฐ๋ฐ ๋์๋ณด๋๋ฅผ ์ฐ์ ์ฅ๋น์ ํตํฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ธก ์ ์ง ๋ณด์๊ฐ ๊ฐ๋ฅํ๊ณ ์ด์ ํจ์จ์ฑ์ด ํฅ์๋ฉ๋๋ค.
- ์๋ฃ ๊ธฐ๊ธฐ: ํ์ ๋ชจ๋ํฐ, ํ๋น ์ธก์ ๊ธฐ ๋ฐ EKG ๊ธฐ๊ธฐ์ ๊ฐ์ ์๋ฃ ๊ธฐ๊ธฐ์ฉ ์น ๊ธฐ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฐํ์ฌ ์๊ฒฉ ํ์ ๋ชจ๋ํฐ๋ง ๋ฐ ์๊ฒฉ ์๋ฃ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ํฉ๋๋ค. ์ด ์์ญ์์ ์๊ฒฉํ ๋ณด์ ๋ฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ํ์ค์ ์ค์ํ์ญ์์ค.
- ๊ฒ์ ์ฃผ๋ณ ์ฅ์น: ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ง์ฐ์ค, ํค๋ณด๋ ๋ฐ ํค๋์ ๊ณผ ๊ฐ์ ๊ฒ์ ์ฃผ๋ณ ์ฅ์น๋ฅผ ์ฌ์ฉ์ ์ ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์กฐ๋ช ํจ๊ณผ๋ฅผ ์กฐ์ ํ๊ณ , ๋ฒํผ์ ๋ค์ ๋งคํํ๊ณ , ํ๋กํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ ํ๋ก๊ทธ๋๋ฐ: ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๋ฅผ ํ๋ก๊ทธ๋๋ฐํ๊ณ ๋๋ฒ๊น ํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ์ด๋ณด์๊ฐ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. Arduino์ ๊ฐ์ ํ๋ซํผ์ด ์์ฒญ๋ ํํ์ ๋๋ฆฌ๊ณ ์์ต๋๋ค.
- ์น ์๋ฆฌ์ผ ํฐ๋ฏธ๋: ์๋ฒ ๋๋ ์์คํ , IoT ์ฅ์น ๋ฐ ๊ธฐํ ์๋ฆฌ์ผ ์ง์ ํ๋์จ์ด์ ํต์ ํ๊ธฐ ์ํ ์น ๊ธฐ๋ฐ ์๋ฆฌ์ผ ํฐ๋ฏธ๋์ ๋ง๋ญ๋๋ค. ์ด๋ฅผ ํตํด ํ๋ซํผ๋ณ ํฐ๋ฏธ๋ ์๋ฎฌ๋ ์ดํฐ์ ๋ํ ์ข ์์ฑ์ด ์ ๊ฑฐ๋ฉ๋๋ค.
- ํ์จ์ด ์ ๋ฐ์ดํธ: ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ง์ USB ์ฅ์น์์ ํ์จ์ด ์ ๋ฐ์ดํธ๋ฅผ ์ํํ์ฌ ์ ๋ฐ์ดํธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ์ค๋ฅ ์ํ์ ์ค์ ๋๋ค. ์ ์กฐ์ ์ฒด์์ ์์ฌ์ด ์ ํ ์ ๋ฐ์ดํธ๋ฅผ ์ํด WebUSB๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
๋ณด์ ๊ณ ๋ ค ์ฌํญ
์ง์ ํ๋์จ์ด ์ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ ๋๋ ๋ณด์์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. WebUSB๋ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ํตํฉํฉ๋๋ค.
- ์ฌ์ฉ์ ๋์: ์น์ฌ์ดํธ๋ ๋ช ์์ ์ธ ์ฌ์ฉ์ ๊ถํ ์์ด๋ USB ์ฅ์น์ ์ก์ธ์คํ ์ ์์ต๋๋ค. `navigator.usb.requestDevice()` ๋ฉ์๋๋ ํญ์ ๊ถํ ํ๋กฌํํธ๋ฅผ ํ์ํ์ฌ ์ฌ์ฉ์๊ฐ ๊ณต์ ํ ์ฅ์น๋ฅผ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
- HTTPS ์๊ตฌ ์ฌํญ: WebUSB๋ HTTPS๋ฅผ ํตํด ์ ๊ณต๋๋ ์น์ฌ์ดํธ์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ์ ํต์ ์ด ์ํธํ๋ฉ๋๋ค.
- Origin ๊ธฐ๋ฐ ์ก์ธ์ค: USB ์ฅ์น๋ ํน์ Origin(๋๋ฉ์ธ)๊ณผ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ๊ถํ์ ๋ถ์ฌํ์ง ์๋ ํ ๋ค๋ฅธ ์น์ฌ์ดํธ๋ ์ฅ์น์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ์๋๋ฐ์ฑ: WebUSB๋ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ ์๋๋ฐ์ค ๋ด์์ ์๋ํ์ฌ ์ ์ฑ ์ฝ๋์ ์ ์ฌ์ ์ํฅ์ ์ ํํฉ๋๋ค.
- ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ: ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด๋ WebUSB API์ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ์ํํฉ๋๋ค.
์ด๋ฌํ ๋ณด์ ์กฐ์น์๋ ๋ถ๊ตฌํ๊ณ ์น์ฌ์ดํธ์ USB ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ๋๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ๋ขฐํ ์ ์๋ ์น์ฌ์ดํธ์๋ง ๊ถํ์ ๋ถ์ฌํ๊ณ ํ์ํ ์ด์ ์ ๋ํ ๋ช ํํ ์ค๋ช ์์ด USB ์ฅ์น์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ฒญํ๋ ์น์ฌ์ดํธ๋ ์ฃผ์ํ์ญ์์ค.
๋ธ๋ผ์ฐ์ ์ง์
WebUSB๋ ํ์ฌ ๋ค์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋ฉ๋๋ค.
- Google Chrome: ๋ฒ์ 61๋ถํฐ ์์ ์ง์.
- Microsoft Edge: ๋ฒ์ 79(Chromium ๊ธฐ๋ฐ Edge)๋ถํฐ ์์ ์ง์.
- Opera: ์์ ์ง์.
๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ๋ํ ์ง์์ ๊ณ ๋ ค ์ค์ ๋๋ค. ์ต์ ์ ๋ณด๋ ๋ธ๋ผ์ฐ์ ์ค๋ช ์๋ฅผ ํ์ธํ์ญ์์ค.
WebUSB vs. ๊ธฐํ USB ํต์ ๋ฐฉ๋ฒ
๊ณผ๊ฑฐ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ USB ์ฅ์น์ ์ํธ ์์ฉํ๋ ๊ฒ์ด ๋ณต์กํ๊ณ ์ข ์ข ์์ ํ์ง ์์ ํ๋ก์ธ์ค์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ด ํ์ํ์ต๋๋ค.
- ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ : ์ด๋ ์์คํ ์ ํ๋์จ์ด์ ๋ํ ์ ์ฒด ์ก์ธ์ค๋ฅผ ์ ๊ณตํ์ง๋ง ์ฌ์ฉ์๊ฐ ํ๋ซํผ๋ณ ์ํํธ์จ์ด๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํด์ผ ํ์ต๋๋ค. ์ด๋ ๋ณด์ ์ํ์ ์ด๋ํ๊ณ ์ฌ์ฉ์์๊ฒ ์ง์ ์ฅ๋ฒฝ์ ๋ง๋ค์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ํ์ฅ: ํ์ฅ์ USB ์ฅ์น์ ์ก์ธ์คํ ์ ์์ง๋ง ์ข ์ข ์์น๋ ๊ถํ์ด ํ์ํ๊ณ ๋ณด์ ์ทจ์ฝ์ ์ ๋์ ํ ์ ์์ต๋๋ค.
- NPAPI ํ๋ฌ๊ทธ์ธ: NPAPI(Netscape Plugin API)๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์์ฑ๋ ํ๋ฌ๊ทธ์ธ์ ์คํํ ์ ์๋๋ก ํ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ์ ์ ๋๋ค. NPAPI ํ๋ฌ๊ทธ์ธ์ ์ฃผ์ ๋ณด์ ์ทจ์ฝ์ ์ ์์ธ์ด์์ผ๋ฉฐ ๊ฒฐ๊ตญ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ฑฐ๋์์ต๋๋ค.
WebUSB๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๋ํ ์ฐ์ํ ๋์์ ์ ๊ณตํ์ฌ ๋ธ๋ผ์ฐ์ ์์ USB ์ฅ์น์ ์ํธ ์์ฉํ๋ ์์ ํ๊ณ ํ์คํ๋ ํฌ๋ก์ค ํ๋ซํผ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ , ๋ธ๋ผ์ฐ์ ํ์ฅ ๋๋ NPAPI ํ๋ฌ๊ทธ์ธ์ด ํ์ ์์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ๋ณด์์ ๊ฐ์ ํฉ๋๋ค.
WebUSB๋ก ๊ฐ๋ฐ: ๋ชจ๋ฒ ์ฌ๋ก
WebUSB ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ผ๋์ ๋์ญ์์ค.
- ๋ช ํํ ์ค๋ช ์ ๊ณต: USB ์ฅ์น์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ฒญํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ก์ธ์คํด์ผ ํ๋ ์ด์ ์ ์ฌ์ฉ ๋ชฉ์ ์ ์ฌ์ฉ์์๊ฒ ์ค๋ช ํฉ๋๋ค. ํฌ๋ช ์ฑ์ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๊ณ ์ฌ์ฉ์๊ฐ ๊ถํ์ ๋ถ์ฌํ๋๋ก ์ฅ๋ คํฉ๋๋ค.
- ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ: ์ฅ์น ์ฐ๊ฒฐ ๋๊น, ๊ถํ ๊ฑฐ๋ถ ๋ฐ ํต์ ์ค๋ฅ์ ๊ฐ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ์ตํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ธฐ๋ฅ ๊ฐ์ง ์ฌ์ฉ: WebUSB API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋์ง ํ์ธํฉ๋๋ค. WebUSB๋ฅผ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์ ๋ํ ๋์ฒด ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ก ์ต์ ํ: ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋๊ธฐ ์๊ฐ์ ์ต์ํํ๊ณ ์ฒ๋ฆฌ๋์ ์ต๋ํํฉ๋๋ค. ๋๋ ๋ฐ์ดํฐ ์ ์ก์๋ ๋๋ ์ ์ก ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
- USB ํ์ค ์ค์: ๊ด๋ฒ์ํ ์ฅ์น์์ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด USB ํ์ค ๋ฐ ์ฌ์์ ์ค์ํฉ๋๋ค.
- ๋ณด์ ์ฐ์ ์: ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ณ USB ์ฅ์น์ ๋ํ ๋ฌด๋จ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ตฌํํฉ๋๋ค.
- ๊ตญ์ ํ ๊ณ ๋ ค: ์ฌ๋ฌ ์ธ์ด์ ์ง์ญ์ ์ง์ํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํฉ๋๋ค. ํ ์คํธ ์ธ์ฝ๋ฉ์๋ ์ ๋์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ๋ค์ํ USB ์ฅ์น์ ๋ธ๋ผ์ฐ์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ฌ ํธํ์ฑ ๋ฐ ์์ ์ฑ์ ํ์ธํฉ๋๋ค.
WebUSB์ ๋ฏธ๋
WebUSB๋ ์น์์ ํ๋์จ์ด์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ํ์ ํ ์ ์ฌ๋ ฅ์ด ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ๊ณ์ ์ฆ๊ฐํ๊ณ API๊ฐ ์ฑ์ํด์ง์ ๋ฐ๋ผ ๋์ฑ ํ์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฑ์ฅํ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค. ํฅํ ๊ฐ๋ฐ์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ํฅ์๋ ๋ณด์ ๊ธฐ๋ฅ: ์๋ก์ด ์ํ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํ ํฅ์๋ ๋ณด์ ๋ฉ์ปค๋์ฆ.
- ํ์ฅ๋ ์ฅ์น ์ง์: ๋ ๊ด๋ฒ์ํ USB ์ฅ์น ํด๋์ค์ ๋ํ ์ง์.
- WebAssembly์์ ํตํฉ: WebUSB์ WebAssembly๋ฅผ ๊ฒฐํฉํ์ฌ ๊ณ ์ฑ๋ฅ ํ๋์จ์ด ์ฐ๊ฒฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ญ๋๋ค.
- ํ์คํ๋ ์ฅ์น ์ค๋ช ์: ์ฅ์น ๊ฒ์ ๋ฐ ๊ตฌ์ฑ์ ๊ฐ์ํํ๊ธฐ ์ํ ํ์คํ๋ ์ฅ์น ์ค๋ช ์.
- ํฅ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค: USB ๊ถํ ๋ถ์ฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ณด๋ค ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค.
๊ฒฐ๋ก
WebUSB๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด USB ์ฅ์น์ ์ง์ ํต์ ํ ์ ์๋๋ก ์ง์ํ๋ ํ๊ธฐ์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ํํ๊ณ ๋ณด์์ ๊ฐ์ ํ๋ฉฐ ์น ๊ธฐ๋ฐ ํ๋์จ์ด ์ ์ด ๋ฐ ๋ฐ์ดํฐ ์์ง์ ์ํ ๊ด๋ํ ์์ญ์ ์ด์ด์ค๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ํ๋๋๊ณ API๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ WebUSB๋ ์น์ ๋ฏธ๋๋ฅผ ์ํ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์๊ฐ ๋ ๊ฒ์ ๋๋ค. ์น ๊ฐ๋ฐ์, ํ๋์จ์ด ์ ํธ๊ฐ ๋๋ ๊ธฐ์ ๊ฐ์ด๋ WebUSB๋ ํ์ ์ ์ด๊ณ ๋งค๋ ฅ์ ์ธ ์น ๊ธฐ๋ฐ ๊ฒฝํ์ ๋ง๋ค ์ ์๋ ํฅ๋ฏธ๋ก์ด ์๋ก์ด ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ฐ๋ฅ์ฑ์ ํ์ํ๊ณ , API๋ฅผ ์คํํ๊ณ , ์ฑ์ฅํ๋ WebUSB ์ํ๊ณ์ ๊ธฐ์ฌํ์ญ์์ค. ํ๋์จ์ด ์ฐ๊ฒฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋๊ฐ ์ฌ๊ธฐ์ ์์ต๋๋ค.