계산 정확도
TL;DR
섹션 제목: “TL;DR”AstroWay API는 Swiss Ephemeris (astro.com 개발사인 Astrodienst의 공식 C 코드)를 사용합니다. 이는 전문 점성술사들이 30년 이상 Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/월), Janus에서 사용하는 것과 동일한 엔진입니다. 우리는 자체 서버에서 이를 실행하고 REST API 레이어를 통해 중개 수수료 없이 제공합니다. 각 기본 계산 엔드포인트는 회귀 스냅샷 테스트로 커버됩니다. 엔진의 정확도는 세 가지 독립적인 소스와 NASA 5-Millennium Eclipse Catalog에 대한 삼각 측량을 통해 검증되었습니다.
- 행성 위치: Astrodienst의 공식 swetest CGI 대비 중앙값
0.0013", 최대값0.561"(2026-07-29, 130회 측정). 각 천체별 분석은 아래 참조. - 타사 벤치마크 독립 실행 (RoxyAPI, NASA JPL Horizons DE441 대비): 210개 중 210개 허용 오차 범위 내, 중앙값
0.11", 최대값0.60". - 플라시두스 하우스 커스프:
0.000"정확히 일치. - 일식/월식: NASA Eclipse Catalog 대비
< 1분. - ACG 라인: swetest 대비 적도에서
< 1.5 km. - 일출/일몰: timeanddate.com 대비
< 10초. - 달 VOC, 행성 진입, 행성 합: 초 단위 정확도.
방법론: 측정 방식
섹션 제목: “방법론: 측정 방식”이 수치들은 추정치가 아니라 실행 결과입니다. 스크립트는 1900년부터 2050년까지 분포된 10개의 차트를 가져와 Astrodienst의 라이브 swetest CGI에서 동일한 시점을 요청하고, 우리가 제공하는 13개 천체 모두를 비교합니다. 총 130회 측정입니다.
| 천체 | 최대 편차 |
|---|---|
| 태양, 금성, 토성 | 0.001" |
| 수성 | 0.002" |
| 진정한 노드 | 0.004" |
| 화성 | 0.007" |
| 목성 | 0.009" |
| 달 | 0.022" |
| 천왕성 | 0.083" |
| 명왕성 | 0.097" |
| 해왕성 | 0.223" |
| 카이론 | 0.561" |
| 평균 원지점 (릴리스) | 0.000" |
130회 측정 전체 중앙값: 0.0013"
이 페이지에는 이전에 ”< 0.1 arcsec”이라는 일반적인 약속이 있었습니다. 2026-07-29 측정 결과 해왕성, 명왕성, 카이론이 이 약속을 지키지 못하는 것으로 나타나, 약속은 실제 수치로 대체되었습니다. 카이론과 외행성은 우리 빌드에서 사용하는 압축된 천체력 세트에서 위치를 가져오기 때문에 더 큰 편차를 보입니다.
직접 재현할 수 있습니다: api-calc/scripts/accuracy-vs-swetest.mjs는 정확히 이 요청들을 수행하고 동일한 표를 출력합니다.
직접 확인해 보세요. 위에 측정된 수치를 생성한 스크립트는 MIT 라이선스 하에 공개 저장소에 있습니다: astroway/astrology-accuracy-benchmark. 이 스크립트는 우리 API뿐만 아니라 다른 API에서도 작동합니다. 다른 API에 대한 어댑터는 30줄이면 충분하므로, 동일한 130회 측정을 경쟁 API에 대해 실행하고 비교할 수 있습니다. 샌드박스 키만 있으면 됩니다.
| 구성 요소 | 값 |
|---|---|
| 라이브러리 | Swiss Ephemeris C code (aloistr/swisseph) |
| 버전 | upstream Astrodienst C code |
| 천체력 | DE431 JPL ephemeris (.se1 파일을 통해) |
| 폴백 | Moshier analytical (1800-2399년 외 날짜용) |
| 코드 공유 | app.astroway.info와 @/core 공유 - 하나의 엔진, 두 가지 전송 방식 |
방법론
섹션 제목: “방법론”정확도는 세 가지 독립적인 소스와의 비교인 삼각 측량을 통해 검증됩니다.
1. swetest CGI (기준)
섹션 제목: “1. swetest CGI (기준)”Astro.com을 만들고 전 세계 수백만 점성술사에게 서비스를 제공하는 Astrodienst 팀의 공식 Swiss Ephemeris 참조 구현입니다. 가장 권위 있는 공개 소스입니다. 우리 엔진은 동일합니다 (0.00–0.07 각초 편차).
2. Kerykeion (Python)
섹션 제목: “2. Kerykeion (Python)”독립적인 Python 라이브러리로, 우리 빌드와 독립적인 pyswisseph 바인딩을 사용합니다. 이는 우리 래퍼 레이어가 데이터를 왜곡하지 않음을 확인합니다.
3. Prokerala API
섹션 제목: “3. Prokerala API”원격 Swiss Ephemeris API (항성 라히리). 8–17 각초의 시스템 편차는 Lahiri ayanamsa 공식의 다른 버전과 관련이 있으며, 엔진의 정확도와는 관련이 없습니다.
삼각 측량 결과
섹션 제목: “삼각 측량 결과”| 차트 | swetest (Astrodienst) 대비 | Kerykeion (Python) 대비 | Prokerala API 대비 |
|---|---|---|---|
| 먼로 1926 | 0.00” | 0.19” | 16.95” (시스템적) |
| 다이애나 1961 | 0.00” | 0.69” | 8.18” (시스템적) |
| 아인슈타인 1879 | 0.07” | Kerykeion LMT 아티팩트 | 14.96” (시스템적) |
타사 도구를 통한 독립적인 검증
섹션 제목: “타사 도구를 통한 독립적인 검증”RoxyAPI는 NASA JPL Horizons DE441에 대한 자체 벤치마크를 공개합니다: MIT 라이선스, 표준 라이브러리만 사용, 21개 차트 및 210개 위치, 그리고 다른 API를 대상으로 지정할 수 있는 --base-url 플래그가 있습니다. 그들의 README에는 경쟁사를 테스트하는 벤치마크는 공정해야 하므로 허용 오차를 의도적으로 자체 엔진에 맞추지 않았다고 명시되어 있습니다.
우리는 그들의 코드에서 어떤 숫자도 변경하지 않고 우리 자신을 대상으로 삼았습니다. 어댑터는 하나의 요청 필드를 이름을 바꾸고 하나의 응답 래퍼를 제거합니다.
| AstroWay | RoxyAPI, 2026-09-29 실행 | |
|---|---|---|
| 허용 오차 범위 내 | 210개 중 210개 | 210개 중 210개 |
| 편차 중앙값 | 0.11" | 0.05" |
| 최대값 | 0.60" | 0.78" |
우리의 측정은 2026-09-09에 이루어졌으며, API에 21개의 요청을 보냈습니다. RoxyAPI는 9월에 DE440 직접 읽기로 전환했으며, 그들의 중앙값은 이제 우리보다 낮습니다. 우리의 최대값은 그들보다 낮습니다. 210개 모든 행의 순차 출력: CSV.
엔드포인트 수준의 회귀 테스트 세트
섹션 제목: “엔드포인트 수준의 회귀 테스트 세트”각 기본 계산 엔드포인트는 3개의 참조 차트 (먼로 / 다이애나 / 아인슈타인)에 대한 고정된 스냅샷 테스트로 커버됩니다 = 873개의 스냅샷입니다.
스냅샷 스위트는 다음을 포착합니다:
- 입력 데이터 매핑 버그: 잘못된 행성 ID, UT, 하우스 시스템.
- 후처리: 반올림, 단위 변환, 부호 손실.
- 기본값 불일치: 평균 노드 vs 진정한 노드, 지심 vs 지표.
- 스키마 드리프트: 유효성 검사가 잘못된 형식을 놓쳤습니다.
- 오래된 배포: 프로덕션 배포가 코드와 일치하지 않습니다.
허용 오차: 모든 숫자 필드에 대해 기본적으로 5e-5° (≈0.18 각초).
상세 벤치마크
섹션 제목: “상세 벤치마크”행성 위치 (열대, swetest 대비)
섹션 제목: “행성 위치 (열대, swetest 대비)”| 차트 | 날짜 | 최대 편차 |
|---|---|---|
| 마릴린 먼로 | 1926-06-01 | 0.00” |
| 다이애나 공주 | 1961-07-01 | 0.00” |
| 알베르트 아인슈타인 | 1879-03-14 | 0.07” |
플라시두스 하우스 커스프 (swetest 대비)
섹션 제목: “플라시두스 하우스 커스프 (swetest 대비)”| 차트 | ASC 편차 | MC 편차 | 커스프 최대 편차 |
|---|---|---|---|
| 먼로 | 0.000” | 0.000” | 0.000” |
| 다이애나 | 0.000” | 0.000” | 0.000” |
일식/월식 (NASA 5-Millennium Catalog 대비)
섹션 제목: “일식/월식 (NASA 5-Millennium Catalog 대비)”| 이벤트 | NASA 최대값 | 우리 최대값 | 편차 |
|---|---|---|---|
| 2025-03-14 개기월식 | 06:58 UT | 06:58 UT | 0.8분 |
| 2025-03-29 부분일식 | 10:47 UT | 10:47 UT | 0.5분 |
| 2025-09-07 개기월식 | 18:11 UT | 18:11 UT | 0.8분 |
| 2025-09-21 부분일식 | 19:41 UT | 19:42 UT | 1.0분 |
아스트로카르토그래피 (swetest의 RA 공식 대비)
섹션 제목: “아스트로카르토그래피 (swetest의 RA 공식 대비)”MC 및 IC 라인은 longitude = RA − GMST 공식 (Kenneth Bowser 표준)에 따라 구성됩니다. 기준 대비 편차: 모든 행성에 대해 적도에서 < 1.5 km.
ASC 및 DSC 수평선은 동일한 적도 좌표에서 수평선 방정식 cos H = -tan φ · tan δ로 계산됩니다. 여기서 H = (GMST + lng) − RA입니다. 두 절반은 시간각의 부호에 따라 다릅니다: H < 0일 때 천체는 자오선 동쪽에 있으므로 상승합니다. 각 실행 시 수행하는 검증: 각 수평 곡선의 각 지점을 가져와 해당 지점에서 천체의 지평선 위 높이를 계산합니다. 8419개 지점에서 최대 편차는 0.0 km이며, 이는 우리가 선을 그은 모든 곳에서 천체가 실제로 지평선에 있음을 의미합니다.
일출/일몰 (timeanddate.com 대비)
섹션 제목: “일출/일몰 (timeanddate.com 대비)”| 위치 | 날짜 | 매개변수 | 편차 |
|---|---|---|---|
| 런던 | 2026-04-15 | 일출 | 0.6초 |
| 런던 | 2026-04-15 | 일몰 | 9초 |
극지방 위치 (|lat| > 66.5°)는 자동으로 polarState와 함께 일반적인 행성 시간이 정의되지 않았다는 경고를 반환합니다.
어스펙트 오르비스
섹션 제목: “어스펙트 오르비스”AstroWay는 ZET9 및 astro.com과 같이 행성별 가변 오르비스 (두 행성 중 MIN 규칙)를 사용합니다. 기본 오르비스 (출생 차트용):
| 어스펙트 | 태양 | 달 | 내행성 | 목성 | 외행성 |
|---|---|---|---|---|---|
| 합 | 12° | 10° | 5° | 8° | 5° |
| 육분위 | 6.5° | 6° | 5° | 5° | 5° |
| 사분위 | 10° | 8° | 5° | 7° | 5° |
| 삼분위 | 12° | 8° | 5° | 5° | 5° |
| 대립 | 12° | 10° | 5° | 8° | 5° |
마이너 어스펙트 (36°, 40°, 45°, 72°, 108°, 135°, 144°)는 기본적으로 비활성화되어 있습니다. ALL_ASPECTS를 통해 명시적으로 활성화됩니다.
극지방 위도
섹션 제목: “극지방 위도”|lat| > 66.5°인 경우 Placidus / Koch / Regiomontanus 시스템은 수학적으로 정의되지 않습니다. 이러한 경우 Swiss Ephemeris는 자동으로 Porphyry를 반환하며, 우리 API는 다음 경고를 추가합니다:
{ "system": "P", "warning": "Placidus system is undefined for lat=68.96° (> 66.5°). Swiss Ephemeris fell back to Porphyry..."}지속적인 검증
섹션 제목: “지속적인 검증”회귀는 CI를 통해 모든 PR에서 검증됩니다:
api-calc/tests/endpoints/: 참조 차트 (먼로 / 다이애나 / 아인슈타인) + 시나스트리 / 컴포지트 / 데이비슨에 대한 873개의 스냅샷.github/workflows/api-accuracy.yml: PR 시 자동 실행- swetest CGI + Kerykeion에 대한 삼각 측량: 매주
- Dependabot을 통한 업스트림 Swiss Ephemeris 모니터링
MCP 신뢰성: 타입이 지정된 출력
섹션 제목: “MCP 신뢰성: 타입이 지정된 출력”엔진의 정확성은 신뢰의 절반입니다. 나머지 절반은 에이전트 (Claude, ChatGPT, Cursor)가 유효성을 검사할 수 있는 출력 계약입니다. 우리 MCP 서버는 “원시 텍스트, 알아서 처리하세요”를 반환하지 않습니다.
- 타입이 지정된
structuredContent. 600개 이상의 MCP 도구가 있으며, 대다수가 엄격한outputSchema를 게시합니다. MCP 클라이언트는 임의로 파싱해야 하는 문자열이 아니라 유효성이 검사된 구조를 받습니다. - 스키마 드리프트 방지. CI 테스트
openapi-example-drift는 각 회귀 스냅샷을 자체 예제에서 파생된 스키마에 대해 유효성을 검사합니다. 엔드포인트의 실제 출력이 게시된 스키마와 다르면 빌드가 실패합니다. 바로 이러한 불일치 유형이 MCP 오류-32602 Output validation error를 유발합니다. - 오류: 그것은 오류입니다. 도구 실패는 항상
isError플래그와 타입이 지정된 코드 (UPPER_SNAKE)와 함께 반환됩니다. 우리는 모델에 원시 스택 트레이스나 내부 서버 경로를 “데이터”로 제공하지 않습니다.
즉, MCP를 통한 통합은 직접 REST 호출만큼 예측 가능합니다. /openapi.json에 설명된 내용은 도구가 반환하는 내용입니다.
알려진 제한 사항
섹션 제목: “알려진 제한 사항”- 범위 외 날짜 (1800년 이전 및 2399년 이후): Moshier 분석이 사용되며, 정확도는 ~0.1” (DE431 파일이 있는 SWIEPH의 < 0.01” 대비).
- 진정한 릴리스 (id=13) vs 평균 릴리스 (id=12): 최대 12° 차이 - 기본적으로 평균 릴리스 (안정적인 동작), 진정한 릴리스는
planetIds: [13]을 통해 사용 가능합니다. - 지표 vs 지심: 기본적으로 지심.
참고 자료
섹션 제목: “참고 자료”- Swiss Ephemeris: https://www.astro.com/swisseph/
- swetest CGI: https://www.astro.com/swisseph/swetest.htm
- NASA 일식/월식 카탈로그: https://eclipse.gsfc.nasa.gov/
- Kerykeion: https://github.com/g-battaglia/kerykeion
- Astrodienst: https://www.astro.com/
정확도 관련 질문은 차트 데이터와 예상 기준 (astro.com 또는 기타 권위 있는 출처)을 포함하여 support@astroway.info로 문의하십시오.