바이브 코딩 시대의 데이터베이스3-3 연습 문제
테크타니 LEARN — 섹션 03 · 연습 문제

3-3 연습 문제 — 이 값에는
어떤 그릇이 맞을까

이번 강의에서 배운 것 — INT · DECIMAL · VARCHAR · CHAR · DATE · BOOLEAN, 그리고 겉모양이 아니라 용도로 고른다는 기준. 오늘은 타입을 직접 골라보고, 잘못 고르면 실제로 무슨 일이 벌어지는지 눈으로 확인합니다.

문제3문제 (도전 1 포함)권장 소요12분사용 테이블members · products준비물없음 — 스키마만 읽으면 OK

섹션 3 에서의 위치

3-2 컬럼의 약속

완료 ✓

3-3 데이터 타입

강의 완료 ✓

3-3 연습 문제

지금 여기

3-4 ~ 3-8

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

AI 과외 선생님 활용법

타입 문제는 “정답이 하나” 가 아닌 경우가 많습니다. 그래서 AI에게 물을 때 본인이 고른 타입과 이유를 먼저 말하고 검증받으세요 — “우편번호를 VARCHAR로 고르고 앞의 0 때문이라고 판단했는데, 이 근거가 맞아?” 처럼요.

문제 1. 왜 이 타입일까요

우리 실제 shop 스키마의 컬럼 네 개입니다. 각각 왜 이 타입을 골랐는지 설명해보세요.

shop DB — 실제 타입
컬럼타입값 예시
priceINT89000
product_nameVARCHAR(100)무선 이어폰
genderCHAR(1)M
joined_atDATE2025-01-15
정답 보기

price INT — 계산하고 비교할 값이라서

원 단위 정수만 저장하면 되고, 합계를 내거나 “3만 원 이상” 처럼 크기를 비교해야 합니다. 소수점이 필요 없으니 DECIMAL까지 갈 이유도 없어요.

product_name VARCHAR(100) — 길이가 제각각이라서

니트는 두 글자, 프리미엄 그래놀라는 훨씬 길죠. 길이가 달라지는 글자는 VARCHAR입니다. 괄호 안의 100은 허용할 최대 글자 수예요.

gender CHAR(1) — 항상 한 글자라서

M 아니면 F, 언제나 딱 한 글자입니다. 길이가 고정된 값이라 CHAR(1)이 맞습니다.

joined_at DATE — 날짜로 다뤄야 해서

날짜 타입으로 저장하면 없는 날짜를 막을 수 있고, 순서 비교나 “가입한 지 며칠 됐나” 같은 기간 계산도 가능합니다. 글자로 저장하면 이 세 가지를 전부 잃어요.

문제 2. 새 컬럼의 타입을 고르세요

쇼핑몰에 기능을 추가하면서 컬럼 네 개가 필요해졌습니다. 각각 어떤 타입이 맞을지 고르고 이유를 붙이세요.

이 값에는 어떤 그릇이 맞을까?
#담아야 할 값값 예시
회원의 우편번호06234
주문이 접수된 시각 (분·초까지)2025-02-01 14:32:07
상품 리뷰 평점 (소수점 한 자리)4.5
회원이 마케팅 수신에 동의했는지동의 / 미동의
힌트

네 가지 질문을 순서대로 던져보세요 — 계산하는가? 모양을 지켜야 하는가? 날짜 계산이 필요한가? 답이 둘뿐인가?

정답 보기
#타입이유
우편번호VARCHAR앞의 0 을 지켜야 합니다 — 계산할 값이 아닙니다
주문 시각DATETIME날짜만으로는 부족하고 시·분·초까지 필요합니다
평점DECIMAL소수점 아래를 정확히 저장해야 합니다 — INT 는 4.5 를 못 담음
수신 동의BOOLEAN답이 참 / 거짓 두 가지뿐입니다

①이 오늘의 함정입니다. 06234는 숫자처럼 보이지만 숫자 타입에 넣으면 맨 앞 0이 사라져 6234가 됩니다. 전화번호와 똑같은 이유예요 — 계산하지 않는 번호는 숫자가 아니라 문자열일 수 있습니다.

③도 자주 틀립니다. 평점을 INT로 두면 4.5가 저장될 때 소수점이 잘려 4가 됩니다. 소수점 아래까지 정확히 다뤄야 하면 DECIMAL이에요.

문제 3 (도전). 가격을 문자열로 담으면 무슨 일이 생길까

어떤 개발자가 priceINT가 아니라 VARCHAR로 만들었습니다. 상품 네 개가 들어 있어요.

가상 예시 — price 를 VARCHAR 로 저장한 테이블
product_nameprice (VARCHAR)
USB-C 케이블'8000'
다크 초콜릿'9000'
무선 이어폰'89000'
패딩 점퍼'129000'
값은 실제 shop 데이터와 같지만 — 타입만 문자열입니다

이 상태에서 가격이 싼 순서대로 정렬하면 어떤 순서로 나올까요? 직접 순서를 적어본 뒤 정답을 확인하세요.

힌트

문자열은 글자를 앞에서부터 한 자씩 비교합니다. 숫자의 크기가 아니라 — 사전에서 단어를 찾는 방식이에요. 첫 글자 1 · 8 · 9 를 먼저 비교하면 어떤 순서가 될까요?

정답 보기
정렬 결과 비교 — 같은 값, 다른 타입
순위INT 로 저장했다면 ✓VARCHAR 로 저장하면 ❌
1위8,000 — USB-C 케이블'129000' — 패딩 점퍼
2위9,000 — 다크 초콜릿'8000' — USB-C 케이블
3위89,000 — 무선 이어폰'89000' — 무선 이어폰
4위129,000 — 패딩 점퍼'9000' — 다크 초콜릿
가장 비싼 패딩 점퍼가 '가장 싼 상품' 자리에 올라옵니다

왜 이렇게 될까요? 문자열은 앞에서부터 한 글자씩 비교합니다.

  • 첫 글자만 보면 '1' < '8' < '9' → 그래서 '129000'이 맨 앞으로 갑니다
  • '8000''89000'은 첫 글자가 같으니 둘째 글자로 비교 → '0' < '9''8000'이 먼저
  • 마지막이 '9000'

1290008000보다 작아서가 아니라 — 글자 1이 글자 8보다 앞서기 때문입니다. 여기서 오류 메시지는 뜨지 않습니다. 그냥 조용히 틀린 순서가 나올 뿐이에요.

여기서 얻어갈 감각

타입을 잘못 고르면 에러가 아니라 “그럴듯하게 틀린 결과”가 나옵니다. AI가 만들어준 SQL이 잘 도는 것처럼 보여도 결과가 이상하다면 — 컬럼 타입부터 확인해 보세요.

다 풀었다면

✓ 3-3 훈련 완료 기준

새 컬럼을 만들 때 “이 값이 어떻게 생겼지?” 가 아니라 “이 값으로 무엇을 할 거지?” 를 먼저 묻게 됐다면 오늘 목표는 달성입니다.

여유가 있다면 — DBeaver 로 직접 확인

DBeaver 좌측 트리에서 shop → Tables → products 를 더블클릭하고 Columns 탭을 열면 price INT, product_name VARCHAR(100) 처럼 실제 타입이 그대로 보입니다. 오늘 배운 기준으로 컬럼을 하나씩 읽어보세요 — 이 값으로 무엇을 할까?

이제 컬럼의 이름과 규칙, 타입까지 읽을 수 있게 됐습니다. 다음은 각 행을 정확히 구분하는 기본키(PK) 입니다.

NEXT LESSON3-4 기본키(PK) — 한 행을 정확히 찾는 기준

이름이 같은 회원이 둘이어도 한 명을 정확히 찾는 방법 — 중복 불가 · NULL 불가 규칙을 읽습니다.

GO ▸ 3-4 시작하기