우주공학/Python

[Python 위성] 내 위성 견적내기: 개발비(NRE)와 양산 단가 자동 계산기

univ 2026. 1. 25. 14:00
반응형

1. 들어가는 글: 엑셀보다 강력한 파이썬 견적서

지난 포스팅에서 우리는 "위성의 무게가 곧 돈이다*라는 파라메트릭 비용 산정 모델(USCM)과, 많이 만들수록 싸지는 학습 곡선(Learning Curve) 이론을 배웠습니다.
https://univ.tistory.com/32

하지만 이 복잡한 지수 함수($Cost = a \times Mass^b$) 계산을 계산기로 두드리고 있을 순 없습니다. 물가 상승률(Inflation)도 반영해야 하고, 1대를 만들 때와 100대를 만들 때의 단가 차이도 한눈에 보여줘야 하니까요.

오늘은 파이썬을 이용해 위성 무게와 생산 수량만 입력하면 총 프로젝트 비용대당 단가를 즉시 계산하고, 시각화해 주는 프로그램을 만들어 보겠습니다.

2. 핵심 로직: SMAD 비용 모델의 구현

우리는 간략화된 비용 추정 모델을 사용합니다. (1990~2000년대 미 공군 모델 기반 + 물가 상승률 보정)

1. 이론적 첫 번째 위성 생산비 (T1 Cost)

$$T1 = a \times (Mass)^{0.7} \times Inflation$$
  • 무게($Mass$)에 비례하지만, 지수($0.7$) 때문에 무게가 늘수록 kg당 단가는 조금씩 효율적이 됩니다.

2. 개발비 (NRE)

$$NRE = T1 \times 1.2$$
  • 보통 첫 번째 위성 생산비의 1.2배 ~ 2배 정도가 연구개발비(설계, 해석, 시험 등)로 들어갑니다.

3. 학습 곡선 (Learning Curve)

$$C_{avg}(N) = T1 \times N^B$$
  • $N$: 생산 개수
  • $B$: 학습 지수 ($= \log(LearningRate) / \log(2)$)
  • 생산량이 늘어날수록 평균 단가가 뚝뚝 떨어지는 것을 계산합니다.

3. 파이썬 코드 구현

이 코드는 '무게' '수량'을 변수로 받아 비용 분석 차트를 그려줍니다.

주의: 이 모델은 '전통적인 위성(Old Space)' 기준이므로, 최근의 초소형 위성(CubeSat)은 이 가격의 1/10 ~ 1/50 수준으로 생각해야 합니다. 또한, 실제 위성 가격은 '비밀(Confidential)'인 경우가 많아 정확한 데이터를 구하기 어렵습니다. 이 코드는 '경향성(Trend)'을 파악하는 도구로만 활용해 주세요.

Python
 
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. 1대 만들 때: 개발비($17.9M)를 포함하면 총 300억 원 가까이 듭니다. 대당 단가도 120억 원($11.9M)으로 비쌉니다.
  2. 50대 만들 때: 학습 효과 덕분에 대당 단가가 $6.0M(약 60억 원)으로 절반 수준까지 떨어집니다.
  3. 인사이트: 이것이 바로 스페이스X가 위성을 수천 개씩 쏘아 올리는 이유입니다. 초기 개발비(NRE)는 고정이므로, 많이 찍어낼수록 개당 가격은 급격히 낮아져 경제성이 확보됩니다.

5. 전체 시리즈 마무리: Conceptual Design Cycle

이로써 우리는 위성 시스템 설계(Conceptual Design)의 한 사이클을 모두 돌았습니다.

  1. Orbit: 어디로 갈 것인가? (궤도 역학)
  2. Payload: 무엇을 볼 것인가? (GSD, 카메라)
  3. Comm: 데이터를 어떻게 보낼까? (링크 버짓)
  4. EPS: 전기는 어떻게 만들까? (태양광, 배터리)
  5. Mass: 무게는 얼마인가? (질량 버짓)
  6. Launch: 무엇을 타고 갈까? (발사체 선정)
  7. Cost: 돈은 얼마나 들까? (비용 산정)

이 7가지 단계는 한 번에 끝나는 것이 아니라, 비용이 너무 비싸면 다시 Payload를 줄이고, Payload를 줄이면 Orbit을 낮춰야 하는 등 무한히 반복(Iteration)되는 과정입니다.

다음 포스팅에서는 이 긴 여정을 정리하며, "그래서 위성 시스템 엔지니어(SE)가 되려면 무엇을 더 공부해야 하는가?"에 대한 로드맵과 참고 자료(SMAD 외의 필독서)를 소개하며 시리즈를 갈무리하겠습니다.

반응형