데이터베이스 자료형에 대해
데이터베이스 설계의 가장 기본인 자료형에 대해 정리해봤다.
데이터베이스에 테이블을 만들 때 각 열(Column)에 어떤 종류의 데이터가 들어갈지 미리 정의하는 것을 ‘자료형을 지정한다’라고 말한다. 마치 옷을 정리할 때 상의, 하의, 양말을 각각 다른 서랍에 넣는 것과 같다. 이렇게 종류별로 데이터를 관리하면 여러 가지 장점이 있다.
그렇다면 왜 자료형이 중요한 걸까?
왜 자료형이 중요한가?
자료형을 명확하게 지정하면 크게 세 가지 이점을 얻을 수 있다.
1.
데이터 무결성(Data Integrity): 나이 열에 ‘스무살’이라는 글자 대신 숫자 20 만 저장되도록 강제하여 데이터의 신뢰도를 높인다.
2.
저장 공간 효율성(Storage Efficiency): 데이터에 필요한 만큼의 공간만 할당하여 디스크 공간 낭비를 막는다. 예를 들어, -128부터 127까지의 숫자만 저장하면 되는 데이터에 굳이 수십억까지 표현 가능한 큰 공간을 쓸 필요는 없다.
3.
성능 향상(Performance): 데이터 검색이나 정렬 시, 명확한 자료형은 컴퓨터가 데이터를 더 빨리 처리한다.
1. 숫자 자료형 (Numeric Types)
자료형 | 설명 | 주요 사용 예시 |
INTEGER (또는 INT) | 가장 대표적인 정수형. 일반적으로 4바이트 크기를 가지며, 약 -21억부터 +21억까지의 숫자를 표현한다. | 회원 ID, 나이, 재고 수량, 게시물 번호 |
BIGINT | INT보다 훨씬 큰 범위의 정수를 저장할 때 사용한다. (8바이트) | 매우 많은 회원을 보유한 서비스의 ID, 금융 거래 기록 ID |
SMALLINT / TINYINT | INT보다 작은 범위의 정수를 저장하여 공간을 절약할 때 사용합니다. | 상태 코드 (예: 0, 1, 2), 분류 코드 |
DECIMAL (또는 NUMERIC) | 고정 소수점 숫자를 저장한다. 정확한 소수점 연산이 필요할 때 사용하며, 오차가 발생하지 않는다. DECIMAL(전체 자릿수, 소수점 이하 자릿수) 형태로 선언한다. 예: DECIMAL(10, 2) | 금액, 환율, 이자율 등 돈과 관련된 모든 데이터 |
FLOAT / REAL | 부동 소수점 숫자를 저장한다. 매우 크거나 작은 숫자를 표현할 수 있지만, 근삿값으로 저장되어 미세한 오차가 발생할 수 있다. | 과학 계산 데이터, GPS 좌표, 통계 분석 결과 |
정수형과 소수형의 차이
•
정수형 (INT, BIGINT 등): 소수점 없는 숫자를 다룬다. 저장할 숫자의 최대/최소 범위를 고려하여 타입을 선택하는 것이 공간의 효율성을 높인다.
•
소수형 (DECIMAL, FLOAT):
◦
정확성이 생명인 경우 무조건 DECIMAL 을 사용해야 한다. 특히 금융 관련 데이터에서 FLOAT 를 사용하는 것은 큰 장애로 이어질 수 있다.
◦
빠른 계산이 필요하고 미세한 오차를 감수할 수 있는 과학 데이터의 경우 FLOAT 가 더 효율적일 수 있다.
2. 문자열 자료형 (String/Character Types)
글자, 즉 텍스트 데이터를 저장하기 위한 자료형이다. 고정 길이와 가변 길이 로 나뉜다.
자료형 | 설명 | 주요 사용 예시 |
CHAR(n) | 고정 길이 문자열. n으로 지정된 길이만큼 공간을 항상 차지한다. CHAR(10)에 '안녕' (4바이트 가정)을 저장해도 10바이트 공간을 모두 사용합니다. | 주민등록번호, 학번, 성별('M'/'F'), 우편번호 등 길이가 항상 같은 데이터 |
VARCHAR(n) | 가변 길이 문자열. n은 저장 가능한 최대 길이를 의미하며, 실제 데이터 길이만큼만 공간을 사용한다. VARCHAR(10)에 '안녕'을 저장하면 실제 필요한 공간(4바이트) + 길이 정보 공간만 사용한다. | 회원 이름, 게시물 제목, 주소 등 길이를 예측하기 어려운 대부분의 텍스트 |
TEXT / CLOB | VARCHAR보다 훨씬 긴 텍스트를 저장하기 위한 자료형입니다. | 게시물 본문, 블로그 글, 장문의 설명 |
CHAR vs VARCHAR
이 둘의 선택은 데이터의 길이가 일정한가? 라는 질문으로 결정된다.
•
주민등록번호, 성별 코드 처럼 모든 데이터의 길이가 같다면 CHAR 가 미세하게 더 빠르고 효율적이다.
•
이름, 주소, 제목 처럼 데이터마다 길이가 들쑥날쑥하다면 VARCHAR 를 사용하는 것이 공간 낭비를 막는 현명한 선택이다. 대부분의 경우 VARCHAR가 더 자주 사용된다.
3. 날짜 및 시간 자료형 (Date and Time Types)
날짜와 시간 정보를 저장하기 위한 전용 자료형이다.
자료형 | 설명 | 주요 사용 예시 |
DATE | 날짜 정보(년, 월, 일)만 저장한다. | 생년월일, 제품 제조일자 |
TIME | 시간 정보(시, 분, 초)만 저장한다. | 영업 시작/종료 시간, 알람 시간 |
DATETIME (또는 TIMESTAMP) | 날짜와 시간을 모두 저장한다. TIMESTAMP는 타임존 정보를 포함하거나 시스템 시간에 따라 자동으로 업데이트되는 등 DB 종류에 따라 특징이 조금씩 다르다. | 회원가입 일시, 게시물 작성/수정 일시, 로그 기록 시간 |
왜 문자열 대신 날짜형을 쓸까?
“2025-08-02”를 VARCHAR 에 저장할 수도 있지만, DATE 타입을 사용하면 다음과 같은 장점이 있다.
•
날짜 계산: ‘2025-08-02’로부터 30일 뒤의 날짜를 구하는 등의 연산이 매우 간편하다.
•
유효성 검사: ‘2025-02-30’과 같이 존재하지 않는 날짜는 저장 단계에서 차단된다.
•
정렬: 시간 순서대로 데이터를 정렬하기 용이하다.
4. 기타 주요 자료형
자료형 | 설명 | 주요 사용 예시 |
BOOLEAN (또는 BOOL) | 참(True) 또는 거짓(False) 두 가지 상태만 저장한다. (일부 DB에서는 TINYINT(1)로 대체하기도 한다) | 동의 여부 (Y/N), 활성/비활성 상태, 공개/비공개 설정 |
BLOB (Binary Large Object) | 이미지, 동영상, 사운드 파일 등 텍스트가 아닌 대용량 이진(Binary) 데이터를 데이터베이스에 직접 저장할 때 사용한다. | 프로필 사진, 첨부 파일 (하지만 보통 파일 경로만 저장하는 방식을 더 선호한다) |
JSON | JSON 형식의 데이터를 그대로 저장하고, 내부 키(key)를 이용해 검색할 수 있는 기능을 제공한다 | 유연한 구조가 필요한 설정 정보, 로그 데이터 |