값에 맞는 그릇을 골라
자료형은 저장 공간만 정하지 않아. 허용되는 값과 비교 방식, 쓸 수 있는 연산과 색인까지 결정해. 숫자를 문자열에 넣거나 시각을 시간대 없는 값으로 저장하면 편해 보이는 오늘 대신 오래 이어질 모호함을 사는 셈이야. 처음부터 맞는 자료형을 고르면 미래의 버그 100개를 입구에서 없앨 수 있어.
90%를 맡는 자료형
- INTEGER·BIGINT는 개수와 식별자에 써. 약 21억을 넘을 수 있는 큰 테이블의 키나 바이트 수에는 BIGINT가 안전해.
- NUMERIC은 돈처럼 정확한 십진수에 써.
- TEXT는 길이를 임의로 자를 이유가 없는 문자열에 알맞아.
VARCHAR(n)은 실제 업무 규칙으로 길이를 제한할 때만 골라. - BOOLEAN은 두 상태를 표현해. 불리언을 0/1 정수로 흉내 내지 마.
- DATE는 날짜를, TIMESTAMPTZ는 세계의 한 시점을 나타내.
- UUID는 공개 식별자에 알맞고, PG 18부터의
uuidv7()은 시간 순서와 색인 지역성을 함께 얻어. - JSONB, 배열, 범위, BYTEA는 가변 구조와 복합 값을 PostgreSQL 안에서 직접 표현하게 해.
자주 만드는 실수
돈을 FLOAT에 넣으면 0.1 + 0.2가 0.3과 정확히 같지 않을 수 있어. 계산 결과가 정확해야 할 때는 NUMERIC을 써. 시간은 가능한 한 TIMESTAMPTZ로 저장해 UTC 기준 시점을 잃지 마. VARCHAR(255)를 습관처럼 고르거나 불리언을 문자열로 흉내 내는 선택도 피해야 해. 날짜라면 TEXT가 아니라 DATE가 맞아.