SGP4란 무엇인가 — 위성 추적기는 어떻게 궤도를 계산할까

한국 위성 트래커의 "ISS 11분 후 서울 상공 통과" 같은 예보는 어떻게 계산될까요? 답은 SGP4(Simplified General Perturbations 4)라는 궤도 계산 모델입니다. NASA와 미국 우주군이 수십 년째 쓰는 이 알고리즘을 저도 직접 구현해 사용하고 있습니다. 수식이 무서워 보이지만 개념은 생각보다 명쾌합니다.

🔭
강형석
2026년 8월 20일 · 읽는 시간 12분 · 직접 구현 경험 기반
기술

먼저: 위성의 위치를 안다는 게 뭘 의미하나요?

지구를 도는 위성의 위치를 표현하려면 두 가지가 필요합니다. ① 지금 이 순간의 궤도 정보, ② 그 궤도를 미래로 전파(propagate)하는 수학적 모델. SGP4는 바로 이 ②번을 담당합니다.

우주에서 위성의 움직임은 순수한 케플러 타원 궤도를 따르지 않습니다. 지구 자체가 완전한 구가 아닌 타원형(적도가 볼록)이고, 대기 저항이 있고, 달과 태양의 중력도 있고, 태양 복사압도 있습니다. SGP4는 이 모든 섭동(perturbation) 요소를 수학적으로 모델링해 위성의 미래 위치를 계산합니다.

🌍 섭동(Perturbation)이란? 이상적인 궤도(완전한 타원)에서 벗어나게 만드는 힘들의 총칭. 지구 편평도(J2 항), 대기 항력, 태양·달 중력, 태양풍 복사압이 주요 요소입니다. SGP4는 이 중 가장 중요한 요소들을 해석적으로 처리합니다.

TLE — 궤도 데이터의 여권

모든 계산의 시작은 TLE(Two-Line Element set, 두 줄 궤도 요소)입니다. 이름 그대로 두 줄짜리 문자열로 위성의 궤도를 표현합니다. ISS의 실제 TLE를 보면 이렇게 생겼습니다:

ISS (ZARYA)
1 25544U 98067A 26237.54321759 .00002182 00000-0 40018-4 0 9993
2 25544 51.6455 132.7643 0001234 237.4521 122.4231 15.50377572480947
줄 1: [행번호] [위성번호] [분류] [발사정보] [기준시각(Epoch)] [대기항력계수] [체크섬]
줄 2: [행번호] [위성번호] [경사각 51.6°] [승교점 적경] [이심률] [근지점 편각] [평균 근점각] [하루 공전 횟수 15.5회] [혁명번호]

이 두 줄만 있으면 그 시점 이후 어느 순간에든 위성의 위치를 계산할 수 있습니다. 단, 시간이 지날수록 오차가 커집니다 — 대기 항력 등 예측하기 어려운 요소들이 누적되기 때문입니다.

TLE의 핵심 6개 요소 (케플러 궤도 요소)

🔴
경사각 (i)
궤도면이 지구 적도면과 이루는 각도. ISS는 51.6°, 태양동기궤도 위성은 약 98°.
🟡
이심률 (e)
궤도의 찌그러진 정도. 0이면 완전한 원, 1에 가까울수록 찌그러진 타원. ISS는 약 0.0001 (거의 원형).
🟢
승교점 적경 (Ω)
궤도면이 적도면과 교차하는 "오르는 점"의 경도. 지구 자전 때문에 매일 조금씩 변합니다.
🔵
근지점 편각 (ω)
궤도에서 지구와 가장 가까운 점(근지점)의 방향. 타원 궤도의 방향을 결정합니다.
🟣
평균 운동 (n)
하루에 몇 바퀴 도는지. ISS는 하루 약 15.5회, 즉 공전 주기 약 92분.
🟤
평균 근점각 (M)
기준 시각(Epoch) 당시 위성이 궤도 어디쯤 있었는지. 이것으로 현재 위치를 계산합니다.

SGP4가 계산하는 순서

1
TLE 파싱 → 초기 궤도 요소 추출
위 TLE 두 줄에서 6개 궤도 요소와 기준 시각(Epoch), 대기항력 계수(B* drag term)를 추출합니다. 단위를 라디안·km 등으로 변환하는 전처리도 포함됩니다.
2
경과 시간 계산
TLE 기준 시각(Epoch)으로부터 예보하고 싶은 시각까지 경과된 시간(분)을 계산합니다. 예: Epoch 이후 47.3분 시점의 위치를 구한다.
3
섭동 보정 적용
경과 시간에 따라 세 가지 주요 섭동을 보정합니다:
① J2 항 (지구 편평도) — 적도 부근 중력이 강해 승교점과 근지점이 세차(precession).
② 대기 항력 — TLE의 B* 계수를 이용해 궤도 감쇠 계산. 이것이 고도 손실과 공전 속도 증가를 만들어냅니다.
③ 공진 효과 — 지구 자전과 위성 공전의 공진으로 발생하는 추가 섭동.
4
관성 좌표계(ECI) → 지구 고정 좌표계(ECEF) 변환
SGP4 계산 결과는 지구 중심 관성 좌표계(ECI)의 x,y,z 벡터입니다. 이를 지구 자전을 반영한 ECEF(지구 중심 지구 고정) 좌표로 변환해야 경도·위도·고도를 얻을 수 있습니다. theta = GMST + longitude 형태의 회전 변환을 씁니다.
5
관측자 상대 좌표 계산 → 방위각·고도각 산출
위성의 ECEF 좌표와 관측자(예: 서울 37.57°N, 127.00°E)의 ECEF 좌표 차이 벡터를 관측자 기준 국소 수평 좌표(SEZ 또는 ENZ)로 변환합니다. 이 벡터의 방향이 방위각(Azimuth), 지평선 위 각도가 고도각(Elevation)입니다.
실제 코드 (satellite.js 기반): const satrec = satellite.twoline2satrec(line1, line2); const { position, velocity } = satellite.propagate(satrec, now); // ECI 좌표 const gmst = satellite.gstime(now); // 그리니치 평균 항성시 const geo = satellite.eciToGeodetic(position, gmst); // 경도·위도·고도 const lookAngles = satellite.ecfToLookAngles(observerGd, positionEcf); // 방위각·고도각

ISS 경사각 51.6°가 중요한 이유

ISS의 경사각 51.6°는 우연이 아닙니다. 러시아 바이코누르 발사장의 위도가 약 46°N인데, 소유즈 로켓이 이 위도에서 직접 도달 가능한 최소 경사각이 51.6°입니다. 미국 케네디 우주센터(위도 28.5°N) 입장에서 보면 비효율적이지만, 국제 협력을 위해 러시아가 접근 가능한 경사각을 채택했습니다.

이 경사각 때문에 ISS는 북위 약 51.6°와 남위 51.6° 사이 지역에서만 머리 위를 지납니다. 한국(북위 33~38°)은 이 범위 안에 있어 ISS가 높은 고도각으로 통과하는 날이 많습니다.

🌐 한국 관측에서 ISS 통과 패턴:
경사각 51.6°인 ISS는 한국 상공을 지날 때 대략 서→동 방향이나 서남→동북 방향으로 이동합니다. 머리 위를 거의 수직으로 지나는 "오버헤드 패스(Overhead Pass)"는 약 10~14일마다 한 번 찾아오는데, 이때 최고 고도각이 70~85°에 달해 가장 오래(5~6분) 밝게 볼 수 있습니다.

예보 오차의 원인들

SGP4는 정확하지만 완벽하지 않습니다. 어느 앱을 써도 예보가 완전히 정확하지 않은 이유가 있습니다:

오차 원인오차 크기설명
TLE 노후화수 초 ~ 수 분TLE는 생성 직후가 가장 정확합니다. 2주 이상 된 TLE는 km 단위 오차가 납니다. 이 사이트는 1시간마다 TLE를 갱신합니다.
대기 밀도 변동수 초태양 활동(11년 주기)에 따라 고층 대기 밀도가 수배 변합니다. 태양 극대기에는 ISS 고도 손실이 커져 예보 오차도 커집니다.
ISS 고도 조정 (Reboost)수 분ISS는 한 달에 1~2회 추력기를 점화해 고도를 높입니다. 리부스트 직후에는 TLE가 갱신되기 전까지 예보 오차가 큽니다.
SGP4 모델 한계수백 mSGP4는 해석적(analytic) 근사 모델입니다. 수치 적분 방식(HPOP)보다 정확도가 낮지만 계산 속도가 빠릅니다.
관측자 위치 오차수 초GPS 오차, 도시 이름의 대표 좌표 사용 등으로 관측자 위치에 수백 m 오차가 있으면 예보 시각에 수 초 차이가 납니다.

이 사이트가 다른 앱과 다른 점

시중의 많은 위성 추적 앱들은 NASA JPL 또는 Heavens-Above의 예보를 그대로 가져와 표시합니다. 한국 위성 트래커는 CelesTrak에서 직접 TLE를 받아 브라우저 안에서 SGP4 계산을 실행합니다.

실제로 계산을 해보고 싶다면

JavaScript/Node.js 환경에서 직접 SGP4를 실행해볼 수 있습니다:

// npm install satellite.js
import * as satellite from 'satellite.js';
const line1 = '1 25544U 98067A 26237.54321759 .00002182 00000-0 40018-4 0 9993';
const line2 = '2 25544 51.6455 132.7643 0001234 237.4521 122.4231 15.50377572480947';
const satrec = satellite.twoline2satrec(line1, line2);
const now = new Date();
const { position } = satellite.propagate(satrec, now);
const gmst = satellite.gstime(now);
const geo = satellite.eciToGeodetic(position, gmst);
console.log({
lat: satellite.degreesLat(geo.latitude),
lng: satellite.degreesLong(geo.longitude),
alt: geo.height // km
});
핵심 요약:
SGP4는 TLE라는 간결한 두 줄짜리 궤도 데이터를 받아 지구 편평도·대기항력·달/태양 중력 등의 섭동을 보정한 뒤 위성의 미래 위치를 계산하는 표준 알고리즘입니다. 한국 위성 트래커는 이 알고리즘을 브라우저에서 직접 실행해 서버 없이 실시간 예보를 제공합니다. TLE가 최신일수록 예보 정확도가 높으며, ISS 리부스트 직후가 가장 오차가 큰 시기입니다.

더 읽어볼 자료

🛰️ SGP4 계산 기반 실시간 위성 추적 →

궤도 계산이나 TLE에 대한 질문이 있으시면 이메일로 알려주세요. 관련 글: 위성 관측 가이드, FAQ.