브라우저에서 AI 돌리는 시대, 이제 진짜 왔습니다

안녕하세요, 개발자 여러분 👋 오늘은 구글이 조용히(?) 하지만 굉장히 임팩트 있게 공개한 LiteRT.js 이야기를 해볼게요.

한 줄로 요약하면 이렇습니다.

"TensorFlow.js는 이제 레거시입니다. .tflite 모델을 브라우저에서 네이티브 성능으로 돌리세요."

기존 웹 AI는 솔직히 말하면 좀 답답했어요. TensorFlow.js는 자바스크립트 커널 기반이라 무거운 모델을 돌리면 팬이 돌아가기 시작하죠. 그런데 LiteRT.js는 안드로이드/iOS/데스크톱에서 이미 검증된 LiteRT 런타임을 WebAssembly로 그대로 가져왔습니다.

이게 왜 중요하냐면요:

  • 🔒 프라이버시: 추론이 100% 클라이언트에서 일어나요. 서버로 이미지/음성이 안 넘어갑니다.
  • 💰 서버 비용 0원: GPU 서버 안 돌려도 됩니다.
  • ⚡ 초저지연: 네트워크 왕복이 없으니 실시간 UX가 가능해요.
  • 🔁 크로스 플랫폼 통일: 모바일/엣지/웹이 같은 모델, 같은 스택을 씁니다.

특히 국내 스타트업 환경에서는 추론 서버 유지비가 꽤 부담인데, 이 부분이 상당히 매력적이에요. 자세한 배경은 근거자료에서 확인하실 수 있습니다.

Developer running LiteRT.js WebAssembly AI inference in browser DevTools console System Abstract Visual

핵심 기능 뜯어보기: 왜 3배, 60배가 나오는가

1. 하드웨어 가속 스택이 다릅니다

LiteRT.js의 성능 비결은 WebAssembly로 컴파일된 네이티브 런타임이에요. 백엔드는 이렇게 나뉩니다.

백엔드대상 하드웨어용도
XNNPACKCPU기본 폴백, 안정성
ML Drift (WebGPU)GPU비전/오디오 실시간 처리
WebNN (via CoreML 등)NPU온디바이스 생성 AI (로드맵)

벤치마크 결과가 인상적인데요, 객체 추적·오디오 전사·이미지 조작 같은 실시간 워크로드에서 CPU 대비 GPU/NPU가 5~60배 빠릅니다. 그리고 기존 웹 런타임 대비해서도 최대 3배 우위를 보여요.

2. PyTorch → .tflite 원스텝 변환

LiteRT Torch를 쓰면 PyTorch 모델을 한 단계로 변환할 수 있어요. 여기에 AI Edge Quantizer로 레이어별 양자화 스킴을 커스터마이즈하면 사이즈는 줄이고 성능은 올리면서 품질은 유지할 수 있습니다.

3. 코드가 진짜 짧습니다

자, 실제 사용 예시를 볼까요? GPU 가속으로 .tflite 모델을 로드하고 추론하는 코드입니다.

// LiteRT.js 코어 모듈 임포트
import { loadLiteRt, loadAndCompile, Tensor } from '@litertjs/core';

// 1. WebAssembly 런타임 초기화 (wasm 디렉토리 경로 지정)
await loadLiteRt('path/to/wasm/directory/');

// 2. .tflite 모델 로드 및 WebGPU 백엔드로 컴파일
const model = await loadAndCompile('path/to/your/model.tflite', {
  accelerator: 'webgpu' // 'wasm' 또는 'webnn'도 가능
});

// 3. 입력 텐서 준비 (예: 1x3x244x244 이미지 배치)
const inputTypedArray = new Float32Array(1 * 3 * 244 * 244);
const inputTensor = new Tensor(inputTypedArray, [1, 3, 244, 244]);

// 4. 추론 실행
const results = await model.run(inputTensor);

// 5. 결과는 GPU에 있으므로 CPU로 옮겨서 TypedArray로 변환
const resultArray = (await results[0].moveTo('wasm')).toTypedArray();

기존 TensorFlow.js로 .tflite를 돌리려던 분들이라면, 이 코드가 얼마나 깔끔한지 바로 아실 거예요. accelerator 옵션 하나만 바꾸면 CPU/GPU/NPU를 갈아끼울 수 있다는 게 핵심입니다.

4. 실전 데모: YOLO와 Depth Anything

공식 데모에서는 Ultralytics YOLO 모델이 Ultralytics Python 패키지에 공식 LiteRT export로 통합됐어요. 몇 줄이면 모바일·엣지·브라우저에 배포됩니다. 또 Depth Anything V2로 웹캠 영상을 실시간 3D 포인트 클라우드로 바꾸는 데모도 WebGPU로 돌아가요. Real-ESRGAN으로 128x128 패치를 512x512로 업스케일하는 것도 브라우저 안에서 됩니다.

LiteRT.js .tflite model running client-side AI in modern web browser tab Developer Related Image

이 기술의 한계와 주의사항 (냉정하게)

좋은 소식만 드리면 안 되니까, 실무에서 걸릴 만한 부분들을 짚어볼게요.

⚠️ 1. 초기 로딩 비용

WebAssembly 런타임 + 모델 파일을 처음 받을 때 수 MB~수십 MB의 다운로드가 발생합니다. 모바일 네트워크에서는 이게 UX를 망칠 수 있어요. 반드시 HTTP 캐시, Service Worker, IndexedDB 전략을 같이 설계하셔야 합니다.

⚠️ 2. WebGPU 브라우저 지원 편차

2024년 기준 Safari, Chrome은 WebGPU를 지원하지만 Firefox는 아직 실험 단계이고, 구형 안드로이드 WebView는 지원이 들쭉날쭉해요. 폴백 전략(XNNPACK CPU)을 반드시 준비해야 합니다.

⚠️ 3. NPU(WebNN)는 아직 로드맵

공식 발표에도 나오듯 WebNN은 upcoming입니다. 지금 당장 NPU 가속을 기대하면 안 되고, GPU(WebGPU) 기반으로 설계한 뒤 WebNN이 안정화되면 전환하는 전략이 현실적이에요.

⚠️ 4. 국내 SI/금융권 환경에서의 주의점

국내 SI나 금융권 프로젝트에서는 **CSP(Content Security Policy)**가 빡빡한 경우가 많아요. WebAssembly 실행은 wasm-unsafe-eval을 요구하는데, 이게 정책에 걸리면 아예 못 돌립니다. 프로젝트 초반에 보안팀과 반드시 협의하세요. 또 폐쇄망 환경에서는 wasm 바이너리를 사내 CDN에 두는 방식으로 설계해야 합니다.

⚠️ 5. TensorFlow.js 자산과의 호환

기존 TFJS로 만든 커스텀 레이어나 JS 커널이 있다면 그대로 못 씁니다. .tflite로 변환 가능한 모델만 옮겨야 해요. 마이그레이션 비용을 미리 산정하세요.

Laptop showing LiteRT.js WebGPU accelerated object detection demo in browser Development Concept Image

결론: 지금 시작해야 하는 이유

정리하겠습니다.

LiteRT.js는 "브라우저 AI의 다음 표준"이 될 가능성이 높습니다. 이유는 명확해요.

  1. 안드로이드/iOS/데스크톱에서 이미 검증된 런타임을 그대로 재사용합니다.
  2. PyTorch → .tflite → 브라우저까지 파이프라인이 통일됩니다.
  3. WebNN 로드맵까지 감안하면 NPU까지 커버하는 유일한 웹 AI 스택이 됩니다.

다음 단계 학습 방향을 제안드리면:

  • 1단계: 공식 LiteRT.js npm 패키지로 간단한 이미지 분류 모델부터 돌려보세요.
  • 2단계: YOLO 모델을 Ultralytics로 export해서 객체 탐지 데모를 만들어보세요.
  • 3단계: AI Edge Quantizer로 양자화를 적용해 모델 사이즈를 절반 이하로 줄여보세요.
  • 4단계: WebNN이 안정화되는 시점에 NPU 백엔드로 전환을 검토하세요.

함께 보면 좋은 글

브라우저 AI는 이제 "장난감"이 아니라 "프로덕션 옵션"입니다. 삽질 미리 하지 마시고, 공식 문서부터 훑어보세요 🚀

본 콘텐츠는 신뢰할 수 있는 출처를 바탕으로 AI 도구를 활용하여 초안이 작성되었으며, 편집자의 검토를 거쳐 발행되었습니다. 전문가의 조언을 대체하지 않습니다.