홈서버 구축한 기념으로 게임을 만들어 볼까 하는데요
웹이란 뭘까 생각해 봤습니다
통신 아닐까요?
권한을 인증하고 데이터를 주고 받고 릴레이하고 기록을 남기는 역할
웹앱(PWA) 게임을 만들어 볼까 합니다. 재능인증(주식) 소셜(만남) 디펜스(땅따먹기) 게임 구상중
HTML5 형식에서 게임엔진이 크게 js vs wasm(js의 컴포넌트로서)으로 분류 됩니다
우선 프론트엔드는 cloudflare dns, pages, cdn, acess 를 최대한 활용해서 웹접속 트래픽, 대역폭, 보안, 인증을 여기서 다 처리해서 홈서버 백엔드 자원을 최대한 아낍니다
백엔드 홈서버1은 cloudflared tunnel - nginx - go gin API 서버로 https, wss, webrtc 로 들어온 요청에 대해서 권한을 인증하고 데이터를 주고 받고 릴레이 하고 데이터 서버2은 redis streams의 메세지 허브와 작업 큐도 활용하고 postgre DB 등에 기록을 남깁니다
클라이언트 웹브라우저 쪽에서 더 열심히 해줘야 됩니다! 그래야 홈서버의 자원을 더 아낄 수 있습니다
홈서버는 그야말로 웹의 역할을 하면 되는거고 클라이언트 모바일폰들이 주인공입니다
프론트엔드는 모바일폰들이 노는 호텔 연회장이라면
홈서버 백엔드는 연회장 출입 관리, 손님 응대, 음식음료 공급 하는 역할이겠죠
webrtc와 wss를 적절하게 사용해서 서버 부하를 줄여야 됩니다
- webrtc과 클라이언트 웹브라우저들끼리 실시간(tcp/udp) 통신으로 게임 캐릭터의 위치, 충돌, 키보드입력, 서로간의 동영상/음성 주고받기 같은걸 처리하고 클라이언트 중에 peer로 지정된 1명으로부터 클라이언트간에 공유된 게임 상태 정보를 특정시간 간격으로 wss 통신으로 서버로 전송해 redis cache에 넣고 클라이언트들을 인증하고 동기화하고 DB에 저장할건 저장합니다
- 클라이언트 웹브라우저와 서버간에는 wss로 연결되어 있어서 webrtc릴레이, 채팅, 점수, 랭킹 등을 주고 받습니다
wasm을 써야 됩니다
sveltekit 빌드 웹정적 js 파일 틀에 wasm을 붙여줘야 됩니다. js 단독보다 5~10배 빠릅니다.
아까운 홈서버의 자원으로 계산을 하지 말고 최대한 클라이언트 컴퓨팅 자원을 활용해야 됩니다(안터지도록)
wasm을 쓰면 js보다 빌드크기가 훨씬 커지지만 js 단독으로는 불가능한 수준까지.. 거의 PC애플리케이션 수준까지 성능을 뽑을 수 있습니다
그리고 신규 PC 앱을 웹브라우저로 다운로드할때 경고 때문에 배포가 어려운데 PWA는 웹브라우저로 웹사이트에 접속만 하면 막바로 앱을 설치할 수 있으니 혁명이죠(웹의 구조상 공급자와 사용자를 다양한 방법으로 다양한 차원에서 인증하기 때문에 경고가 줄어드는 것이겠죠)
canvas에 단순 2D라면 canvas2d, 3D라면 webGL, 복잡한 3D 및 GPT생성까지 한다면 webGPU를 쓰는데
게임의 맵을 미리 레벨디자인 할수도 있지만 절차적 생성으로 알고리즘에 따라 랜덤하게 뽑아낼 수도 있습니다
NPC들의 집단 무의식(행동양식, 목표 등)을 설정하는 것도 알고리즘에 따라 랜덤하게 뽑아낼 수도 있겠죠
그런데 알고리즘과 랜덤 함수가 썩 마음에 들지는 않습니다. 양자컴퓨팅이 아닌 이상 진짜 랜덤은 아닌거고, 그 랜덤이라는 것도 자연의 변화나 생물의 상태변화와는 별 관계가 없다는 것도 아쉬운 부분이고요
webGPT/webGPU를 써야 됩니다
webGPU를 사용할 수 있는 환경이라면(일단 모바일폰은 불가능, RTX 4060 이상은 되어야 원활) webGPT가 가능합니다
webGPT란 용어는 존재하지 않지만 어쨋든 LLM tiny 양자버전으로서 수십MB의 크기(wasm 등으로)라서
웹브라우저로 다운로드 받아서 클라이언트 웹브라우저 상에서 AI 추론 텍스트 생성을 할 수 있는 것들을 말합니다
gpt2 정도에 30토큰/s만 되더라도 게임 맵 절차적 생성, NPC 집단 무의식 같은것을 알고리즘과 랜덤함수보다는 차원이 다른 것을 만들 수 있습니다
저도 아직 공부중인데 아직은 모바일폰에서도 안되고 사무용PC에서도 어쨋든 안됩니다. 괜히 webGPU 앱 돌리려다가 GPU 메모리가 작으면 컴퓨터가 멈춰 버립니다.
젯슨 나노 키트도 너무 느리고 젯슨 오린 나노 수퍼 16GB 정도면
GPT2-tiny INT8 TensorRT 25~35 토큰/초
이 정도 되네요. 젯슨 오린 나노 수퍼 16GB가 미니키트라서 전기는 정말 작게 먹을 것 같은데 그래도 가격이 70~80만원 한다고 하던데
전기값 신경 안 쓴다면
HP Z620 RTX 2080 Super 25~30 tok/s 50~60만원 이런거 중고로 사도 되겠고
아니면 클라우드 LLM 추론 API 저렴한 걸로 알아봐도 되겠고요
클라우드 대안: 가장 싼 LLM 추론 API 서비스
A. Replicate
모델별 pay-per-use
예: LLaMA 2 7B Q4: 약 $0.0001/token
단점: cold start latency
B. RunPod
on-demand GPU, 가격:
A10G (24GB): $0.2/hour
RTX 4090: $0.5/hour
LLaMA2 7B도 10+ tok/s easily
C. Oobabooga (Text Generation WebUI) + HuggingFace inference endpoints
HuggingFace Spaces의 TGI 엔드포인트 호출 가능
무료 티어는 느리며 대기 있음
Pro 요금제 $9 이상부터는 priority queue
1. Groq
현재 가장 빠른 LLM API 제공자.
mixtral, llama-3-70b, gemma-7b, llama-2-70b 등을 초당 수백 토큰 속도로 생성.
개인 사용자도 무료 API 키 발급됨 (유료제 전환 예정).
2. Together.ai
tinyllama, phi, llama, mistral, deepseek 등 다양한 모델 제공.
vLLM 백엔드라 느리지만 무료.
3. OpenRouter.ai
다양한 모델을 프록시 형태로 통합해 사용하는 서비스.
phi-3, gemma, llama-3, mistral, qwen 등 양자화 버전 선택 가능.
대부분 무료, 일부 모델은 토큰당 $0.0001 미만.