세계 로켓 발사 일정표를 교실로 — Launch Library 2 완전 정복
🚀 Launch Library 2는 전 세계 로켓 발사 기록과 예정 일정을 모아둔 국제 공유 데이터베이스입니다(The Space Devs 커뮤니티 운영, 무료·API 키 없음). 오늘 실측으로 다가오는 발사 360건을 확인했고, 심지어 오늘(2026-09-05) 발사 예정인 Isar Aerospace의 Spectrum 로켓('Go for Launch' 상태)까지 읽었습니다. mode=list 옵션으로 발사 1건을 3.3KB 슬림 응답으로 받을 수 있습니다.
이 API에는 결정적인 특징이 있습니다 — 익명 호출은 시간당 15회(실측). 대신 /api-throttle/ 엔드포인트가 남은 횟수를 직접 알려줍니다. 이 제한을 어떻게 우아하게 다루는지가 이번 글의 백미이자, 교실 배포에서는 심기 모드(데이터 임베딩)가 필수인 이유이기도 합니다.
📖 한 줄 정의
심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).
학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.
1. 3대 핵심 분석 비교표
| 무엇이 바뀌었나요? / 영역 | 초보자를 위한 쉬운 설명 | 이렇게 한번 써보세요! |
|---|---|---|
| API 정체 | 세계 모든 로켓 발사의 과거 기록과 미래 일정을 담은 국제 DB. 키 없이 무료이며, 오늘 실측 기준 미래 발사 360건이 준비되어 있습니다. (현재 버전 2.2.0, 2.3.0도 열려 있습니다.) | /2.2.0/launch/upcoming/?limit=3&mode=list → 다음 발사 3건. |
| 자원명 함정 | 자원 이름이 launch(단수형)입니다. launches(복수)로 쓰면 404가 납니다 — 실측으로 직접 겪었습니다. launch(전체)·launch/upcoming(다가올 발사)·launch/previous(지난 발사)로 구성됩니다. | 막히면 루트 주소(/2.2.0/)에서 자원 목록을 다시 읽는 습관. |
| mode=list 다이어트 | 기본 응답은 로켓 상세까지 싹 다 주늑 몇십 KB입니다. ?mode=list를 붙이면 발사 1건이 3.3KB짜리 슬림 카드로 줄어듭니다(실측) — 15회/시간 제한을 지키는 첫 번째 예의입니다. | ?mode=list를 항상 기본값으로 쓰기. |
| 데이터 모양 | 발사 1건 = name(로켓 | 임무)·status.name('Go for Launch')·net(발사 시각, ISO8601)·lsp_name(발사 기관)·pad·location(발사장)·mission·image. | net을 한국 시각으로 바꿔 '우리 나라 시간 몇 시에 발사?' 계산. |
| 15회/시간 대응 | 익명 호출 제한이 시간당 15회입니다(실측). /api-throttle/이 남은 횟수와 재충전 시각을 알려줍니다. 교실 배포는 반드시 심기 모드 — 교사가 아침에 한 번 받아 심으면 학생 단말은 통신 0입니다. | EMBED_DATA에 이번 주 발사 일정 + '기준 시각' 표시. |
2. 핵심 아키텍처 해설 — 발사 일정 창고는 이렇게 생겼다
① URL 해부: launch는 단수형, 2.3.0도 있다
https://ll.thespacedevs.com/2.2.0/launch/upcoming/?limit=3&mode=list
- ll.thespacedevs.com/2.2.0 — 현재 표준 버전. 루트 주소가 자원 목록을 JSON으로 안내합니다(astronaut·pad·spacestation 등 40여 개 자원).
- launch (단수형) — launches로 쓰면 404. 하위 경로: upcoming(미래+최근 24시간), previous(지난 발사).
- mode=list — normal/list/detailed 세 모드. list가 슬림 카드 모드입니다.
- search= — 발사명·로켓·기관·임무명 통합 검색(?search=SpaceX 같은 형태).
② 15회/시간: api-throttle이 직접 말해준다
{
"your_request_limit": 15,
"limit_frequency_secs": 3600,
"current_use": 15,
"next_use_secs": 291
}
오늘 실측 응답 그대로입니다 — our 검증 호출 15회를 다 써서 current_use가 15, 291초 뒤 1회가 재충전된다는 뜻입니다. '남은 횟수'를 API가 스스로 공개한다는 점은 기업형 API에서도 드문 친절함입니다. 교실에서는 '남은 횟수 읽기' 자체를 API 소양 수업으로 다룰 수 있습니다.
③ mode=list 데이터 모양: 발사 한 건이 한 장의 티켓
{
"count": 360,
"next": "https://ll.thespacedevs.com/2.2.0/launch/upcoming/?limit=1&mode=list&offset=1",
"results": [{
"name": "Spectrum | Onward and Upward",
"status": { "name": "Go for Launch", "abbrev": "Go" },
"net": "2026-09-05T20:00:00Z",
"lsp_name": "Isar Aerospace",
"mission": "Onward and Upward",
"mission_type": "Test Flight",
"pad": "Orbital Launch Pad",
"location": "Andøya Spaceport",
"image": "https://thespacedevs-prod...jpeg"
}]
}
실측 데이터(2026-09-05 기준)입니다. net은 '발사 예정 시각'의 국제 표준 표기이고, 상태 약어(Go, Success, Failure)는 세계 발사 커뮤니티의 공용어입니다.
④ 발사 시각 다루기: 한국 시각 변환과 카운트다운
const t = new Date(launch.net);
const local = t.toLocaleString("ko-KR", { dateStyle: "short", timeStyle: "short" });
function countdown(net) {
const diff = new Date(net) - new Date();
const s = Math.floor(diff / 1000);
const d = Math.floor(s / 86400);
const h = Math.floor((s % 86400) / 3600);
const m = Math.floor((s % 3600) / 60);
return "T-" + d + "일 " + h + "시간 " + m + "분";
}
T-3일 14시간 22분 — 아이들이 가장 좋아하는 숫자 놀이가 그대로 수업이 됩니다.
⑤ 학내망 전략: 아침 1회 심기
교사가 매일 아침(또는 발사 주간 전) 한 번 upcoming 10건을 mode=list로 받아 name·status·net·lsp_name·location만 골라 EMBED_DATA로 심습니다. 심기 모드(데이터 임베딩)가 무엇인지는 앞의 '📖 한 줄 정의' 박스를 참고하세요. 파일 하단에 '기준 시각: 2026-09-05 아침'을 표시해 발사 시각이 흘렀으면 '발사 완료 여부는 launch/previous에서 확인' 안내를 붙입니다. 발사 이미지(image)는 외부 스토리지 주소이므로 학생 배포본에서는 로켓 아이콘 텍스트 카드로 대체합니다.
3. 초보자를 위한 바이브 코딩 실전 사용 예시
- 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트' 전체를 복사해 Gemini에 붙여넣습니다.
- 역질문 답변 — Gemini가 던지는 질문 3가지(일정 축, 데이터 모드, 카운트다운 여부)에 답하면 설계가 확정됩니다.
- HTML 파일 실행 — 완성 코드를 '발사일정표.html'로 저장 후 더블클릭. 심기 모드 파일이면 곧 학내망 배포본입니다.
제미나이 전용 에러 제로 프롬프트
[🚨 에러 방지 기본 안전장치]
1. 결과물은 외부 라이브러리·프레임워크·웹폰트 없이 단일 HTML 파일로 완성한다. (Launch Library 2 데이터 fetch는 유일한 외부 통신 예외)
2. 사운드는 Web Audio API로 직접 합성한다: 카운트다운 마지막 10초에 틱 소리, 발사 예정 시각 도달 시 '똑' 알림음, 통신 실패 시 '삑'.
3. 모바일 터치 대응: 뷰포트 메타 태그 필수, 버튼 최소 44×44px, 360px 화면 가로 스크롤 금지.
4. 데이터 주소는 https://ll.thespacedevs.com/2.2.0/launch/upcoming/?mode=list 이며, 자원명은 launch(단수형)로 정확히 쓴다(launches는 404).
5. 익명 호출은 시간당 15회 제한이므로 요청을 최소화하고, 429·제한 안내 시 '잠시 후 다시 시도' 화면을 보여준다.
6. net(발사 시각)은 국제표준시이므로 toLocaleString으로 한국 시각을 표시하고, T-카운트다운 타이머를 1초 간격으로 갱신한다.
7. 파일 상단 EMBED_DATA에 이번 주 발사 일정이 심어져 있으면 fetch를 완전히 생략한다(학내망 배포용 외부 호출 0 모드). 파일 하단에 '기준 시각'을 표시한다.
8. // TODO, /* 생략 */ 같은 미완성 코드는 절대 넣지 말고 끝까지 완성한다.
[❓ 역질문 유도]
코드를 바로 만들지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 일정 축은 무엇으로 할까? (다가올 발사 upcoming / 지난 발사 previous)
Q2. 데이터 모드는 무엇으로 할까? (A: 실시간 fetch — 호출 15회/시간 주의 / B: 학내망용 심기 모드 — 권장)
Q3. 카운트다운 타이머를 넣을까? (가장 임박한 발사 1건만 크게 / 목록마다 표시)
🎯 에디터 한줄평
시간당 15회라는 제한이 문제가 아니라 최고의 교재입니다. '제한 있는 자원을 어떻게 나눠 쓰게 설계할까'는 세상 모든 API 사용의 본질이고, api-throttle로 남은 횟수를 읽는 습관은 데이터 소양 그 자체입니다. T-카운트다운 타이머는 수학(시간 계산)·과학(우주 개발)·국어(발사 기사 읽기)를 한 화면에 모으는 앱으로 완성됩니다. 아침 1회 심기 전략까지 — 설계가 가장 단단한 앱입니다.
📚 기술·교육 참고 링크
- Launch Library 2 공식 문서 : 자원·필터·속도 제한 전체 정리
- API 루트(자원 목록) : 자원명을 헷갈릴 때마다 다시 읽는 지도
- The Space Devs : 운영 커뮤니티 소개
- 교육과정 연계: 과학(우주 개발·인공위성), 수학(시각·시차·카운트다운), 사회(국제 협력과 우주 경쟁)와 함께 활용