데이터베이스는 거대한 도시다

데이터베이스는 거대한 도시다. Rails로 도시를 설계하며 DB를 직관적으로 이해할 수 있습니다. 도시 비유로 DB의 구조와 데이터 모델을 자연스럽게 이해해보세요.

bamchi 487

데이터베이스는 거대한 도시다 — 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)의 사고를 가진 개발자가 된 것이다.

댓글

댓글 작성

이메일은 공개되지 않으며, 답글 알림에만 사용됩니다.

이어서 읽어보세요

새 글 알림 받기

Bamchi Blog의 새 글이 발행되면 이메일로 알려드립니다.

이메일은 새 글 알림에만 사용됩니다.