본문으로 이동geul.io

Native Shell(NSH)과 GPUI Kit 차이, 어떤 앱에 맞고 무엇을 포기하나

올린이 geul날짜 조회 5
  • GPUI Kit은 Zed의 gpui 위에 버튼, 표, 코드 편집기 같은 부품을 75개 넘게 얹은 데스크톱 앱용 Rust 프레임워크임. 예전 이름은 gpui-component

  • Native Shell(NSH)은 앱 하나를 iOS, 안드로이드, macOS, Windows, Linux, 웹에 띄우는 Rust 프레임워크임. 화면을 직접 그리지 않고 운영체제에 원래 있는 화면 부품을 씀

  • 둘 다 증권사 Longbridge(롱브릿지)가 만들었고, Apache-2.0이라 회사 앱에도 무료로 쓸 수 있음

  • 무거운 데스크톱 도구는 GPUI Kit, 휴대폰까지 가야 하거나 출시 뒤에 화면을 내려보내야 하면 NSH가 맞음

  • NSH는 10월 17일 처음 나와 아직 0.3 버전이라, 지금 제품에 쓰기엔 GPUI Kit보다 위험이 큼 (11월 4일 기준)

GPUI Kit이란, gpui-component가 바뀐 이름

gpui로 데스크톱 앱을 만들 때 필요한 부품과 기반 코드를 한 묶음으로 모은 것임.

  • gpui는 코드 편집기 Zed 팀이 만든 Rust UI 프레임워크로, 화면을 GPU로 직접 그림. 다만 완성된 버튼이나 입력창이 거의 없음

  • Longbridge가 자사 증권 앱 Longbridge Pro를 만들면서 이 빈자리를 채우려고 만든 게 gpui-component임

  • 9월 3일 나온 0.6 버전부터 이름을 GPUI Kit으로 바꾸고 세 층으로 나눔

    • gpui-component: 모양까지 갖춘 완성 부품. 바로 앱을 만들 때 씀

    • gpui-base: 모양 없이 동작만 있는 부품. 자기 디자인 시스템을 만들 때 씀

    • gpui-shell: 출시한 앱에 자바스크립트로 기능을 덧붙일 수 있게 해 줌

  • 앱에는 gpui-kit 하나만 넣으면 버전이 맞는 gpui까지 함께 들어옴. 최신은 11월 2일 나온 0.9.0

  • 웹에 빗대면 gpui는 HTML과 Tailwind, gpui-base는 Base UI, gpui-component는 shadcn/ui에 해당한다고 공식 문서가 설명함

Native Shell(NSH)이란, 운영체제 화면 부품을 쓰는 Rust 프레임워크

휴대폰, 데스크톱, 웹에 같은 앱을 띄우되, 화면은 운영체제마다 원래 있는 부품으로 그림.

  • iOS는 UIKit, 안드로이드는 안드로이드 기본 뷰, macOS는 AppKit, Windows는 Win32, Linux는 GTK 4, 웹은 그냥 HTML로 그림

  • 그래서 글자 선택, 복사 메뉴, 화면 낭독기가 운영체제 것 그대로 동작함. 같은 메뉴도 데스크톱에선 팝업, 휴대폰에선 아래에서 올라오는 시트로 뜸

  • 앱은 Rust로 짜도 되고, 화면만 TSX로 짜도 되고, 둘을 섞어도 됨. TSX는 React에서 쓰는, 코드 안에 화면 태그를 섞어 쓰는 TypeScript 문법임

  • 처음엔 Longbridge 휴대폰 앱에 플러그인 화면을 넣으려고 만들었음. gpui로 휴대폰 화면을 그리면 글자 선택과 입력기를 전부 새로 만들어야 해서 운영체제 부품을 쓰기로 했다고 밝힘

  • 10월 17일 0.1, 10월 26일 0.3.0이 나옴

  • nsh 명령어 하나로 앱 생성, 실행, 패키징을 다 함. Mac에서는 brew install longbridge/tap/nsh로 설치함

어떤 앱 개발에 맞나

데스크톱에서 데이터를 잔뜩 다루면 GPUI Kit, 흔한 화면을 여러 기기에 띄우려면 NSH임.

  • GPUI Kit이 맞는 앱

    • 시세 단말, 데이터베이스 클라이언트, 로그 뷰어처럼 표가 수십만 줄에 이르는 도구

    • 코드 편집기나 변경 내용 비교 화면이 들어가는 개발 도구. 20만 줄 파일도 버틴다는 편집기가 들어 있음

    • 패널을 끌어다 붙이는 작업 공간, 차트, 마크다운 표시가 필요한 앱

  • NSH가 맞는 앱

    • 채팅, 메일, 설정, 입력 폼처럼 몇 군데만 바뀌고 나머지는 가만히 있는 화면

    • 휴대폰과 데스크톱, 웹에서 같은 로직을 쓰고 싶은 앱

    • 이미 있는 iOS, 안드로이드 앱에 화면 하나만 끼워 넣고 싶은 경우

  • 둘을 함께 쓸 수도 있음. NSH에는 GPUI 백엔드가 있어서 GPUI Kit 앱 안에 NSH 화면을 띄울 수 있음

고르면 얻는 것

GPUI Kit은 검증된 부품, NSH는 기기마다 자연스러운 동작과 출시 뒤 화면 배포가 강점임.

  • GPUI Kit

    • 실제 서비스 중인 증권 앱에 처음부터 써 온 부품이라 표, 편집기, 패널 배치를 바로 쓸 만함

    • 직접 그리니 운영체제마다 화면이 똑같음. 가장 단순한 앱이 약 12MB (공식 추정치)

    • 화면에 띄우지 않은 창에서 부품을 실제로 누르고 입력해 보는 UI 테스트 도구가 들어 있음

    • Claude Code, Cursor 같은 코딩 에이전트용 스킬을 공식으로 줌 (npx skills add longbridge/gpui-kit)

  • NSH

    • 글자 입력과 선택을 운영체제가 맡아서, 한글 입력기를 따로 맞춰 볼 일이 적음. Windows만 NSH가 만든 입력창에 운영체제 입력기를 붙이는 방식임

    • 출시한 앱에 TSX 화면을 서명한 묶음으로 내려보낼 수 있음. 앱은 서명을 확인한 뒤, 허락한 네트워크 주소와 기능만 쓸 수 있는 격리 공간에서 돌림

    • 그래서 AI가 만든 예약 카드나 입력 폼을 앱 안에 바로 띄우기 좋음. 공식 문서도 이 쓰임을 주요 용도로 꼽음

    • Rust로만 짠 앱에는 자바스크립트 엔진이 아예 들어가지 않음

고르면 포기하는 것

GPUI Kit은 휴대폰을, NSH는 안정성과 쉴 새 없이 바뀌는 화면의 성능을 내줘야 함.

  • GPUI Kit

    • 사실상 데스크톱 전용임. iOS는 실험 단계이고, 웹(WebAssembly)은 예제는 돌아가지만 실제 배포 방법으로는 아직 검증하지 않았다고 스스로 밝힘

    • 화면까지 전부 Rust 코드로 짜야 함. 끌어다 놓으며 화면을 만드는 편집기가 없음

    • 아직 1.0 전이라 버전이 오를 때 기존 코드가 깨지는 변경이 자주 나옴. 0.9.0에서도 테마 값을 직접 채우던 코드가 컴파일되지 않게 바뀜

    • 한글 입력과 화면 낭독기 지원은 gpui가 직접 구현한 것이라, 대상 운영체제마다 확인해 봐야 함. Linux는 Vulkan 드라이버가 꼭 있어야 함

  • NSH

    • 나온 지 3주가 안 됨. 0.2에서 API 이름을 통째로 바꿨고 0.3에서 import 경로를 바꿔, 버전마다 기존 앱을 고쳐야 했음. 아직 호환을 보장하는 버전이 아니라고 직접 밝힘

    • 운영체제 부품으로 그리니 플랫폼마다 화면이 조금씩 다름. 픽셀까지 똑같아야 하면 Flutter처럼 직접 그리는 쪽이 낫다고 공식 문서도 안내함

    • 기본 부품(nsh/base)은 동작만 있고 모양이 없음. Tailwind 클래스와 테마로 앱이 직접 꾸며야 함

    • TSX는 QuickJS라는 가벼운 자바스크립트 해석기로 돌아서 무거운 계산엔 느림. 그런 계산은 Rust 모듈로 빼야 함

    • npm 패키지는 화면(DOM)을 건드리지 않는 것만 쓸 수 있어, React 부품 라이브러리는 못 씀. 패키지가 많이 필요하면 React Native, Flutter, Qt가 낫다고 공식 문서가 안내함

    • 화면 전체가 쉬지 않고 바뀌는 시세 단말에는 무거움. NSH 문서도 이런 앱엔 GPUI 쪽을 권함

      • 500줄 시세 표 CPU 사용량(Longbridge 측정): 초당 1,000건 갱신은 NSH 18%, GPUI Fast 20%로 비슷함

      • 초당 20,000건이면 NSH 73~78%, GPUI Fast 25%로 세 배 가까이 벌어짐. GPUI Fast는 Longbridge가 gpui를 고쳐 만든 빠른 버전으로, GPUI Kit에서 골라 쓸 수 있음

자주 묻는 질문

  • gpuikit과 gpui-kit은 같은 건가?

    • 다름. gpuikit은 개인 개발자 Nate Butler가 만든 부품 라이브러리이고, gpui-kit이 Longbridge의 GPUI Kit임. 공교롭게 둘 다 지금 0.9 버전임

  • crates.io의 nsh가 이 NSH인가?

    • 아님. crates.io의 nsh는 2018년에 나온 다른 명령줄 셸임. Native Shell은 nsh.dev의 설치 스크립트나 Homebrew로 받음

  • 지원하는 운영체제 버전은?

    • NSH: iOS 15, 안드로이드 9, macOS 14, Windows 10 1809, GTK 4.14 이상

    • GPUI Kit: macOS 12, Windows 10 이상. Linux는 Vulkan이 필요함

  • 일렉트론이나 타우리 대신 쓸 수 있나?

    • 데스크톱에선 둘 다 브라우저 없이 돌아가서 가벼움. 대신 웹에서 쓰던 React 부품은 가져다 쓸 수 없음. 자세한 비교는 gpui 글에 정리함

좋아요저장

댓글

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.