단위 변환과 국제화 대응 가이드
글로벌 서비스를 운영하거나 국제적인 협업을 할 때 단위 변환은 필수적입니다. 정확한 단위 변환과 현지화 전략을 통해 전 세계 사용자에게 최적화된 서비스를 제공할 수 있습니다.
1. 단위 시스템의 이해
주요 단위 시스템
미터법 (Metric System)
- 사용 지역: 전 세계 대부분 국가 (95% 이상)
- 기준 단위: 미터(m), 킬로그램(kg), 초(s), 켈빈(K)
- 장점: 10진법 기반, 논리적 체계, 과학적 표준
- 변환: 접두사 활용 (킬로-, 센티-, 밀리- 등)
야드파운드법 (Imperial System)
- 사용 지역: 미국, 영국 일부, 미얀마, 라이베리아
- 기준 단위: 야드(yard), 파운드(pound), 화씨(°F)
- 특징: 역사적 관습, 복잡한 변환 비율
- 현실: 미국 시장 진출 시 필수 고려사항
기타 전통 단위
중국: 斤 (jin) = 0.5kg, 里 (li) = 0.5km
일본: 尺 (shaku) = 30.3cm, 坪 (tsubo) = 3.31㎡
한국: 평 = 3.31㎡, 척 = 30.3cm
인도: 락(lakh) = 100,000, 크로어(crore) = 10,000,000
변환의 중요성과 영향
비즈니스 영향
- 전자상거래: 잘못된 단위로 인한 주문 오류
- 제조업: 부품 규격 불일치로 인한 품질 문제
- 건설업: 설계 오류로 인한 안전사고 위험
- 의료: 약물 투여량 오류로 인한 생명 위험
사용자 경험
- 현지화된 단위로 직관적 이해 향상
- 변환 없이 바로 사용 가능한 정보 제공
- 신뢰도 증가와 이탈률 감소
- 접근성 향상으로 시장 확대
2. 길이와 거리 변환
기본 단위 변환표
미터법 내 변환
1km = 1,000m = 100,000cm = 1,000,000mm
1m = 100cm = 1,000mm
1cm = 10mm = 0.01m
1mm = 0.1cm = 0.001m
미터법 ↔ 야드파운드법
길이:
1m = 3.28084 ft = 39.3701 in = 1.09361 yd
1ft = 0.3048m = 12in
1in = 2.54cm = 25.4mm
1yd = 0.9144m = 3ft = 36in
장거리:
1km = 0.621371 mile = 3,280.84 ft
1mile = 1.60934km = 5,280ft = 1,760yd
정밀한 변환 공식
class LengthConverter {
// 모든 단위를 미터 기준으로 변환
static toMeters = {
// 미터법
'mm': 0.001,
'cm': 0.01,
'm': 1,
'km': 1000,
// 야드파운드법
'in': 0.0254,
'ft': 0.3048,
'yd': 0.9144,
'mile': 1609.344,
// 해양/항공
'nmi': 1852, // 해리 (nautical mile)
'fathom': 1.8288, // 패덤 (수심 측정)
// 기타
'angstrom': 1e-10,
'lightyear': 9.461e15
};
static convert(value, fromUnit, toUnit) {
if (fromUnit === toUnit) return value;
const metersValue = value * this.toMeters[fromUnit];
return metersValue / this.toMeters[toUnit];
}
// 적절한 단위로 자동 변환
static autoFormat(meters, system = 'metric') {
if (system === 'metric') {
if (meters >= 1000) return `${(meters/1000).toFixed(2)} km`;
if (meters >= 1) return `${meters.toFixed(2)} m`;
if (meters >= 0.01) return `${(meters*100).toFixed(1)} cm`;
return `${(meters*1000).toFixed(0)} mm`;
} else {
const feet = meters * 3.28084;
if (feet >= 5280) return `${(feet/5280).toFixed(2)} mi`;
if (feet >= 3) return `${feet.toFixed(1)} ft`;
return `${(feet*12).toFixed(0)} in`;
}
}
}
특수 상황 변환
건축/부동산
// 면적 변환 (제곱 단위)
class AreaConverter {
static convert(value, fromUnit, toUnit) {
// 평방미터 기준 변환표
const toSquareMeters = {
'mm²': 1e-6,
'cm²': 1e-4,
'm²': 1,
'km²': 1e6,
'in²': 0.00064516,
'ft²': 0.092903,
'yd²': 0.836127,
'acre': 4046.86,
'hectare': 10000,
'평': 3.30579 // 한국 전통 단위
};
const sqMeters = value * toSquareMeters[fromUnit];
return sqMeters / toSquareMeters[toUnit];
}
}
// 사용 예시
const apartment = 84; // 84평 아파트
const sqMeters = AreaConverter.convert(apartment, '평', 'm²');
const sqFeet = AreaConverter.convert(sqMeters, 'm²', 'ft²');
console.log(`${apartment}평 = ${sqMeters.toFixed(1)}㎡ = ${sqFeet.toFixed(0)}ft²`);
// "84평 = 277.7㎡ = 2989ft²"
3. 무게와 질량 변환
기본 변환 체계
미터법 무게 단위
1kg = 1,000g = 1,000,000mg
1g = 1,000mg = 0.001kg
1ton(미터톤) = 1,000kg
1quintal = 100kg (일부 국가)
야드파운드법 무게 단위
1lb (pound) = 16oz (ounce) = 453.592g
1oz = 28.3495g
1stone = 14lb = 6.35029kg (영국)
1ton(short ton, US) = 2,000lb = 907.185kg
1ton(long ton, UK) = 2,240lb = 1,016.05kg
정밀 변환 구현
class WeightConverter {
static toGrams = {
// 미터법
'mg': 0.001,
'g': 1,
'kg': 1000,
'tonne': 1000000, // 미터톤
// 야드파운드법
'oz': 28.3495,
'lb': 453.592,
'stone': 6350.29,
'short_ton': 907185, // 미국 톤
'long_ton': 1016047, // 영국 톤
// 귀금속 (트로이 온스)
'troy_oz': 31.1035,
'troy_lb': 373.242,
// 기타 전통 단위
'carat': 0.2, // 보석용
'grain': 0.0648 // 화약, 약물용
};
static convert(value, fromUnit, toUnit) {
if (fromUnit === toUnit) return value;
const gramsValue = value * this.toGrams[fromUnit];
return gramsValue / this.toGrams[toUnit];
}
// 사용자 친화적 표시
static formatWeight(grams, system = 'metric', precision = 2) {
if (system === 'metric') {
if (grams >= 1000000) return `${(grams/1000000).toFixed(precision)} tonnes`;
if (grams >= 1000) return `${(grams/1000).toFixed(precision)} kg`;
if (grams >= 1) return `${grams.toFixed(precision)} g`;
return `${(grams*1000).toFixed(0)} mg`;
} else {
const pounds = grams / 453.592;
if (pounds >= 2000) return `${(pounds/2000).toFixed(precision)} tons`;
if (pounds >= 1) return `${pounds.toFixed(precision)} lbs`;
return `${(pounds*16).toFixed(1)} oz`;
}
}
}
특수 분야 변환
요리/베이킹
class CookingConverter {
// 부피와 무게의 관계 (재료별 밀도 고려)
static ingredientDensity = {
'flour': 125, // g per cup
'sugar': 200,
'butter': 227,
'milk': 240,
'water': 240,
'rice': 185,
'oats': 90
};
static volumeToWeight(volume, unit, ingredient) {
// 컵을 그램으로 변환
const cupToMl = {
'cup_us': 236.588,
'cup_metric': 250,
'cup_imperial': 284.131
};
const mlVolume = volume * cupToMl[unit];
const density = this.ingredientDensity[ingredient] || 240; // 기본값
return (mlVolume * density / 250); // 250ml 기준 밀도
}
}
// 사용 예시: 미국 레시피를 미터법으로 변환
const flourCups = 2; // 2 cups of flour
const flourGrams = CookingConverter.volumeToWeight(flourCups, 'cup_us', 'flour');
console.log(`${flourCups} cups flour = ${flourGrams}g`); // "2 cups flour = 250g"
4. 온도 변환
온도 체계 이해
주요 온도 단위
섭씨(Celsius, °C): 물의 어는점 0°, 끓는점 100°
화씨(Fahrenheit, °F): 물의 어는점 32°, 끓는점 212°
켈빈(Kelvin, K): 절대온도, 0K = -273.15°C
랭킨(Rankine, °R): 화씨 기반 절대온도 (미국 공학)
정확한 변환 공식
class TemperatureConverter {
static convert(value, fromUnit, toUnit) {
// 모든 단위를 켈빈으로 먼저 변환
let kelvin;
switch(fromUnit.toLowerCase()) {
case 'c':
case 'celsius':
kelvin = value + 273.15;
break;
case 'f':
case 'fahrenheit':
kelvin = (value - 32) * 5/9 + 273.15;
break;
case 'k':
case 'kelvin':
kelvin = value;
break;
case 'r':
case 'rankine':
kelvin = value * 5/9;
break;
default:
throw new Error(`Unsupported temperature unit: ${fromUnit}`);
}
// 켈빈에서 목표 단위로 변환
switch(toUnit.toLowerCase()) {
case 'c':
case 'celsius':
return kelvin - 273.15;
case 'f':
case 'fahrenheit':
return (kelvin - 273.15) * 9/5 + 32;
case 'k':
case 'kelvin':
return kelvin;
case 'r':
case 'rankine':
return kelvin * 9/5;
default:
throw new Error(`Unsupported temperature unit: ${toUnit}`);
}
}
// 일상적인 온도 범위 판단
static getTemperatureCategory(celsius) {
if (celsius < -10) return { category: 'very_cold', color: '#0EA5E9' };
if (celsius < 0) return { category: 'freezing', color: '#3B82F6' };
if (celsius < 10) return { category: 'cold', color: '#6366F1' };
if (celsius < 20) return { category: 'cool', color: '#10B981' };
if (celsius < 25) return { category: 'comfortable', color: '#059669' };
if (celsius < 30) return { category: 'warm', color: '#F59E0B' };
if (celsius < 35) return { category: 'hot', color: '#EF4444' };
return { category: 'very_hot', color: '#DC2626' };
}
// 지역별 온도 표시 선호도
static formatByRegion(celsius, region = 'metric') {
const preferences = {
'US': 'fahrenheit',
'LR': 'fahrenheit', // 라이베리아
'MM': 'celsius', // 미얀마 (공식적으로는 섭씨)
'metric': 'celsius'
};
const unit = preferences[region] || 'celsius';
const converted = this.convert(celsius, 'celsius', unit);
const symbol = unit === 'fahrenheit' ? '°F' : '°C';
return `${Math.round(converted)}${symbol}`;
}
}
실용적 온도 가이드
생활 온도 기준
const temperatureGuides = {
weather: {
'very_cold': { range: '< -10°C (< 14°F)', clothing: '두꺼운 겨울옷, 방한용품' },
'cold': { range: '-10~0°C (14~32°F)', clothing: '겨울 코트, 장갑, 모자' },
'cool': { range: '0~15°C (32~59°F)', clothing: '재킷, 긴팔' },
'comfortable': { range: '15~25°C (59~77°F)', clothing: '가벼운 옷, 긴팔' },
'warm': { range: '25~30°C (77~86°F)', clothing: '반팔, 얇은 옷' },
'hot': { range: '> 30°C (> 86°F)', clothing: '시원한 옷, 자외선 차단' }
},
cooking: {
'refrigerator': '4°C (39°F)',
'freezer': '-18°C (0°F)',
'room_temp': '20-25°C (68-77°F)',
'body_temp': '37°C (98.6°F)',
'hot_beverage': '60-70°C (140-158°F)',
'boiling_water': '100°C (212°F)',
'oven_low': '120-160°C (250-320°F)',
'oven_medium': '180-200°C (350-400°F)',
'oven_high': '220-260°C (425-500°F)'
}
};