MySQL에서 금액 저장 시 DECIMAL 타입을 사용해야 하는 이유
MySQL에 금액 값을 저장할 때 가장 좋은 선택은 DECIMAL 또는 NUMERIC 데이터 타입입니다. 흔히 사용되는 FLOAT 타입은 부동소수점 연산 특성상 반올림 오류가 발생할 수 있어 금액 저장에는 적합하지 않습니다. 따라서 정확성이 중요한 금융 데이터에는 반드시 FLOAT 대신 DECIMAL 타입을 사용하는 것이 좋습니다.
1. DECIMAL 타입으로 테이블 생성하기
먼저 DECIMAL 타입을 사용하는 테이블을 만들어 보겠습니다. 아래는 테이블을 생성하는 쿼리입니다.
mysql> create table MoneyStorageDemo
-> (
-> Amount DECIMAL(4,2)
-> );
Query OK, 0 rows affected (0.44 sec)
위 예제에서 DECIMAL(4,2)는 전체 4자리 숫자 중 소수점 이하 2자리까지 허용한다는 의미입니다. 즉, -99.99부터 99.99 사이의 값을 오차 없이 정확하게 저장할 수 있습니다.
2. INSERT 명령으로 데이터 삽입하기
insert 명령을 사용하여 테이블에 몇 가지 값을 넣어 보겠습니다.
mysql> insert into MoneyStorageDemo values(50.2);
Query OK, 1 row affected (0.10 sec)
mysql> insert into MoneyStorageDemo values(5.50);
Query OK, 1 row affected (0.32 sec)
mysql> insert into MoneyStorageDemo values(10.4);
Query OK, 1 row affected (0.26 sec)
3. SELECT 문으로 저장된 값 확인하기
이제 select 문을 사용하여 테이블의 모든 값을 조회할 수 있습니다.
mysql> select *from MoneyStorageDemo;
실행 결과는 다음과 같습니다.
+--------+
| Amount |
+--------+
| 50.20 |
| 5.50 |
| 10.40 |
+--------+
3 rows in set (0.00 sec)
결과 분석 및 정리
주목할 점은 삽입 시 50.2처럼 소수점 첫째 자리까지만 입력했음에도 불구하고, DECIMAL(4,2) 타입이 자동으로 소수점 둘째 자리까지 맞춰 50.20으로 저장했다는 것입니다. 10.4 역시 10.40으로 저장된 것을 확인할 수 있습니다.
이처럼 DECIMAL 타입은 고정된 소수점 자릿수를 보장하기 때문에, 근사치를 저장하는 FLOAT 타입과 달리 오차 없이 금액을 정확하게 관리할 수 있습니다. 결제 금액, 잔고, 회계 데이터 등 돈과 관련된 모든 값을 다룰 때는 DECIMAL 또는 NUMERIC 타입을 사용하는 것이 MySQL에서의 모범적인 방법입니다.