계산 정확도
TL;DR
섹션 제목: “TL;DR”AstroWay API는 Swiss Ephemeris (astro.com의 개발사인 Astrodienst의 공식 C 코드)를 사용합니다. 이는 전문 점성가들이 30년 이상 Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/월) 및 Janus에서 사용하는 것과 동일한 엔진입니다. 우리는 이를 WebAssembly로 컴파일하고 REST API 계층으로 노출하여 중간 마진 없이 제공합니다. 각 기본 계산 엔드포인트는 회귀 스냅샷 테스트로 커버됩니다. 엔진의 정확도는 세 가지 독립적인 소스와 NASA 5-Millennium Eclipse Catalog에 대한 삼각측량을 통해 검증되었습니다.
- 행성 위치: 공식 swetest CGI Astrodienst 대비 중앙값
0.0013", 최대값0.561"(2026-07-29, 130회 측정 기준). 천체별 세부 정보는 아래 참조. - Placidus 하우스 커스프:
0.000"정확히 일치 - 일식/월식: NASA Eclipse Catalog 대비
< 1분 - ACG 라인: swetest 대비 적도에서
< 1.5km - 일출/일몰: timeanddate.com 대비
< 10초 - 달 VOC, 진입, 행성 합: 초 단위 정확도
방법론: 측정 방식
섹션 제목: “방법론: 측정 방식”이 수치들은 추정치가 아니라 실행 결과입니다. 스크립트는 1900년부터 2050년까지 분포된 10개의 차트를 가져와, 라이브 swetest CGI Astrodienst에 동일한 순간을 요청하고 우리가 반환하는 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 측정 결과 해왕성, 명왕성, 키론이 이 약속을 지키지 못하는 것으로 나타나, 약속은 실제 수치로 대체되었습니다. 키론과 외행성은 WASM 어셈블리의 압축된 역서 세트에서 위치를 가져오기 때문에 더 큰 편차를 보입니다.
직접 재현할 수 있습니다: api-calc/scripts/accuracy-vs-swetest.mjs는 정확히 이 요청들을 수행하고 동일한 표를 출력합니다.
직접 확인해 보세요. 위 수치를 측정한 스크립트는 MIT 라이선스 하에 공개 저장소에 있습니다: astroway/astrology-accuracy-benchmark. 이 스크립트는 우리 API뿐만 아니라 다른 API와도 작동합니다. 다른 API용 어댑터는 30줄이면 충분하므로, 동일한 130회 측정을 경쟁사 API에 대해 실행하고 비교할 수 있습니다. 샌드박스 키만 있으면 됩니다.
| 구성 요소 | 값 |
|---|---|
| 라이브러리 | Swiss Ephemeris C code (aloistr/swisseph) |
| 버전 | 업스트림 Astrodienst C 코드 |
| 바인딩 | swisseph-wasm (Node.js의 WebAssembly) |
| 역서 | 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 라이브러리로, 우리 WASM 대신 pyswisseph 바인딩을 사용합니다. 우리 WASM 계층이 데이터를 왜곡하지 않음을 확인합니다.
3. Prokerala API
섹션 제목: “3. Prokerala API”원격 Swiss Ephemeris API (항성 Lahiri). 8–17 각초의 시스템 편차는 엔진의 정확도가 아닌 Lahiri ayanamsa 공식의 다른 버전과 관련이 있습니다.
삼각측량 결과
섹션 제목: “삼각측량 결과”| 차트 | swetest (Astrodienst) 대비 | Kerykeion (Python) 대비 | Prokerala API 대비 |
|---|---|---|---|
| Monroe 1926 | 0.00” | 0.19” | 16.95” (시스템) |
| Diana 1961 | 0.00” | 0.69” | 8.18” (시스템) |
| Einstein 1879 | 0.07” | Kerykeion의 LMT 아티팩트 | 14.96” (시스템) |
엔드포인트 수준의 회귀 세트
섹션 제목: “엔드포인트 수준의 회귀 세트”각 기본 계산 엔드포인트는 3개의 참조 차트 (Monroe / Diana / Einstein)에 대한 고정된 스냅샷 테스트로 커버됩니다 = 873 스냅샷.
스냅샷 스위트는 다음을 포착합니다:
- 입력 데이터 매핑 버그 - 잘못된 행성 ID, UT, 하우스 시스템
- 후처리 - 반올림, 단위 변환, 부호 손실
- 기본값 불일치 - 평균 노드 vs 실제 노드, 지심 vs 지표
- 스키마 드리프트 - 유효성 검사가 잘못된 형식을 놓침
- 오래된 배포 - 프로덕션 배포가 코드와 일치하지 않음
허용 오차: 모든 숫자 필드에 대해 기본적으로 5e-5° (≈0.18 각초).
상세 벤치마크
섹션 제목: “상세 벤치마크”행성 위치 (황도, swetest 대비)
섹션 제목: “행성 위치 (황도, swetest 대비)”| 차트 | 날짜 | 최대 편차 |
|---|---|---|
| Marilyn Monroe | 1926-06-01 | 0.00” |
| Princess Diana | 1961-07-01 | 0.00” |
| Albert Einstein | 1879-03-14 | 0.07” |
Placidus 하우스 커스프 (swetest 대비)
섹션 제목: “Placidus 하우스 커스프 (swetest 대비)”| 차트 | ASC 편차 | MC 편차 | 최대 커스프 편차 |
|---|---|---|---|
| Monroe | 0.000” | 0.000” | 0.000” |
| Diana | 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/ASC/DSC 라인은 올바른 longitude = RA − GMST 공식을 사용합니다 (Kenneth Bowser 표준). 기준 대비 편차: 모든 행성에 대해 적도에서 < 1.5km.
일출 / 일몰 (timeanddate.com 대비)
섹션 제목: “일출 / 일몰 (timeanddate.com 대비)”| 위치 | 날짜 | 매개변수 | 편차 |
|---|---|---|---|
| London | 2026-04-15 | 일출 | 0.6초 |
| London | 2026-04-15 | 일몰 | 9초 |
극지방 위치 (|위도| > 66.5°)는 자동으로 polarState + 일반적인 행성 시간이 정의되지 않았다는 경고를 반환합니다.
어스펙트 오르비스
섹션 제목: “어스펙트 오르비스”AstroWay는 ZET9 및 astro.com과 같이 행성별 가변 오르비스 (두 행성 중 최소값 규칙)를 사용합니다. 기본 오르비스 (출생 차트용):
| 어스펙트 | 태양 | 달 | 내행성 | 목성 | 외행성 |
|---|---|---|---|---|---|
| 합 | 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를 통해 명시적으로 활성화됩니다.
극지방 위도
섹션 제목: “극지방 위도”|위도| > 66.5°인 경우 Placidus / Koch / Regiomontanus 시스템은 수학적으로 정의되지 않습니다. 이러한 경우 Swiss Ephemeris는 자동으로 Porphyry를 반환하며, 우리 API는 경고를 추가합니다:
{ "system": "P", "warning": "Система Placidus не визначена для lat=68.96° (> 66.5°). Swiss Ephemeris підставив Porphyry..."}지속적인 검증
섹션 제목: “지속적인 검증”회귀는 CI를 통해 모든 PR에서 검증됩니다:
api-calc/tests/endpoints/- 참조 차트 (Monroe / Diana / Einstein) + 시나스트리 / 컴포지트 / 데이비슨에 대한 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 analytical이 사용되며, 정확도는 ~0.1” (DE431 파일이 있는 SWIEPH의 < 0.01” 대비)
- True Lilith (id=13) vs Mean Lilith (id=12): 최대 12° 차이 - 기본적으로 Mean Lilith (안정적인 동작), True Lilith는
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/
정확도에 대한 질문은 support@astroway.info로 차트 데이터와 예상 기준 (astro.com 또는 기타 권위 있는 소스)을 함께 보내주세요.