1. 들어가는 글: 엑셀보다 강력한 파이썬 견적서
지난 포스팅에서 우리는 "위성의 무게가 곧 돈이다*라는 파라메트릭 비용 산정 모델(USCM)과, 많이 만들수록 싸지는 학습 곡선(Learning Curve) 이론을 배웠습니다.
https://univ.tistory.com/32
하지만 이 복잡한 지수 함수($Cost = a \times Mass^b$) 계산을 계산기로 두드리고 있을 순 없습니다. 물가 상승률(Inflation)도 반영해야 하고, 1대를 만들 때와 100대를 만들 때의 단가 차이도 한눈에 보여줘야 하니까요.
오늘은 파이썬을 이용해 위성 무게와 생산 수량만 입력하면 총 프로젝트 비용과 대당 단가를 즉시 계산하고, 시각화해 주는 프로그램을 만들어 보겠습니다.
2. 핵심 로직: SMAD 비용 모델의 구현
우리는 간략화된 비용 추정 모델을 사용합니다. (1990~2000년대 미 공군 모델 기반 + 물가 상승률 보정)
1. 이론적 첫 번째 위성 생산비 (T1 Cost)
- 무게($Mass$)에 비례하지만, 지수($0.7$) 때문에 무게가 늘수록 kg당 단가는 조금씩 효율적이 됩니다.
2. 개발비 (NRE)
- 보통 첫 번째 위성 생산비의 1.2배 ~ 2배 정도가 연구개발비(설계, 해석, 시험 등)로 들어갑니다.
3. 학습 곡선 (Learning Curve)
- $N$: 생산 개수
- $B$: 학습 지수 ($= \log(LearningRate) / \log(2)$)
- 생산량이 늘어날수록 평균 단가가 뚝뚝 떨어지는 것을 계산합니다.
3. 파이썬 코드 구현
이 코드는 '무게'와 '수량'을 변수로 받아 비용 분석 차트를 그려줍니다.
주의: 이 모델은 '전통적인 위성(Old Space)' 기준이므로, 최근의 초소형 위성(CubeSat)은 이 가격의 1/10 ~ 1/50 수준으로 생각해야 합니다. 또한, 실제 위성 가격은 '비밀(Confidential)'인 경우가 많아 정확한 데이터를 구하기 어렵습니다. 이 코드는 '경향성(Trend)'을 파악하는 도구로만 활용해 주세요.
import numpy as np
import matplotlib.pyplot as plt
def estimate_satellite_cost(dry_mass_kg, quantity, learning_rate=0.85):
"""
위성 비용 산정 함수 (Simplified Parametric Model)
- dry_mass_kg: 위성 건조 중량
- quantity: 생산 수량
- learning_rate: 학습 곡선 비율 (기본 85%)
"""
# 1. 상수 설정
# a: 복잡도 계수 (위성 종류에 따라 다름, 평균값 적용)
# inflation: 2000년대 초반 모델을 2025년 가치로 환산 (약 1.8배)
a_coeff = 20.0 # (단위: $M, 백만 달러) - 임의의 보정값
inflation = 1.8
# 2. 첫 번째 위성 생산비 (T1 Cost) 계산
# 공식: Cost ~ Mass^0.7
t1_cost = a_coeff * (dry_mass_kg ** 0.7) * inflation / 100.0
# (결과가 너무 커서 보기 좋게 1/100 스케일링 - 교육용 모델임에 유의)
# 3. 개발비 (NRE, Non-Recurring Engineering)
# 보통 T1 Cost의 1.5배 ~ 2배 정도 소요됨
nre_cost = t1_cost * 1.5
# 4. 학습 곡선 적용 (양산 단가 계산)
# B = log(Slope) / log(2)
b_exponent = np.log(learning_rate) / np.log(2)
# 누적 평균 단가 공식: C_avg = T1 * N^B
cumulative_avg_cost = t1_cost * (quantity ** b_exponent)
# 총 생산비 (Recurring Cost)
total_production_cost = cumulative_avg_cost * quantity
# 총 프로젝트 비용
total_program_cost = nre_cost + total_production_cost
return nre_cost, cumulative_avg_cost, total_program_cost
# --- 시각화 함수 ---
def plot_cost_analysis(dry_mass_kg, max_quantity=50):
quantities = np.arange(1, max_quantity + 1)
unit_costs = []
print(f"=== [Satellite Cost Estimator] (Mass: {dry_mass_kg} kg) ===")
for q in quantities:
_, avg_unit_cost, _ = estimate_satellite_cost(dry_mass_kg, q)
unit_costs.append(avg_unit_cost)
# 견적서 출력 (1대, 10대, 50대 기준)
for q in [1, 10, max_quantity]:
nre, unit, total = estimate_satellite_cost(dry_mass_kg, q)
print(f" [Qty: {q:>2} 대] 개발비: ${nre:.1f}M | 대당 단가: ${unit:.1f}M | 총계: ${total:.1f}M")
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(quantities, unit_costs, marker='o', color='purple', linewidth=2, markersize=4)
plt.title(f"Learning Curve Effect: Unit Cost vs Quantity\n(Sat Mass: {dry_mass_kg} kg)", fontsize=14)
plt.xlabel("Quantity Produced (ea)", fontsize=12)
plt.ylabel("Average Unit Cost ($ Million)", fontsize=12)
plt.grid(True, which="both", ls="--", alpha=0.6)
# 포인트 강조
plt.plot(1, unit_costs[0], 'r*', markersize=15, label='1st Unit')
plt.plot(max_quantity, unit_costs[-1], 'b*', markersize=15, label=f'{max_quantity}th Unit')
plt.legend()
plt.show()
# --- 실습 ---
# Case 1: 150kg짜리 소형 위성을 50대 양산한다면?
plot_cost_analysis(dry_mass_kg=150, max_quantity=50)
4. 실행 결과 분석: 규모의 경제
코드를 실행하면 수량에 따른 가격 변화가 출력되고, 아름다운 하향 곡선 그래프가 나타납니다.


[분석]
- 1대 만들 때: 개발비($17.9M)를 포함하면 총 300억 원 가까이 듭니다. 대당 단가도 120억 원($11.9M)으로 비쌉니다.
- 50대 만들 때: 학습 효과 덕분에 대당 단가가 $6.0M(약 60억 원)으로 절반 수준까지 떨어집니다.
- 인사이트: 이것이 바로 스페이스X가 위성을 수천 개씩 쏘아 올리는 이유입니다. 초기 개발비(NRE)는 고정이므로, 많이 찍어낼수록 개당 가격은 급격히 낮아져 경제성이 확보됩니다.
5. 전체 시리즈 마무리: Conceptual Design Cycle
이로써 우리는 위성 시스템 설계(Conceptual Design)의 한 사이클을 모두 돌았습니다.
- Orbit: 어디로 갈 것인가? (궤도 역학)
- Payload: 무엇을 볼 것인가? (GSD, 카메라)
- Comm: 데이터를 어떻게 보낼까? (링크 버짓)
- EPS: 전기는 어떻게 만들까? (태양광, 배터리)
- Mass: 무게는 얼마인가? (질량 버짓)
- Launch: 무엇을 타고 갈까? (발사체 선정)
- Cost: 돈은 얼마나 들까? (비용 산정)
이 7가지 단계는 한 번에 끝나는 것이 아니라, 비용이 너무 비싸면 다시 Payload를 줄이고, Payload를 줄이면 Orbit을 낮춰야 하는 등 무한히 반복(Iteration)되는 과정입니다.
다음 포스팅에서는 이 긴 여정을 정리하며, "그래서 위성 시스템 엔지니어(SE)가 되려면 무엇을 더 공부해야 하는가?"에 대한 로드맵과 참고 자료(SMAD 외의 필독서)를 소개하며 시리즈를 갈무리하겠습니다.
'우주공학 > Python' 카테고리의 다른 글
| [Python 위성 심화] 폭주하는 위성 멈추기: PID 제어기와 반작용 휠 시뮬레이션 (0) | 2026.01.26 |
|---|---|
| [Python 위성 심화] 우주에서 팽이 돌리기: 오일러 방정식과 무중력 회전 시뮬레이션 (0) | 2026.01.25 |
| [Python 위성] 내 위성, 뭘 타고 올라갈까? 발사체 선정 & 가성비 분석기 만들기 (0) | 2026.01.25 |
| [SMAD 발사체] 스페이스X냐 누리호냐? 내 위성에 딱 맞는 로켓(Launch Vehicle) 고르기 (0) | 2026.01.24 |
| [Python 위성] 엑셀 노가다 해방! 파이썬으로 질량 버짓(Mass Budget) 관리 & 시각화하기 (0) | 2026.01.23 |