바이브 코딩 시대의 데이터베이스3-3 데이터 타입 — 값에 맞는 그릇
테크타니 LEARN — 섹션 03 · 테이블에 대한 이해

데이터 타입,
값에 맞는 그릇 고르기

지난 강의에서 컬럼은 어떤 값을 기록할지 정한 약속이라고 했습니다. 여기에 약속이 하나 더 필요해요 — 그 값이 숫자인지, 글자인지, 날짜인지 정하는 것. 이렇게 값에 맞는 그릇을 정하는 걸 데이터 타입이라고 합니다.

난이도아주 쉬움소요5분준비물3-2 완료오늘SQL 없이 개념만

이번 섹션의 여정

3-1 테이블 · 행 · 열 · 값

완료 ✓

3-2 컬럼의 약속

완료 ✓

3-3 데이터 타입

지금 여기

3-4 ~ 3-8

기본키 · 외래키 · 테이블 만들기

오늘 살펴볼 네 가지 그릇

값의 종류에 따라 그릇이 달라집니다
숫자
문자열
날짜와 시간
참과 거짓

타입은 ‘가능한 일’을 정합니다

데이터 타입은 값의 모양만 정하는 게 아닙니다. 타입에 따라 그 값으로 할 수 있는 계산과 비교가 달라져요. 숫자는 더하거나 크기를 비교하고, 날짜는 며칠 차이인지 계산할 수 있습니다.

화면에는 똑같이 89000 이라고 보여도
이 값은타입할 수 있는 일
89000숫자 (INT)더하기 · 크기 비교 · 합계
'89000'글자 (VARCHAR)글자 그대로 보관 · 글자 순서로 비교
겉모양이 같아도 데이터베이스에서는 서로 다른 값입니다
오늘의 핵심 문장

데이터 타입은 값의 겉모양이 아니라, 그 값으로 무엇을 할 것인지에 맞춰 고릅니다.

숫자 타입 — INT 와 DECIMAL

우리 실습 스키마에서는 정수를 담을 때 INT를 사용합니다.

shop DB 에서 INT 를 쓰는 컬럼들
테이블컬럼타입값 예시
membersageINT35
productspriceINT89000
order_itemsquantityINT1
모두 소수점이 없고 — 더하거나 크기를 비교해야 하는 값입니다

우리 상품 가격처럼 원 단위 정수만 저장한다면 INT가 잘 맞습니다. 반면 할인율을 12.5%처럼 소수점 아래까지 정확히 저장해야 한다면 DECIMAL을 사용해요.

정리하면 — 정수는 INT, 소수점 아래까지 정확히 저장할 값은 DECIMAL.

문자열 타입 — VARCHAR 와 CHAR

다음은 글자를 담는 문자열 타입입니다.

shop DB 의 문자열 컬럼
컬럼타입값 예시왜 이 타입인가
member_nameVARCHAR(50)김철수이름마다 길이가 다름
product_nameVARCHAR(100)무선 이어폰상품명은 더 길 수 있음
genderCHAR(1)M항상 한 글자 (M/F)
VARCHAR 괄호 안의 숫자는 허용할 최대 글자 수입니다

VARCHAR길이가 달라질 수 있는 문자열을 담고, CHAR길이가 고정된 값에 씁니다. genderM이나 F처럼 항상 한 글자라서 CHAR(1)을 쓴 거예요.

여기서 중요한 지점 — 숫자처럼 보인다고 반드시 숫자 타입을 쓰는 건 아닙니다.

전화번호 01012345678 을 어디에 담아야 할까요?

숫자 타입에 넣으면
  • 맨 앞 0이 사라진다1012345678 이 된다

  • + 나 하이픈아예 넣을 수 없다

  • 계산더할 일도 없는데 숫자로 둘 이유가 없다

문자열 타입에 넣으면 ✓
  • 원래 모양 그대로01012345678

  • +82, 010-1234-5678모두 담을 수 있다

  • 용도에 맞음찾고 표시할 값이지 계산할 값이 아니다

계산하지 않는 번호는 숫자가 아니라 문자열일 수 있습니다.

날짜·시간과 참·거짓

가입일인 joined_at과 주문일인 ordered_atDATE입니다.

날짜를 DATE 로 담으면
얻는 것설명
잘못된 날짜 차단2025-13-40 같은 값이 들어올 수 없다
순서 비교어느 날이 더 이른지 정확히 비교된다
기간 계산두 날짜가 며칠 차이인지 계산할 수 있다
날짜만 필요하면 DATE, 시각까지 필요하면 DATETIME · TIMESTAMP 를 검토합니다

마지막은 참과 거짓입니다. 예를 들어 회원이 활동 중인지 나타내는 가상의 is_active 컬럼은 답이 참과 거짓 두 가지뿐이죠. 이럴 때 BOOLEAN을 사용할 수 있습니다. 보통 참은 TRUE 또는 1, 거짓은 FALSE 또는 0으로 표현합니다.

가상의 예시입니다

is_active 와 전화번호 컬럼은 실제 shop 스키마에 없습니다. 타입 선택을 설명하기 위한 가상의 컬럼이에요.

타입을 잘못 고르면 생기는 일

❌ 잘못된 그릇이 만드는 문제
이렇게 저장하면이런 문제가 생깁니다
가격을 문자열로숫자 크기가 아닌 글자 순서로 비교된다
전화번호를 숫자로맨 앞의 0이 사라진다
날짜를 문자열로2025-13-40 처럼 없는 날짜도 들어간다
잘못된 타입은 잘못된 결과를 만듭니다

타입을 고르는 네 가지 질문

새 컬럼의 타입을 고를 때는 이렇게 질문하세요.

이 값으로 무엇을 할 것인가?
질문그렇다면
계산하거나 크기를 비교하는가?숫자 타입 — INT · DECIMAL
앞의 0이나 특수문자 모양을 지켜야 하는가?문자열 — VARCHAR · CHAR
날짜 계산이 필요한가?날짜 타입 — DATE · DATETIME
답이 참과 거짓뿐인가?BOOLEAN
타입이 정하지 않는 것

값을 비워도 되는지는 데이터 타입이 정하지 않습니다. 그건 3-2에서 배운 NULL · NOT NULL따로 정해요. 타입과 빈값 규칙은 별개의 약속입니다.

한눈에 정리

타입담는 값shop 에서는
INT소수점 없는 정수age · price · quantity
DECIMAL소수점까지 정확한 숫자할인율 12.5% 같은 값
VARCHAR(n)길이가 달라지는 글자member_name · product_name
CHAR(n)길이가 고정된 글자gender (M/F)
DATE날짜joined_at · ordered_at
BOOLEAN참 / 거짓 두 가지가상의 is_active

이제 컬럼의 이름과 규칙, 타입까지 읽을 수 있게 됐습니다. 그런데 회원이 20명인데 이름이 같은 사람이 둘 있다면 — 어떻게 한 명을 정확히 가리킬 수 있을까요? 그 이야기가 다음 강의입니다.

NEXT LESSON3-3 연습 문제

숫자처럼 보이는 값의 타입 고르기, 그리고 가격을 문자열로 담았을 때 실제로 벌어지는 일을 확인합니다.

GO ▸ 연습 문제 풀기