각 컬럼은 무엇을 저장하는지 정의하는 데이터 타입을 가집니다 — 숫자, 텍스트, 날짜, boolean 등. 올바른 타입 선택은 저장 효율, 정확성, 성능에 중요합니다. 타입은 데이터베이스마다 다소 다르지만, 범주는 표준적입니다.
숫자 타입
(,)
SERIAL AUTO_INCREMENT
각 컬럼은 무엇을 저장하는지 정의하는 데이터 타입을 가집니다 — 숫자, 텍스트, 날짜, boolean 등. 올바른 타입 선택은 저장 효율, 정확성, 성능에 중요합니다. 타입은 데이터베이스마다 다소 다르지만, 범주는 표준적입니다.
(,)
SERIAL AUTO_INCREMENT
중요: 금액에는 DECIMAL/NUMERIC을 사용하세요(정확한 산술). 절대 FLOAT/DOUBLE을 쓰지 마세요(금융 계산을 손상시키는 반올림 오류가 있음).
VARCHAR(n) -- n글자까지 가변 길이 텍스트 (흔한 선택)
CHAR(n) -- 고정 길이 (패딩됨) — 알려진 길이의 코드용 (예: 국가 코드)
TEXT -- 큰/무제한 텍스트 (글, 설명)
VARCHAR(n)은 일상적인 텍스트 타입이고, TEXT는 큰 내용용, CHAR(n)은 고정 길이 코드용입니다.
DATE -- 날짜만 (2024-01-15)
TIME -- 시간만
TIMESTAMP -- 날짜 + 시간 (시간대 포함 또는 미포함 — Postgres에서 TIMESTAMPTZ)
BOOLEAN -- 참/거짓
UUID -- 범용 고유 식별자 (분산 ID에 좋음)
JSON / JSONB -- 구조화된 JSON 데이터 (Postgres의 JSONB는 index 가능/효율적)
BLOB / BYTEA -- 이진 데이터
✓ 저장 — 작은 타입은 공간을 덜 씀 (INT vs BIGINT; VARCHAR vs TEXT)
✓ 정확성 — 금액에는 DECIMAL (정확), 날짜에는 적절한 날짜 타입, 플래그에는 BOOLEAN
✓ 성능 — 올바른 타입은 효율적으로 index되고 비교됨; 적절한 크기 = 적은 I/O
✓ 검증 — 타입 자체가 저장될 수 있는 것을 제약함 (INT는 텍스트를 담을 수 없음)
✓ 시간대 — 시간대 버그를 피하려면 timestamp에 TIMESTAMPTZ 사용
적절한 데이터 타입 선택은 저장, 정확성, 성능에 영향을 주는 데이터베이스 설계의 근본적 측면이므로, 흔한 타입과 선택 방법을 이해하는 것은 중요한 일상 지식입니다.
범주 — 숫자(INT, BIGINT, DECIMAL, FLOAT), 텍스트(VARCHAR, CHAR, TEXT), 날짜/시간(DATE, TIMESTAMP), boolean, 특수 타입(UUID, JSON/JSONB) — 를 아는 것은 테이블을 올바르게 설계하는 데 필요합니다.
여러 선택이 이해할 가치가 있는 실질적 결과를 가집니다: 금액에 FLOAT이 아니라 DECIMAL/NUMERIC 사용(결정적인 정확성 문제 — 부동소수점 반올림 오류가 금융 계산을 손상시키는 고전적이고 심각한 버그), 올바른 정수 크기 선택(INT 범위를 넘어 자랄 수 있는 ID에 BIGINT — 큰 테이블의 실제 우려), 적절한 날짜/시간 타입 사용(특히 시간대 버그를 피하는 시간대 인식 TIMESTAMPTZ), 적절한 크기의 텍스트 타입 선택(VARCHAR vs TEXT).
올바른 타입 선택은 저장 효율(작은 타입은 공간과 I/O를 덜 씀), 정확성(타입이 데이터를 검증하고 정확히 표현), 성능(올바른 타입은 효율적으로 index되고 비교됨)에 영향을 줍니다.
모든 컬럼은 타입 선택을 요구하고, 잘못된 선택이 실제 문제를 일으키므로(금액에 FLOAT이 계산을 손상, ID에 INT 오버플로, 시간대 버그), 흔한 SQL 데이터 타입과 선택 원칙 — 금액에는 정확성, 적절한 크기, 시간대 인식 timestamp — 을 이해하는 것은 미묘하지만 심각한 데이터 정확성과 성능 문제 부류를 방지하는, 건전한 데이터베이스 설계에 중요하고 기초적인 지식입니다.