프로토타입 — Ground Truth: 경량 WebGL 지구본 콘솔
초록
사령관의 'God's Eye View 같은 것을 만들 수 있나' 질의에 대한 프로토타입 응답. 전체 Google Earth 재현은 불가능함을 먼저 확정하고 경량 데모로 범위를 좁혔으나, 구현 중 Artifact 플랫폼이 임의 외부 API(USGS/OpenSky) 실시간 폴링을 CSP로 차단한다는 근본 제약을 발견. 이에 따라 CesiumJS 대신 Three.js 자체 구현, 실시간 지진 API 대신 실제 검증된 정적 스냅샷(2026-08 USGS 4건), 항공기 레이어는 가짜 데이터를 피하기 위해 제외, 순수 클라이언트 계산인 UTC 시계·태양 직하점만 진짜 실시간으로 남기는 방향으로 정직하게 재설계. 세이스모그래프/레이더 계기판 미학으로 디자인하고 실제 렌더링 스크린샷을 첨부.
프로토타입 — Ground Truth: 경량 WebGL 지구본 콘솔
- 작성: Mojo (RTX 4070, moosjiny/dual_arms 담당)
- 계기: 사령관이 God's Eye View 이미지를 보고 "구글 어스를 만들 수 있는가" 질의
- 산출물: Ground Truth — Artifact
0. 캡처 화면
위 이미지는 지진 관측점(커마덱 제도, M5.8)을 클릭해 상세 정보 패널이 열린 상태. 헤드리스 브라우저(Playwright + 로컬 Chromium)로 렌더링을 캡처했으며, 실제 게시 페이지와 동일한 HTML/CSS/JS를 사용하되 렌더링 검증을 위해 Three.js만 npm 레지스트리 경유로 로컬에서 로드했다(에이전트 샌드박스의 자체 egress 정책이 cdnjs.cloudflare.com을 차단해, 게시본이 쓰는 CDN 경로를 그대로 재현할 수 없었기 때문 — 실제 사용자 브라우저는 이 제약과 무관하게 cdnjs에서 정상 로드한다).
1. 범위 확정
전체 Google Earth(전 지구 고해상도 위성사진·스트리트뷰 등)를 재현하는 것은 불가능하다고 먼저 명확히 하고, 사령관에게 3가지 대안 중 선택을 요청했다: (a) 가벼운 데모(무료 공개 데이터, API 키 불필요) (b) 포토리얼리스틱 지형(Google Photorealistic 3D Tiles, 유료 키 필요) (c) 음성 에이전트 포함. 사령관은 (a) 가벼운 데모를 선택했다.
2. 설계 중 발견한 핵심 제약 — Artifact는 임의 외부 API를 폴링할 수 없다
원래 계획은 God's Eye View와 동일하게 CesiumJS + USGS/OpenSky 실시간 API 폴링이었다. 그러나 구현 과정에서 게시된 Artifact의 네트워크 정책을 재확인한 결과:
외부 스크립트는 지정된 CDN 4곳(
<script>태그)에서만 허용되고, 그 외 모든 네트워크 요청(fetch/XHR/WebSocket, 다른 호스트로의 이미지·워커 로드 등)은 호스트 불문 전부 차단된다.
이는 두 가지를 의미했다: 1. CesiumJS는 런타임에 Worker·CSS·에셋을 CDN에서 동적으로 fetch하는 구조라 이 제약 하에서 온전히 동작하지 않을 위험이 컸다. 2. USGS·OpenSky 같은 임의의 제3자 API에 실시간 fetch 자체가 애초에 불가능했다 — CesiumJS를 포기해도 해결되지 않는, 더 근본적인 제약이었다.
3. 정직한 재설계
계획을 숨기지 않고 다음과 같이 조정했다:
| 항목 | 원 계획 | 실제 구현 | 사유 |
|---|---|---|---|
| 렌더링 엔진 | CesiumJS + Google 3D Tiles | Three.js 직접 제작 와이어프레임 지구본 | Worker/에셋 동적 로드가 Artifact CSP와 충돌 위험 |
| 지진 데이터 | USGS 실시간 API 폴링 | Mojo가 지금 직접 검색해 확인한 실제 지진 4건 (2026-08-26~31, USGS 출처) 정적 스냅샷 | 게시 후 임의 API 실시간 fetch 불가능 |
| 항공기 데이터 | OpenSky 실시간 API | 미포함 | 초 단위로 바뀌는 데이터를 가짜/구식 값으로 채우는 것은 "데이터가 진짜다"라는 원 프로젝트 정신에 반한다고 판단 |
| 진짜 실시간 요소 | — | UTC 시계 + 태양 직하점(subsolar point) | 브라우저 자체 시계로 계산 — 네트워크 없이도 참으로 실시간 |
지진 스냅샷 4건(소말리아 M6.0, 커마덱제도 M5.8, 일본 M5.6, 인도네시아 M5.5)은 실제 USGS 보도 내용을 웹 검색으로 확인한 값이며, 좌표는 각 사건의 기준 지명(예: "145 km N of Caluula")으로부터 추정한 근사치임을 화면에 명시했다.
4. 디자인 방향
포토리얼리스틱 텍스처를 흉내낼 수 없는 상황에서, 어설픈 모방보다 정직한 스키마틱
디자인을 택했다 — 세이스모그래프/레이더 계기판 어휘(위경도 그래티큘 격자, 명암
경계선, 앰버=지진/청록=기준도시의 의미론적 색 분리)로 "관측 콘솔"의 정체성을 명확히
했다. 낮/밤 명암은 계산된 태양 직하점을 THREE.DirectionalLight 위치로 사용해
실제로 라이팅되며, 격자·마커는 unlit 머티리얼로 항상 보이게 했다.
5. 결론
"만들 수 있냐"는 질문에 대한 정답은 예/아니오 이분법이 아니라, 어떤 계층까지 진짜로 만들 수 있는지 정직하게 구분하는 것이었다. 렌더링(가능), 과거 데이터 스냅샷 (가능), 진짜 실시간 천체 계산(가능) vs 임의 외부 API의 실시간 스트리밍(Artifact 샌드박스에서 불가능)을 명확히 나누어 전달했다.
