수련  ›  중급 — 서비스로 확장  ›  CH3 / 4
중급 — 서비스로 확장 ⏱ 15분 +200 XP

데이터베이스 입문

테이블 개념과 CRUD(생성·조회·수정·삭제)를 MariaDB의 SQL 예시로 익힙니다.

API로 받은 데이터를 화면에 보여주는 것까지는 했지만, 사용자가 남긴 글이나 가입 정보는 어딘가에 저장해야 다음에 다시 꺼낼 수 있습니다. 이렇게 데이터를 구조적으로 저장·관리하는 시스템이 데이터베이스입니다. 여기서는 가장 널리 쓰이는 관계형 데이터베이스 MariaDB를 기준으로, 테이블 개념과 CRUD 네 가지 동작을 봅니다.

테이블은 표와 같다

관계형 데이터베이스의 데이터는 테이블(table)이라는 표에 저장됩니다. 표의 가로줄(행, row)은 데이터 하나하나이고, 세로줄(열, column)은 그 데이터가 가진 속성입니다.

  • 행(row) — 회원 한 명, 글 한 개처럼 데이터 한 건입니다.
  • 열(column) — 이름, 이메일, 작성일처럼 각 항목의 속성입니다.
  • 기본키(Primary Key) — 각 행을 유일하게 구분하는 열입니다. 보통 자동 증가하는 id를 씁니다.
CREATE TABLE members (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(120) NOT NULL UNIQUE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
각 열에는 자료형이 있습니다. 숫자는 INT, 글자는 VARCHAR(길이), 날짜·시각은 DATETIME처럼 미리 정해 둡니다. 자료형을 정해 두면 잘못된 데이터가 들어오는 것을 막을 수 있습니다.

CRUD — 데이터의 네 가지 기본 동작

데이터로 할 수 있는 일은 결국 네 가지로 요약됩니다. 이를 머리글자를 따 CRUD라 부르고, 각각 SQL 명령이 대응합니다.

동작의미SQL
Create생성INSERT
Read조회SELECT
Update수정UPDATE
Delete삭제DELETE
-- Create: 새 회원 추가
INSERT INTO members (name, email)
VALUES ('민지', 'minji@example.com');

-- Read: 조회 (조건은 WHERE)
SELECT id, name FROM members WHERE email = 'minji@example.com';

-- Update: 수정
UPDATE members SET name = '김민지' WHERE id = 1;

-- Delete: 삭제
DELETE FROM members WHERE id = 1;

WHERE를 빠뜨리면 전부 바뀐다

여기서 가장 위험한 실수가 있습니다. UPDATE나 DELETE에서 WHERE 조건을 빠뜨리면 특정 행이 아니라 테이블의 모든 행이 수정·삭제됩니다.

DELETE FROM members; (WHERE 없음) → 회원 전체가 사라집니다. UPDATE도 마찬가지로 WHERE가 없으면 모든 행이 바뀝니다.
실수를 줄이려면 먼저 같은 조건으로 SELECT를 돌려 "몇 건이 잡히는지" 확인한 뒤 UPDATE/DELETE를 실행하는 습관을 들이세요. 운영 데이터는 백업도 필수입니다.

SQL 인젝션 한 가지만 기억하기

사용자가 입력한 값을 SQL 문자열에 그대로 이어 붙이면, 악의적인 입력이 명령을 바꿔치기하는 SQL 인젝션 공격에 노출됩니다. 값을 직접 붙이지 말고 플레이스홀더(?)를 쓰는 "준비된 구문(prepared statement)"을 사용하세요.

-- 위험: 입력값을 그대로 붙임
-- "SELECT * FROM members WHERE email = '" + 입력 + "'"

-- 안전: 플레이스홀더 사용 (값은 따로 전달)
SELECT * FROM members WHERE email = ?;

정리하면 데이터는 테이블(행·열)에 담고, 각 행은 기본키로 구분하며, 다루는 동작은 CRUD 네 가지입니다. UPDATE·DELETE에는 반드시 WHERE를, 사용자 입력에는 반드시 플레이스홀더를 — 이 두 습관이 데이터를 지킵니다.

이해도 퀴즈

정답 3개 이상 → +200 XP

배운 내용을 확인해 보세요. 4문항 중 60% 이상 맞히면 챕터가 완료되고 경험치가 적립됩니다.

Q1.DELETE FROM members; 를 WHERE 없이 실행하면 어떻게 될까요?
Q2.CRUD에서 데이터를 '조회'하는 동작과 그에 대응하는 SQL은?
Q3.테이블에서 각 행을 유일하게 구분하기 위해 사용하는 것은?
Q4.사용자가 입력한 값을 안전하게 SQL에 넣어 SQL 인젝션을 막는 방법은?