처음에는 데이터를 저장하는 곳인 줄 알았다.
데이터베이스라는 단어를 처음 들었을 때, 머릿속에 떠오른 건 거대한 엑셀 파일이었다. 행과 열이 무한히 이어진, 그냥 창고. 그런데 실제로 써보고 나서 생각이 바뀌었다. 이건 창고가 아니다. 도서관이다. 아니, 정확히는 세계를 지탱하는 법칙의 기록소다.
모든 것은 이미 정해져 있었다
게임을 하다 보면 이런 생각이 든 적이 있다. "왜 이 아이템은 드롭율이 0.1%일까?" 게임 안에서 플레이어는 수십 시간을 기다리고, 운이라고 느끼고, 감사하고 절망한다. 그런데 그 운명은 게임이 시작되기 전에 이미 누군가가 적어놓은 숫자였다.
그 법칙들은 어딘가에 반드시 적혀 있어야 한다. 드롭율도, 레벨도, 아이템 이름도. 그게 어디 있을까?
<매트릭스>에는 이런 장면이 있다. 네오가 처음으로 매트릭스의 진실을 마주하는 장면. 현실이라고 믿었던 세계가 사실은 코드로 만들어진 시뮬레이션이라는 것을 깨닫는 순간. 그 코드가 어딘가에 저장되어 있고, 그 안에 세계를 지탱하는 모든 법칙이 담겨 있다. 나는 그 순간 떠올렸다. 이게 데이터베이스잖아.
데이터베이스는 기억을 저장하는 곳이 아니다. 우리가 살고 있는 이 세계의 법칙을 기록해 둔 소스 코드다.
이런 소식, 남들보다 먼저 받으실 분?
직접 돌려보고 되는 것만 골라 매주 보내드립니다. 광고성 하이프는 거릅니다.
데이터는 기억이 아니다, 존재의 증명이다
생각해보면 세상에 존재하는 모든 것은 어딘가에 기록되어야 존재할 수 있다. 사람이 태어나면 주민등록이 생기고, 물건이 팔리면 영수증이 생기고, 회원가입을 하면 Users 테이블에 한 행이 추가된다.
SELECT * FROM Users;
데이터베이스에 없으면, 그건 그 시스템 안에서 존재하지 않는 것과 같다. 회원가입을 했는데 데이터가 사라졌다면, 그 사람은 그 서비스 안에서 유령이다. 데이터베이스는 디지털 세계의 호적이다.
SQL: 매트릭스의 기억을 들여다보는 일
SQL을 처음 배울 때는 그냥 명령어라고 생각했다. 그런데 실제로 쓰다 보면 다른 느낌이 든다.
SELECT * FROM Heroes WHERE Name = 'Arthur';
이 한 줄을 실행하면 수만 명의 영웅 중에서 아서라는 이름을 가진 영웅만 불러낸다. 데이터베이스 전체를 훑고, 조건에 맞는 존재만 현실로 꺼내온다. 도서관 사서가 방대한 서가 어딘가에 있는 단 한 권의 책을 정확히 집어오듯, SQL은 그 세계의 어떤 기억이든 꺼내올 수 있다.
단순한 조회가 아니다. 매트릭스의 기억을 들여다보는 일이다.
UPDATE와 DELETE: 세계를 재설계하는 무서움
조회보다 훨씬 강력하고, 훨씬 무서운 명령어들이 있다.
UPDATE Heroes SET Level = 99 WHERE Name = 'Arthur';
이 명령을 실행하는 순간, 아서의 레벨이 99가 된다. 데이터베이스 안에서 세상이 바뀐다. 아서의 입장에서는 갑자기 자신이 강해진 것처럼 느끼겠지만, 사실 누군가가 소스코드를 수정한 것이다. 몇 밀리초 만에.
그래서 UPDATE는 항상 조심스럽다. 잘못 쓰면 수천 명의 레벨이 한꺼번에 바뀐다.
WHERE 없는 UPDATE는 금기 마법이다
조건을 적지 않으면 테이블의 모든 행이 바뀐다. 게임 회사가 실수로 모든 유저의 레벨을 1로 초기화하는 것처럼. 그래서 숙련된 개발자일수록 UPDATE를 실행하기 전에 손가락을 한 번 멈춘다.
그리고 DELETE는 더 무겁다.
DELETE FROM Heroes WHERE Name = 'Arthur';
아서가 세상에서 사라진다. 단순히 데이터가 지워지는 게 아니다. 데이터베이스 안에서 아서가 가지고 있던 아이템, 소속된 길드, 쌓아온 업적들이 전부 관계(Relationship)로 연결되어 있다. 아서가 사라지면 그 관계들도 흔들린다. 존재 자체가 제거되는 것이다. 그래서 DELETE는 되돌릴 수 없는 경우가 많다.
CREATE와 DROP: 존재의 탄생과 소멸
더 근원적인 명령어도 있다.
CREATE TABLE Dragons (
id INT PRIMARY KEY,
name VARCHAR(100),
level INT,
element VARCHAR(50)
);
이 명령 하나로 드래곤이라는 존재 유형이 세상에 태어난다. CREATE는 설렘이다. 아직 존재하지 않는 것을 세상에 처음 불러내는 일이기 때문이다. Dragons 테이블이 생기기 전까지 이 세계에 드래곤은 없었다. 한 줄의 코드가 새로운 존재의 범주를 만든다.
반대로 이건 어떤가.
DROP TABLE Dragons;
드래곤이라는 개념 자체가 이 세계에서 사라진다. 이름도, 레벨도, 속성도, 그리고 지금까지 존재했던 모든 드래곤 데이터도 함께. 존재의 범주가 통째로 지워지는 것이다. 가장 강력하고, 가장 되돌리기 어려운 명령이다.
그래서 개발자는 아키텍트다
처음에는 데이터베이스가 단순한 저장소라고 생각했다. 그런데 SQL을 배우면 배울수록, 다른 생각이 든다. 이건 그냥 엑셀이 아니다. 세상을 지탱하는 법칙의 기록소이고, 그 법칙을 설계하는 사람이 개발자다.
어떤 데이터를 어떤 형태로 저장할지 결정하는 것은, 그 세계 안에서 무엇이 존재할 수 있는지를 결정하는 것이다. 개발자는 코드를 짜는 사람이 아니라, 세상의 규칙을 설계하는 아키텍트다. 데이터베이스는 그 설계도를 보관하는 기억의 도서관이다.
오늘도 나는 그 도서관에 새로운 페이지를 한 장 추가했다.