데이터베이스 설계 시 소수점이 포함된 숫자를 저장할 때 DOUBLE과 DECIMAL 중 무엇을 쓸지 고민될 때가 많습니다. 두 타입의 핵심 차이점과 용도별 선택 기준을 정리했습니다.
1. 한 눈에 보는 비교표
| 구분 | DOUBLE | DECIMAL |
| 타입 | 부동 소수점 (Floating-Point) | 고정 소수점 (Fixed-Point) |
| 정확도 | 근사치 (오차 발생 가능) | 정확한 수치 (오차 없음) |
| 계산 속도 | 빠름 (CPU 연산) | 상대적으로 느림 |
| 저장 용량 | 8바이트 고정 | 선언된 정밀도에 따라 가변적 |
| 적합한 용도 | 과학 기술 계산, GPS, 센서 데이터 | 돈, 금융, 회계, 수수료 계산 |
2. 왜 차이가 발생하나요?
💡 DOUBLE: "최대한 비슷한 값을 저장하자"
컴퓨터는 2진수를 사용합니다. 0.1과 같은 숫자를 2진수로 변환하면 무한 소수가 되는데, DOUBLE은 이를 적당한 지점에서 반올림하여 근사치로 저장합니다.
- 장점: 연산 속도가 매우 빠르고 아주 큰 숫자나 아주 작은 숫자를 효율적으로 다룹니다.
- 단점: 숫자를 더하고 빼는 과정에서 미세한 오차가 누적될 수 있습니다. (예: 0.1을 10번 더했는데 0.99999...가 되는 현상)
💡 DECIMAL: "글자 그대로 정확하게 저장하자"
DECIMAL은 내부적으로 숫자를 문자열과 유사하게 관리하여, 우리가 입력한 숫자를 소수점 위치까지 그대로 저장합니다.
- 장점: 연산 시 오차가 전혀 없습니다. 정확도가 생명인 금융 데이터에 필수입니다.
- 단점: 계산 속도가 부동 소수점에 비해 느리고 저장 공간을 더 많이 차지할 수 있습니다.
3. 실무 선택 가이드
✅ DECIMAL을 써야 하는 경우 (Accuracy is King)
- 돈과 관련된 모든 데이터 (가격, 잔액, 환율, 수수료율)
- 정확한 비율 계산이 필요한 경우 (할인율 15.5% 등)
- 소수점 이하 자릿수가 고정되어야 하는 경우
✅ DOUBLE을 써야 하는 경우 (Performance is King)
- 측정값 (온도, 습도, 무게, 높이 등)
- 좌표 데이터 (위도, 경도)
- 오차가 결과에 큰 영향을 주지 않는 대규모 통계 데이터
4. 사용 예시 (SQL)
-- 돈 관련 (전체 19자리, 소수점 4자리)
CREATE TABLE payments (
id INT PRIMARY KEY,
amount DECIMAL(19, 4) NOT NULL
);
-- 센서 데이터 관련
CREATE TABLE sensor_logs (
id INT PRIMARY KEY,
temperature DOUBLE NOT NULL
);
💡 요약 한 줄 평
"돈 계산은 무조건 DECIMAL, 그 외 성능이 중요한 수치 데이터는 DOUBLE을 선택하세요!"
반응형
'IT관련 > MariaDB' 카테고리의 다른 글
| MySQL/MariaDB 서버 메모리가 계속 늘어난다면? (원인 분석부터 Swap 해결까지) (0) | 2026.01.26 |
|---|---|
| 외부에서는 ip로 연결이 되는데 자신의 서버에서 ip로 연결이 안될때. (0) | 2025.04.17 |