별도 앱 서버 없는 GL4SS: 이미지 생성 API의 전송 경계
GL4SS는 별도 앱 백엔드 없이 브라우저에서 OpenRouter API를 호출합니다. 서버형 생성 서비스, 로컬 모델 구동과 비교해 어떤 상황에 이 구조가 맞는지 정리했습니다.
- #GL4SS
- #이미지 생성
- #OpenRouter
- #AGPL
- #브라우저
AI 이미지 생성인데 별도 서비스 서버가 없습니다
GL4SS 자체의 앱 백엔드와 가입 계정을 두지 않고 브라우저에서 외부 API를 호출하는 구조입니다. OpenRouter 계정과 키는 필요하며, 모델 호출 비용도 내 OpenRouter 잔액에서 빠집니다.
요즘 생성 도구는 가입부터 요구하는 경우가 많죠. 이 프로젝트는 아예 반대편에 서 있습니다. 내가 만든 이미지와 프롬프트를 서비스 운영자의 서버에 남기지 않는 구조가 핵심이에요.
GL4SS로 할 수 있는 일
지도에 핀을 찍고, 연도를 돌리고, 하루 중 시각을 정한 뒤 레버를 당기면 그 장소 그 시대의 장면이 만들어집니다. 원하면 소리가 붙은 영상까지 나옵니다.
- 시간 범위: 2억 5,200만 년 전부터 서기 3050년까지
- 시간 눈금: 284개 정거장. 공룡 시대는 2,500만 년씩, 최근은 1년씩 — 변화량에 맞춰 간격이 다름
- 큐레이션된 장면 55개 — 클릭 한 번에 장소·좌표·연도·시각이 함께 세팅됨
- 지도는 Leaflet + Esri World Imagery. 끝까지 축소하면 지구본이 됨
연도 입력은 1969, 500 BC, 66 mya, 20000 years ago 같은 자연스러운 표기를 그대로 받습니다.
구조가 특이한 지점
서버가 없다
런타임 의존성이 네 개뿐입니다. React, React DOM, Leaflet, three.js. 그리고 백엔드·텔레메트리·계정이 전부 없습니다.
이게 의미하는 바는 단순합니다. 별도 GL4SS 앱 서버를 두지 않는 구조입니다. 다만 인증 키는 OpenRouter에 전송되고, 프롬프트와 생성 처리는 OpenRouter 및 선택한 모델 제공자를 거칩니다. 로컬 추론이나 외부 전송 없는 도구라는 뜻은 아닙니다. 모델을 아예 내 기기에서 돌리는 쪽은 4GB GPU로 대형 모델을 실행하는 AirLLM 편에서 다뤘습니다.
키를 저장하는 곳과 요청을 보내는 곳은 다릅니다
OpenRouter 키를 직접 넣습니다. CSP의 connect-src는 허용된 통신 목적지를 제한하지만, 허용된 API로 보내는 키와 프롬프트까지 차단하지는 않습니다. 브라우저 확장 프로그램·기기 접근·배포 코드도 별도로 신뢰할 수 있어야 합니다.
설정에는 키를 무료로 검증하는 버튼이 있고, 남은 잔액까지 보여줍니다. 키가 틀린 걸 생성 한 번 날려먹고 알게 되는 상황을 없앤 장치입니다.
생성 요청이 지나가는 경로
- 1. 내 브라우저
- 2. 서비스 서버 (프롬프트·결과 보관)
- 3. 모델 제공자
- 1. 내 브라우저 (키·결과 보관)
- 2. OpenRouter
- 3. 모델 제공자
키는 OpenRouter 인증에 쓰이며 프롬프트는 외부 모델 제공자에게 전달됩니다. CSP만으로 유출 가능성이 사라지지는 않습니다.
생성 요청을 보낼 때 비용이 발생합니다
기본 수동 생성에서는 레버로 생성 요청을 보낼 때 API 비용이 발생합니다. 미리 생성 옵션을 켜거나 영상 등 추가 요청을 하면 그 사용량도 확인해야 합니다. 시간을 돌려보는 것 자체는 무료이고, 보고 있던 그림은 레버를 당기기 전까지 그대로 유지됩니다.
저장소는 예전 동작을 이렇게 적어뒀습니다 — 스크럽을 멈추면 타임아웃으로 생성이 시작돼서, 잠깐 생각하는 것이 과금 대상이었다고. 지금은 그 동작을 껐고, 다음 정거장을 미리 만들어두는 옵션은 기본 꺼짐 상태의 옵트인으로 남겨뒀습니다.
생성된 프레임은 IndexedDB에 남습니다. 새로고침해도 살아 있고, 이미 가진 정거장은 무료로 즉시 복원됩니다.
모델을 사용자가 고른다
| 단계 | 기본값 | 교체 가능한 선택지 |
|---|---|---|
| 장면 기획 | google/gemini-3-flash-preview | — |
| 스틸 이미지 | x-ai/grok-imagine-image-quality | FLUX 2 Max, Nano Banana Pro, FLUX 2 Flex, Gemini 3.1 Flash |
| 영상 + 사운드 | bytedance/seedance-2.0 | Seedance Fast, Grok Imagine, Veo 3.1, Kling 3.0 |
전부 설정에서 바꿉니다. 시간을 훑는 동안에는 빠른 모델, 멈춰서 들여다볼 때는 고급 모델로 나눠 쓰라는 안내가 붙어 있습니다.
세 가지 구조 비교
같은 “AI로 그림을 만든다”도 구조가 다르면 걸리는 지점이 완전히 달라집니다.
| 기준 | 서버형 생성 서비스 | GL4SS 방식 (키 직접 입력·브라우저) | 로컬 모델 직접 구동 |
|---|---|---|---|
| 프롬프트·결과가 가는 곳 | 서비스 서버와 모델 제공자 | OpenRouter와 모델 제공자 | 로컬 실행 구성에 따라 다름 |
| 과금 | 구독 또는 크레딧 | 내 OpenRouter 잔액에서 사용량만큼 | GPU 전기·장비값 |
| 시작하는 데 걸리는 시간 | 가입하면 바로 | 키 발급 한 번 | 환경 구성 필요 |
| 모델 선택권 | 서비스가 정함 | 단계별로 직접 교체 | 완전 자유 |
| 서비스가 문 닫으면 | 못 씀 | 코드가 내 손에 있음 | 영향 없음 |
| 걸리는 제약 | 이용약관 | 라이선스(AGPL) | 하드웨어 |
서버형은 편하고, 로컬 구동은 통제권이 큽니다. GL4SS는 브라우저에서 바로 쓰면서도 프롬프트와 API 키를 별도 운영 서버에 남기지 않는 중간 선택지입니다.
이런 때 써볼 만합니다
- GL4SS 자체 가입 없이 이미지 생성 도구를 사용하려는 경우 — OpenRouter 계정과 API 키는 필요합니다
- 여러 이미지 모델을 실제로 비교해보고 싶을 때 — 같은 장면을 모델만 바꿔 다시 뽑을 수 있습니다
- 발표 자료나 수업의 도입 시각물이 필요할 때 — 55개 큐레이션 장면이 그대로 소재입니다
- 생성 서비스의 프롬프트 보관 정책이 걸릴 때
다른 도구를 고르는 편이 나을 때
- 사실을 주장해야 하는 자료 — 고증이 아니라 생성입니다
- 공용 PC — 키가 그 브라우저에 남습니다
- 사내 도구로 고쳐 배포하려는 경우 — AGPL-3.0 의무가 따라붙습니다
브라우저에 무언가를 저장하는 서비스를 직접 만든다면 쿠키·개인정보 고지가 따라옵니다. 그 문서는 Claude Code 스킬로 만드는 절차에 정리해뒀습니다.
직접 돌려보려면
git clone https://github.com/elder-plinius/GL4SS.git
cd GL4SS
npm install
npm run dev
OpenRouter 키를 발급받아 설정에 넣고, 검증 버튼으로 잔액까지 확인한 뒤 시작하면 됩니다.
오류 처리 방식도 참고할 만합니다. 문제가 생기면 키 없음 · 키 오류 · 크레딧 부족 · 요청 과다 · 모델 폐기 다섯 가지 중 무엇인지 한 문장으로 알려주고, 고치는 버튼을 하나만 보여줍니다. 재시도가 실제로 통할 상황에서만 재시도를 제안합니다.
쓰기 전에 확인할 비용·보안 기준
서버가 없다고 해서 완전한 로컬 도구는 아닙니다. 프롬프트와 생성 결과는 선택한 모델 제공자까지 이동합니다. 외부 전송 자체가 금지된 자료라면 GL4SS가 아니라 로컬 모델을 골라야 합니다.
개인 장비에서는 브라우저 저장소에 남은 키를 누가 쓸 수 있는지도 봐야 합니다. 공용 PC와 공유 브라우저 프로필은 피하고, 작업이 끝나면 키를 지우는 편이 안전합니다. 잔액이 큰 키보다 사용 한도를 낮춘 전용 키를 발급하면 실수로 비싼 모델을 반복 호출했을 때 피해를 줄일 수 있습니다.
비용 비교는 이미지 한 장 가격만 보면 부족합니다. 초안 탐색에는 빠르고 싼 모델을 쓰고, 최종 후보만 고급 모델로 다시 만드는 흐름이 실제 비용을 좌우합니다. 같은 프롬프트를 모델별로 세 번씩 돌려 품질 편차까지 보면 구독형 서비스와 어느 쪽이 나은지 판단하기 쉬워집니다.
정리
GL4SS에서 참고할 부분은 구조입니다. 별도 앱 서버를 두지 않고 사용자 키로 API를 호출하면 서비스 운영자의 보관 범위는 줄일 수 있습니다. 대신 외부 전송·기기 보안·사용량 확인을 사용자가 직접 이해해야 합니다.
특히 “돈이 나가는 순간을 사용자가 명확히 알게 만든다”는 원칙은, AI 기능을 붙이는 어떤 제품에도 적용되는 이야기입니다.
코드에서 확인한 전송 경계
2026년 9월 14일 저장소의 src/lib/openrouter.ts를 읽었습니다. 이 파일의 commonHeaders()는 Authorization: Bearer로 키를 붙이고, 채팅·영상·키 확인 주소를 openrouter.ai/api/v1/ 아래로 지정합니다. “키가 기기 밖으로 나가지 않는다”는 기존 설명을 이 근거로 정정했습니다. 실제 키를 넣어 유료 생성하거나 전체 프로그램을 보안 감사한 결과는 아닙니다.
| 넣으려는 자료 | 이 구조에서 확인할 것 | 판단 |
|---|---|---|
| 공개 행사 포스터의 배경 장면 | 결과 사용 조건과 생성 비용 | 조건을 확인한 뒤 시도 가능 |
| 아직 공개하지 않은 고객 제안서 | 회사의 외부 API 전송 허용 여부 | 허가 전에는 입력하지 않음 |
| 실제 사건의 증거 이미지 | 생성물이 사실을 입증하는가 | 증거 용도로 사용하지 않음 |
작업을 마치면 설정의 키 항목을 비우고 다시 열어 저장 여부를 확인하세요. 공용 기기에서 이미 사용했거나 유출이 의심되면 브라우저에서 지우는 것만으로 끝내지 말고 OpenRouter에서 해당 키를 폐기해야 합니다. 생성 결과의 IndexedDB 보관과 API 키 보관은 별개이므로 사이트 데이터도 각각 확인합니다.
수정 기록: 외부 전송이 없다는 설명과 CSP의 절대적 안전 보장을 제거하고, 설치 폴더 진입 절차를 추가했습니다.
출처
-
검토한 OpenRouter 요청 코드: 인증 헤더와 API 목적지.
-
elder-plinius/GL4SS - GitHub README (AGPL-3.0-or-later), GL4SS.ai. 정거장 수, 시간 범위, 의존성, 모델 단계별 기본값, CSP 설명은 이 문서 기준입니다.
확인 날짜: 2026년 9월 14일. 기존 문서 설명과 이번 검증 범위는 본문에서 구분했습니다. 원문이 갱신되면 이 글의 수치도 달라질 수 있습니다.
자주 묻는 질문
- API 키를 브라우저에 넣어도 안전한가요?
- 키는 브라우저에 저장되지만 요청 인증을 위해 OpenRouter로 전송됩니다. CSP는 요청 목적지를 제한하는 방어 수단이며 키 유출 가능성을 없애지는 않습니다. 다만 보안 경계가 서버가 아니라 내 기기가 된다는 뜻이므로, 공용 PC나 관리되지 않는 브라우저에서는 쓰지 않는 편이 맞습니다.
- 생성된 장면을 역사 자료로 써도 되나요?
- 안 됩니다. 좌표와 연도를 입력하면 그 시공간에 대한 그럴듯한 장면을 생성 모델이 만들어내는 것이고, 고증된 복원이 아닙니다. 발표 자료의 도입 이미지나 수업의 상상 자극용으로는 쓸 만하지만, 사실을 주장하는 자리에 넣으면 안 됩니다.
- 회사에서 고쳐 쓰려면 무엇을 확인해야 하나요?
- 라이선스가 AGPL-3.0-or-later입니다. 사내에서만 쓰는 수준을 넘어 수정본을 네트워크로 제공하면 소스 공개 의무가 따라옵니다. 사내 도구로 포크해 붙이려 한다면 법무 확인이 먼저입니다.