alltools.one
Tools
2025-06-18
7 min
alltools.one Team
Unit ConversionMeasurementMetricImperialBest Practices

수백만 달러의 손실을 초래한 단위 변환 실수

단위 변환은 잘못되기 전까지 사소해 보입니다. 잘못 놓인 소수점, 혼동된 단위 체계, 잘못된 시간대는 사소한 버그부터 치명적 실패까지의 결과를 초래할 수 있습니다. 이 실제 사례들은 신중한 단위 처리가 왜 중요한지 보여줍니다.

유명한 단위 변환 재앙

Mars Climate Orbiter (1999) — 3억 2,760만 달러

NASA의 Mars Climate Orbiter는 한 팀이 야드파운드법 단위(파운드력 초)를 사용하고 다른 팀은 미터법 단위(뉴턴 초)를 예상했기 때문에 화성 대기에서 분해되었습니다. 항법 소프트웨어가 추력을 잘못 계산하여 우주선이 170km 너무 낮게 궤도에 진입했습니다.

교훈: 인터페이스와 문서에서 항상 단위를 명시적으로 지정하세요. 절대 추측하지 마세요.

Gimli Glider (1983) — 아찔한 사고

에어 캐나다 보잉 767이 비행 중 연료가 바닥났는데, 지상 승무원이 연료를 킬로그램 대신 파운드로 계산했기 때문입니다. 항공기에 22,300 kg의 연료가 필요했지만 22,300 파운드 (약 10,100 kg)를 받았습니다 — 절반도 안 되는 양.

조종사들은 무동력 항공기를 매니토바주 김리의 전 공군 기지에 안전하게 활공 착륙시켰습니다.

콜럼버스와 리그

크리스토퍼 콜럼버스는 아라비아 마일 (약 1.8 km)을 더 짧은 로마 마일 (약 1.5 km)과 혼동하여 아시아까지의 거리를 크게 과소평가했습니다. 그의 계산된 일본까지 거리는 약 3,700 km — 실제 거리는 19,000 km 이상입니다.

일반적인 개발자 실수

1. 바이트 vs. 비트

네트워크 속도는 초당 비트 (Mbps)로 측정되고, 스토리지는 바이트 (MB)로 측정됩니다. 100 Mbps 연결은 초당 약 12.5 MB를 전송합니다.

100 Mbps ÷ 8 = 12.5 MB/s

많은 사용자가 이 단위를 혼동하고 "100 Mbps" 연결이 파일 다운로드 시 왜 느린지 궁금해합니다.

2. 킬로바이트: 1000 vs. 1024

두 가지 경쟁 표준이 존재합니다:

접두사십진법 (SI)이진법 (IEC)
K1,000 바이트 (kB)1,024 바이트 (KiB)
M1,000,000 바이트 (MB)1,048,576 바이트 (MiB)
G1,000,000,000 바이트 (GB)1,073,741,824 바이트 (GiB)

"500 GB" 하드 드라이브는 500,000,000,000 바이트로, 465.66 GiB입니다 — OS가 라벨보다 적은 용량을 보고하는 이유입니다.

3. 온도 변환

섭씨-화씨 공식은 일반적인 버그 원인입니다:

°F = (°C × 9/5) + 32
°C = (°F - 32) × 5/9

일부 언어에서 정수 나눗셈은 오류를 유발할 수 있습니다: 두 피연산자가 정수이면 9/51.8 대신 1이 될 수 있습니다.

4. 시간대 오프셋

모든 시간대가 UTC에서 정시간 오프셋은 아닙니다:

  • 인도: UTC+5:30
  • 네팔: UTC+5:45
  • 채텀 제도: UTC+12:45

정시간 오프셋을 가정하면 수백만 사용자에게 애플리케이션이 망가집니다.

5. 통화 정밀도

금융 계산은 부동소수점이 아닌 정확한 십진 산술을 사용해야 합니다:

// 잘못됨
0.1 + 0.2 = 0.30000000000000004

// 올바름 - 정수 센트 사용
const total = 10 + 20; // 30 센트
const display = (total / 100).toFixed(2); // "0.30"

단위 변환기로 안전하게 단위 간 변환하세요.

개발자를 위한 모범 사례

1. 표준 단위로 저장

내부적으로 차원당 하나의 표준 단위를 사용하세요:

  • 길이: 미터
  • 무게: 킬로그램 (또는 그램)
  • 온도: 켈빈 또는 섭씨
  • 시간: 초 (또는 Unix 타임스탬프)
  • 통화: 최소 단위 (센트)

표시 단위로의 변환은 프레젠테이션 레이어에서만 수행하세요.

2. 단위를 명시적으로 만들기

# 나쁨 - 모호함
distance = 5000
timeout = 30

# 좋음 - 명확함
distance_meters = 5000
timeout_seconds = 30

# 더 좋음 - 타입 안전성
from dataclasses import dataclass

@dataclass
class Distance:
    meters: float
    
    @property
    def kilometers(self):
        return self.meters / 1000
    
    @property
    def miles(self):
        return self.meters / 1609.344

3. 경계에서 검증

외부 소스 (API, 사용자 입력, 파일)에서 단위 값을 받을 때 즉시 검증:

def process_temperature(value: float, unit: str) -> float:
    if unit == "celsius":
        return value
    elif unit == "fahrenheit":
        return (value - 32) * 5 / 9
    elif unit == "kelvin":
        return value - 273.15
    else:
        raise ValueError(f"Unknown temperature unit: {unit}")

4. 라이브러리 사용

복잡한 변환에는 직접 구현하는 대신 검증된 라이브러리를 사용하세요:

  • Python: pint (단위가 있는 물리적 수량)
  • JavaScript: convert-units
  • Java: javax.measure (JSR-385)

FAQ

미국은 왜 아직 야드파운드법을 사용하나요?

1975년 미국 미터법 전환법은 미터법 채택을 강제가 아닌 자발적으로 만들었습니다. 산업 저항, 도구 교체 비용, 야드파운드법에 대한 대중의 친숙함이 채택을 늦추었습니다. 오늘날 과학, 의학, 군대는 미터법을 사용하지만 일상적인 측정은 야드파운드법으로 남아 있습니다. 공식적으로 미터법이 아닌 다른 나라는 미얀마와 라이베리아뿐입니다.

다국어 애플리케이션에서 단위 변환을 어떻게 처리하나요?

내부적으로 표준 단위로 값을 저장하세요. 표시 레이어에서 사용자의 로케일이나 선호도를 확인하여 표시 단위를 결정합니다. 일부 로케일은 명확한 관례가 있고 (유럽은 미터법, 미국은 야드파운드법), 항상 사용자가 기본값을 재정의할 수 있도록 하세요. 온도의 경우 일부 지역 (미국)은 화씨가 기본이고 대부분의 세계는 섭씨를 사용합니다.

관련 리소스

Published on 2025-06-18
Unit Conversion Mistakes That Cost Millions | alltools.one