[데이터베이스] product.price의 타입을 DECIMAL(10,2) 로 설정한 이유 - TomAndJerry9698/GIANT-MALL-BE GitHub Wiki

가격에 DECIMAL을 사용해야 하는 이유

1. 금액 계산의 정확성 보장

  • FLOAT, DOUBLE은 이진 부동소수점 방식으로 저장되기 때문에 계산 오차가 발생할 수 있음
    예시: 0.1 + 0.2 != 0.3
  • DECIMAL은 10진수 기반의 고정소수점 타입으로, 금액 계산 시 정확성을 보장함

2. 통화 표준에 부합

  • 대부분의 통화는 소수점 2자리까지 표현함 (예: USD, EUR 등)
  • DECIMAL(10,2)는 실제 통화 단위와 일치하며, 금액 표현에 적합함

3. 할인, 세금, 적립금 계산에 필수

  • 할인율, 세율, 적립률 등 퍼센트 기반 계산에는 소수점 연산이 필수
  • 정확하지 않은 계산은 결제 오류, 회계 문제, 고객 클레임 발생 가능

4. 반올림 처리 전략 적용 가능

  • ROUND, FLOOR, CEIL 등을 통해 반올림 전략을 명확하게 설정 가능
  • DECIMAL(10,2)를 사용하면 일관된 정산 로직 구현이 가능함

5. 외부 시스템 연동 시 안정성 확보

  • PG사, 회계 시스템, 세무 프로그램 등은 대부분 DECIMAL 기반 금액 포맷 사용
  • FLOAT 사용 시 금액 불일치나 연동 오류가 발생할 수 있음

결론

정확한 금액 계산, 회계 일관성, 외부 시스템과의 연동 안정성을 위해
금액 필드는 반드시 DECIMAL(10,2)로 설계해야 한다.

FLOAT 또는 DOUBLE은 금액 데이터에 사용하지 않는다.