데이터베이스는 거대한 도시다 — Rails로 도시를 설계하며 DB를 직관적으로 이해하기
우리는 지금까지
데이터베이스(DB)를 서랍장이나 상자에 비유했다.
이번에는 완전히 다른 세계로 가보자.
DB = 도시라고 생각해보자.
도시는 구역이 있고, 건물이 있고,
그 안에는 수많은 방이 있다.
Database = 도시 전체
Table = 건물(Building)
Record = 방(Room)
Column = 방 안의 속성들(크기, 용도, 가격 등)
도시 비유는
DB의 구조적 개념과
관계형 데이터 모델을
가장 자연스럽게 이해할 수 있는 비유다.
이제 Rails로 직접 “도시를 설계”해보며
DB가 어떻게 구성되는지 직접 체험하자.
Part 1. DB라는 도시 안에 첫 번째 건물(Building) 세우기
터미널에서:
rails generate model Building name:string floors:integer
rails db:migrate
이 명령은 이렇게 해석할 수 있다.
“도시(DB)에 Building이라는 건물을 지을게.
건물엔 이름(name)과 층수(floors)라는 두 가지 속성이 있어.”
Rails는 이 명령을 바탕으로
도시에 건물을 세우고, 건물마다 공통으로 존재할 속성(칸)을 정의한다.
이제 우리의 도시 안에는
Building이라는 건물이 존재한다.
Part 2. 건물 안에 “방(Room)”을 만들 수 있게 하기
건물(Building)에 실제 방이 있어야
사람들이 살 수도 있고,
임대료를 받을 수도 있고,
도시가 의미를 갖는다.
그래서 방(Room) 테이블을 생성해보자.
rails generate model Room number:string size:integer building:references
rails db:migrate
이 말은:
“Room이라는 방을 만들고,
그 방들이 어떤 Building(건물)에 속하는지 표시해줘.”
Rails는 자동으로 building_id라는 칸을 만들어
방이 어느 건물에 속했는지 연결해준다.
이게 바로
DB의 관계(relationship)이다.
(도시 비유에서는 너무 자연스러워서 설명이 필요 없을 만큼!)
Part 3. Rails에게 “건물과 방의 관계”를 가르치기
app/models/building.rb
class Building < ApplicationRecord
has_many :rooms
end
app/models/room.rb
class Room < ApplicationRecord
belongs_to :building
end
이제 Rails는 완전히 이해했다.
건물(Building) 안에는 방(Room)이 여러 개 있다
방(Room)은 반드시 어떤 건물(Building)에 속한다
도시 비유에서
너무 당연한 구조가
DB의 핵심 원리라는 걸 깨닫는 순간이다.
Part 4. Console에서 직접 “건물 하나 짓기”
Rails console에서:
b = Building.create(name: "스타타워", floors: 30)
여기서 우리는
도시(DB) 안에
‘스타타워’라는 실제 건물을 하나 세웠다.
Part 5. 방(Room)들을 건물 안에 만들기
b.rooms.create(number: "101", size: 28)
b.rooms.create(number: "102", size: 33)
b.rooms.create(number: "201", size: 40)
이제 ‘스타타워’ 건물 안에는
3개의 방이 생겼다.
이 순간,
도시 → 건물 → 방
이라는 구조가
DB의 구조적 본질과 1:1로 맞물린다.
Part 6. 방을 조회해보자
(도시에서 특정 건물의 방 목록을 보는 느낌으로)
b.rooms
Rails는 이렇게 요청한다.
“이 건물(Building)의 모든 방(Room)을 보여줘!”
DB는
도시의 100만 건물 중
‘스타타워’에 속한 방만 정확히 찾아준다.
이게 데이터베이스가
현대 웹서비스의 ‘도시 행정 시스템’처럼
모든 데이터를 빠르고 정확하게 관리할 수 있는 이유다.
Part 7. 특정 속성을 기준으로 방을 찾기
(부동산 검색 같은 느낌)
Room.where(size: 33)
이 명령은:
“도시 전체에서 size가 33인 방만 찾아줘.”
웹에서 방 정보 검색하듯이
DB는 수천·수만 개 중에서
조건에 맞는 방만 뽑아준다.
Part 8. 이제 독자는 깨닫는다
“아… DB가 도시이고,
테이블이 건물이고,
레코드가 방이라는 말이 너무 자연스럽네.”“실제로 Rails로 도시를 짓는 느낌이라
머릿속에서 개념이 확 잡힌다.”“그렇다면 나도 도시 설계하듯
웹서비스의 데이터를 설계할 수 있겠는데!?”
이 감각이 생긴 순간,
DB는 더 이상 추상적인 기술이 아니다.
당신은 지금
설계자(Architect)의 사고를 가진 개발자가 된 것이다.