데이터 입력하고 수정하고 지우기
데이터베이스에 새로운 정보를 추가(INSERT), 수정(UPDATE), 삭제(DELETE)할 때 조심해야 할 실무 원칙을 알아봅니다.
이전 시간에는 데이터베이스에 저장된 정보를 꺼내어 읽는 방법(`SELECT`)을 배웠습니다. 이번 시간에는 실제로 데이터를 창고 안에 집어넣고(`INSERT`), 기존의 잘못된 정보를 고치며(`UPDATE`), 불필요해진 데이터를 영원히 없애버리는(`DELETE`) 행동 명령어들을 배웁니다. 데이터를 읽는 것은 실수해도 아무도 다치지 않지만, 변경하고 지우는 명령어는 한 번의 실수로 커뮤니티 전체 데이터를 날려버릴 수 있는 파괴력을 가지므로 각별한 주의 원칙과 함께 알아봅시다.
새로운 정보 등록하기: `INSERT`
유저가 회원가입 폼에 이름과 이메일을 적고 가입 버튼을 누르면, 백엔드 서버는 데이터베이스에 새로운 한 줄(Row)을 추가하라는 명령을 내립니다. 이때 쓰이는 구문이 `INSERT`입니다.
문법의 뼈대는 "어느 테이블의 어느 컬럼들에, 어떤 값들을 넣을 것이다"라는 순서입니다.
INSERT INTO users (name, email, age)
VALUES ('홍길동', '[email protected]', 25);컬럼 지정의 중요성
| 명령어 방식 | 특징 및 위험성 |
|---|---|
| 컬럼명을 명시하는 방식 (권장) | INSERT INTO users (name, age) VALUES ('김철수', 30); 나중에 테이블에 '주소' 컬럼이 추가되어도 기존 코드가 고장 나지 않습니다. |
| 컬럼명을 생략하는 방식 (위험) | INSERT INTO users VALUES ('김철수', 30); 순서대로 모든 값을 다 넣겠다는 뜻입니다. 나중에 테이블 구조가 하나라도 바뀌면 에러가 폭발합니다. |
바이브코딩 시 AI에게 백엔드 코드를 맡길 때는, "데이터를 INSERT 할 때 반드시 컬럼명을 명시적으로 적도록 해줘"라고 가이드라인을 주어야 훗날 테이블 구조를 바꿀 때 웹사이트가 멈추는 대참사를 막을 수 있습니다.
기존 정보 고치기: `UPDATE`
유저가 내 정보 수정 페이지에서 비밀번호나 나이를 변경할 때는, 엑셀의 특정 칸을 지우고 다시 쓰는 것과 같은 `UPDATE` 명령이 발생합니다.
`UPDATE` 문법은 "어떤 테이블을(UPDATE), 어떻게 세팅하고(SET), 어느 줄만(WHERE) 고칠 것인가"의 순서를 따릅니다.
UPDATE 구문의 올바른 사용
UPDATE users
SET age = 26, point = 1500
WHERE email = '[email protected]';"유저 테이블에서 이메일이 [email protected]인 사람을 정확히 찾아내서, 나이를 26으로, 포인트를 1500으로 변경하라!"는 뜻입니다.
⚠️ UPDATE의 치명적 함정 ⚠️
만약 실수로 맨 마지막의 `WHERE email = '[email protected]'` 부분을 빼먹고 실행하면 어떻게 될까요? 데이터베이스는 "아하, 모든 사람의 나이를 26살로 바꾸라는 거구나!"라고 이해하고, 10만 명의 회원 나이를 몽땅 26살로 덮어써 버립니다. 실무에서 주니어 개발자들이 가장 많이 저지르는 악몽 같은 실수 1순위가 바로 `WHERE` 조건절 없는 `UPDATE`입니다.
흔적 지우기: `DELETE`
탈퇴한 유저의 정보나 욕설이 적힌 게시글을 데이터베이스에서 영구히 삭제할 때는 `DELETE` 명령어를 사용합니다.
구조는 가장 단순합니다. "어느 테이블에서(DELETE FROM), 어떤 조건인 줄을(WHERE) 지울 것인가" 입니다.
DELETE FROM users
WHERE id = 5;`DELETE` 역시 `UPDATE`와 똑같은 공포의 함정을 가지고 있습니다. `WHERE` 조건을 깜빡하고 `DELETE FROM users;` 라고만 치면, 10만 명의 회원 정보가 0.1초 만에 깔끔하게 증발합니다.
데이터 보존을 위한 실무 방어 기법 (Soft Delete)
- 1실제 라이브 서비스에서는 실수로 인한 데이터 유실을 막기 위해 DELETE 명령어를 거의 쓰지 않습니다.
- 2대신 테이블에 is_deleted 라는 컬럼을 하나 추가하고, 삭제 요청이 들어오면 데이터를 진짜 지우는 대신 UPDATE users SET is_deleted = true 로 상태만 바꿉니다.
- 3그리고 화면에 정보를 뿌려주는 SELECT 쿼리에서 WHERE is_deleted = false 인 데이터만 걸러서 보여줍니다. 이를 '소프트 딜리트(Soft Delete)'라고 부릅니다.
바이브코딩으로 게시판을 만들 때, AI에게 단순히 "글 삭제 기능 만들어줘"라고 하면 보통 무자비한 `DELETE` 쿼리를 짜줍니다. 하지만 실무에 눈뜬 여러분이라면 "글 삭제 기능은 DELETE 쿼리 쓰지 말고, deleted_at 시간을 업데이트하는 소프트 딜리트 방식으로 짜줘"라고 한 단계 수준 높은 지시를 내릴 수 있게 됩니다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.데이터베이스에서 정보를 수정하거나 삭제할 때, 전체 데이터가 의도치 않게 일괄 변경되거나 날아가는 대형 사고를 막기 위해 반드시 빼먹지 말고 포함해야 하는 필수 SQL 구문(절)은 무엇인가요?
3줄 요약
- 1INSERT 구문으로 테이블에 새로운 줄(데이터)을 추가할 때는, 훗날의 에러를 방지하기 위해 반드시 어떤 컬럼에 넣을 것인지 명시해야 합니다.
- 2UPDATE와 DELETE 명령어는 기존 데이터를 변경하고 지우는 파괴적인 작업이므로, 어떤 줄에 적용할지 한정하는 WHERE 조건절을 절대 빠뜨려서는 안 됩니다.
- 3안전한 서비스 운영을 위해 진짜 데이터를 삭제하는 DELETE 명령어 대신, 상태 값만 변경하여 숨김 처리하는 소프트 딜리트(Soft Delete) 방식을 주로 사용합니다.