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

3-7 연습 문제 — 실행하고 나면
무엇이 남을까

이번 강의에서 배운 것 — ALTER TABLE · DELETE · TRUNCATE · DROP, 그리고 실행 전에 확인할 세 가지. 오늘은 명령을 외우는 게 아니라 각 명령을 실행한 뒤 테이블에 무엇이 남는지를 직접 판정해 봅니다.

문제3문제 (도전 1 포함)권장 소요15분사용 테이블members · products · orders · order_items준비물실행하지 말고 판단만 — 종이와 펜이면 충분

섹션 3 에서의 위치

3-6 CREATE TABLE

완료 ✓

3-7 구조 변경 · 삭제

강의 완료 ✓

3-7 연습 문제

지금 여기

3-8 구조 읽기 종합

섹션 3 마무리

오늘 문제는 실행하지 않습니다

아래 명령들은 실제로 실행하지 마세요. 실습 shop DB 가 망가집니다. 머릿속 으로 결과를 판정하는 게 오늘의 훈련이에요. — 혹시 이미 실행해서 망가뜨렸다면 2-3 에서 쓴 init.sql 을 다시 실행하면 원래대로 복구됩니다.

AI 과외 선생님 활용법

2-4 에서 만든 AI 과외 선생님 세션을 그대로 쓰세요. 정답부터 묻지 말고 — “이 명령을 실행하면 행과 구조 중에 무엇이 남는지 판단하는 기준만 알려줘” 처럼 판단 기준을 물어보세요. 다 푼 뒤에는 본인의 판정과 근거를 적어서 검증받는 게 가장 많이 남습니다.

문제 1. 실행 뒤에 무엇이 남을까요

회원 20명이 그대로 들어 있는 가상의 복사본 테이블 members_temp 가 있다고 해봅시다. 구조는 실제 members 와 같지만, 이 테이블을 참조하는 자식 테이블은 하나도 없습니다.

가상 예시 — members_temp (실제 members 와 같은 20행)
member_idmember_namegenderagejoined_at
1김철수M352025-01-15
2이영희F282025-02-03
3박민수M422025-02-10
20백서윤F212026-04-02
총 20행 — 40살 이상인 회원은 5명입니다

이 테이블에 아래 네 명령을 각각 따로 실행했다고 할 때, 실행 뒤에 남는 행 수테이블 구조가 어떻게 되는지 표를 채워보세요.

이 명령을 실행하면?
#실행한 명령남는 행 수테이블 구조
DELETE FROM members_temp WHERE age >= 40;??
DELETE FROM members_temp;??
TRUNCATE TABLE members_temp;??
DROP TABLE members_temp;??
힌트

명령 이름을 떠올리지 말고 사라지는 범위로 생각하세요 — 행인가, 모든 행인가, 테이블 자체인가.

정답 보기
정답 — 실행 뒤 남는 것
#명령남는 행 수테이블 구조
DELETE — 조건 있음15행그대로 남음
DELETE — 조건 없음0행그대로 남음
TRUNCATE0행그대로 남음
DROP테이블이 없음함께 사라짐
①②③ 은 테이블이 남고 — ④ 만 테이블 자체가 없어집니다

① 15행이 남습니다. 40살 이상인 회원은 박민수(42) · 조성민(45) · 오지은(40) · 권현석(50) · 안소영(44) 다섯 명입니다. DELETE 는 조건을 붙이면 원하는 행만 지울 수 있으니 20 − 5 = 15행이 남고, 컬럼과 규칙은 손대지 않으니 구조는 그대로예요.

②와 ③은 결과가 똑같아 보입니다. 둘 다 행이 0개인 빈 테이블이 남습니다. 차이는 방식이에요 — DELETE 는 조건을 붙일 수 있고, TRUNCATE 는 항상 모든 행이 대상이라 일부만 고를 수 없습니다.

④ 만 성격이 다릅니다. DROP 은 데이터만 지우는 명령이 아니라 테이블 자체를 지웁니다. 데이터와 컬럼, 제약조건이 전부 사라지고 그 이름의 테이블은 더 이상 존재하지 않아요. ②③ 뒤에는 새 데이터를 넣을 수 있지만, ④ 뒤에는 넣을 그릇조차 없습니다.

여기서 단정하면 안 되는 것

TRUNCATE내부 처리 방식과 되돌리기 가능 여부는 데이터베이스에 따라 달라질 수 있습니다. “TRUNCATE 는 무조건 되돌릴 수 없다” 같은 문장으로 외우지 마세요. 지금 확실한 건 하나 — 모든 행이 사라지고 구조는 남는다.

문제 2. 구조를 바꾸면 데이터에는 무슨 일이 생길까요

이번에는 ALTER TABLE 입니다. 아래 세 가지 구조 변경이 이미 저장된 데이터에 어떤 일을 만드는지 각각 설명해보세요.

세 가지 구조 변경
#무엇을 바꾸나
products 에 재고를 담을 stock 컬럼을 추가한다
products.product_name 을 VARCHAR(100) → VARCHAR(6) 으로 줄인다
members 에서 gender 컬럼을 삭제한다

②번은 아래 상품명으로 직접 확인해보세요. 어떤 값이 새 길이에 맞지 않을까요?

products 에 실제로 저장된 상품명 (일부)
product_name글자 수
립스틱3
패딩 점퍼5
무선 이어폰6
프리미엄 그래놀라9
USB-C 케이블9
공백도 한 글자로 셉니다
정답 보기

① 컬럼 추가 — 모든 행에 칸이 하나 늘어납니다

상품 30개 전부에 stock 칸이 생깁니다. 그런데 그 칸에 들어갈 값은 아무도 모릅니다. 그래서 새 컬럼을 추가할 때는 3-2 에서 배운 규칙을 함께 정해야 해요 — 비워둘 수 있는 컬럼인지(NULL 허용), 아니면 기본값(DEFAULT)을 정해둘 것인지. 기존 행이 이미 30개 있는 상태에서 아무 대비 없이 NOT NULL 을 붙이면 — 데이터베이스가 알아서 정한 값(MySQL 이라면 숫자 0)이 상품 30개에 그대로 채워지거나, 채울 값이 없다며 명령이 거부될 수 있습니다. 어느 쪽이든 내가 의도한 재고 값은 아니에요.

② 길이 축소 — 이미 저장된 값이 새 규칙을 어깁니다

VARCHAR(6) 으로 줄이면
상품명글자 수판정
립스틱3맞음
패딩 점퍼5맞음
무선 이어폰6맞음 — 딱 6글자
프리미엄 그래놀라9맞지 않음
USB-C 케이블9맞지 않음
구조만 바꿨는데 기존 값이 규칙 위반 상태가 됩니다

새 길이에 맞지 않는 값이 있으면 데이터베이스는 그 명령을 거부하거나, 값을 잘라서 저장할 수 있습니다. 어느 쪽이든 실행 전에 확인하지 않으면 문제가 됩니다. 상품명이 조용히 프리미엄 그 로 잘려 있는 걸 나중에 발견하는 것보다, 지금 SELECT 로 가장 긴 상품명을 한 번 확인하는 게 훨씬 낫죠.

③ 컬럼 삭제 — 값도 함께 사라집니다

gender 컬럼을 지우면 컬럼 정의 한 줄만 없어지는 게 아니라, 회원 20명의 M · F 값이 전부 함께 사라집니다. 그리고 아차 싶어서 gender 컬럼을 다시 추가해도 — 돌아오는 건 빈 칸뿐입니다. 값은 백업에서 되살리거나 처음부터 다시 입력해야 해요.

여기서 얻어갈 감각

구조 변경은 구조만 바꾸는 일이 아닙니다. 컬럼을 추가하면 채울 값을 정해야 하고, 규칙을 좁히면 기존 값이 걸리며, 컬럼을 지우면 그 안의 값이 함께 사라집니다.

문제 3 (도전). AI가 준 명령, 실행 전에 무엇을 물어야 할까요

실습을 하다가 AI 에게 이렇게 부탁했습니다 — “테스트하면서 쌓인 데이터 좀 정리해줘.” 그랬더니 명령 세 개가 돌아왔습니다.

AI 가 만들어준 명령 — 아직 실행하지 않음
나: 테스트하면서 쌓인 데이터 좀 정리해줘
AI: 아래 명령을 순서대로 실행하시면 됩니다.
① DELETE FROM order_items;
② TRUNCATE TABLE orders;
③ DROP TABLE members;

세 가지 질문에 답해보세요.

답해야 할 것
가. 실행하기 전에 반드시 확인해야 할 세 가지는 무엇인가
나. 세 명령 중 가장 위험한 것은 무엇이고, 왜인가
다. 실제 shop DB 에서 ②와 ③을 그대로 실행하면 어떻게 되는가
힌트

다 번 문제는 3-5 의 외래키를 떠올리세요. orders 는 누구의 자식이고 누구의 부모인가요? 부모를 지우려 할 때 데이터베이스가 어떻게 반응하는지가 열쇠입니다.

정답 보기

가. 실행 전 확인 세 가지

ALTER · DELETE · TRUNCATE · DROP 공통 체크리스트
① 지금 선택한 데이터베이스와 테이블 이름이 맞는가
② 어떤 데이터와 구조가 영향을 받는가
③ 백업이 있고, 실제로 복구할 수 있는가

여기에 하나 더 붙일 게 있습니다. 내 요청의 범위가 명확했는가. 저는 “테스트하면서 쌓인 데이터” 를 정리해달라고 했는데, ③번은 실제 회원 20명이 들어 있는 진짜 테이블을 지우는 명령입니다. AI 가 틀린 게 아니라 요청이 모호했던 거예요 — AI 는 내 데이터베이스에 지금 무엇이 들어 있는지 모릅니다.

나. 가장 위험한 것은 ③ DROP TABLE members

세 명령의 위험도 — 사라지는 범위로 비교
#명령사라지는 것남는 것
DELETE FROM order_items주문상세 64줄 전부테이블 구조
TRUNCATE TABLE orders주문 40건 전부테이블 구조
DROP TABLE members회원 20명 + 컬럼 + 제약조건 + 테이블 자체없음
①② 는 빈 테이블이 남지만 ③ 은 테이블이 없어집니다

①과 ②도 되돌리기 어려운 명령이지만, 적어도 데이터를 다시 넣을 그릇은 남습니다. ③은 그릇까지 사라져요. 컬럼 정의와 기본키·외래키 설정까지 전부 없어지므로, 되살리려면 CREATE TABLE 부터 다시 해야 합니다. 그리고 백업이 없다면 복구가 어렵거나 불가능합니다.

다. 실제 shop DB 에서는 ②와 ③이 그대로 실행되지 않습니다

외래키가 걸린 실제 shop DB 에서는
#시도실제로 일어나는 일
DELETE FROM order_items실행됨 — order_items 는 아무도 참조하지 않는 자식이다
TRUNCATE TABLE orders차단 — orders 는 order_items 가 참조하는 부모다
DROP TABLE members차단 — members 는 orders 가 참조하는 부모다
우리 실습 환경(MySQL · InnoDB) 기준이며, FK 에 CASCADE · SET NULL 옵션은 설정하지 않았습니다

3-5 에서 배운 참조 무결성이 여기서 안전장치로 작동합니다. ordersmembers 의 자식이면서 동시에 order_items 의 부모예요. 자식이 참조하고 있는 부모를 통째로 비우거나 지우려는 시도는 데이터베이스가 막아줍니다. 주인 없는 주문이나 존재하지 않는 회원의 주문이 생기지 않도록요.

그렇다고 안심하면 안 됩니다

외래키가 막아주는 건 참조 관계가 걸린 경우뿐입니다. ①번은 아무것도 막지 않았죠 — order_items 는 누구의 부모도 아니니까요. 참조하는 자식이 없는 테이블은 경고 없이 그대로 사라집니다.

여기서 얻어갈 감각

AI 가 만든 명령을 읽을 때는 문법이 맞는지 보는 게 아닙니다. 딱 두 가지만 보세요 — 어느 테이블인가, 그리고 실행 뒤에 무엇이 남는가.

다 풀었다면

✓ 3-7 훈련 완료 기준

삭제 명령을 볼 때 이름을 떠올리는 대신 “실행하면 행이 사라지나, 모든 행이 사라지나, 테이블이 사라지나” 를 자동으로 묻게 됐다면

오늘 목표는 달성입니다.

여유가 있다면 — DBeaver 로 안전하게 확인

아무것도 지우지 않고 확인만 하는 방법이 있습니다. DBeaver 좌측 트리에서 shop → Tables → orders 를 더블클릭한 뒤 Foreign Keys 탭References 탭을 열어보세요. orders 가 누구를 참조하고, 누가 orders 를 참조하는지 한눈에 보입니다. — 지우기 전에 관계부터 확인하는 습관, 오늘 배운 게 바로 이겁니다.

이제 섹션 3 의 조각이 모두 모였습니다. 테이블·행·열·값, 컬럼의 약속, 데이터 타입, 기본키, 외래키, CREATE TABLE, 그리고 구조 변경과 삭제까지 — 다음 강의에서는 이 전부를 하나로 묶어 처음 보는 테이블 구조를 읽어내는 법을 정리합니다.

NEXT LESSON3-8 테이블 구조 읽기 종합 정리 ⭐

처음 보는 테이블 앞에서 무엇을 어떤 순서로 확인할지 — 섹션 3 을 하나의 체크리스트로 묶습니다.

GO ▸ 3-8 시작하기