Ruby on Rails는 “Convention over Configuration(관례 우선)”이라는 철학 아래 매우 강력한 구조를 제공합니다. 그 구조의 중심에는 바로 MVC, 즉 Model - View - Controller가 있죠. 처음에는 낯설게 느껴질 수 있지만, MVC를 제대로 이해하면 Rails가 왜 생산성이 좋은지, 왜 아름답다고 불리는지를 실감하게 될 거예요.
🎭 MVC란 무엇인가요?
MVC는 웹 애플리케이션을 세 가지 책임 영역으로 분리하는 아키텍처 패턴입니다.
- Model: 데이터와 비즈니스 로직
- View: 사용자에게 보여지는 화면
- Controller: 요청을 받아 처리하고 Model과 View를 연결
이 세 가지가 서로 협력하면서 하나의 요청/응답 사이클을 완성하게 됩니다.
📦 Rails의 MVC 흐름
- 사용자가
/posts
로 GET 요청을 보냅니다. - 이 요청은
routes.rb
에 정의된 대로PostsController#index
로 연결됩니다. PostsController
는Post.all
을 통해 모델에서 데이터를 가져옵니다.- 가져온 데이터를
app/views/posts/index.html.erb
뷰에 넘깁니다. - 최종적으로 HTML이 렌더링되어 사용자에게 보여집니다.
# app/controllers/posts_controller.rb
def index
@posts = Post.all
end
# app/views/posts/index.html.erb
<% @posts.each do |post| %>
<h2><%= post.title %></h2>
<p><%= post.content %></p>
<% end %>
🧱 각 요소를 깊이 있게 들여다보기
1. Model (모델)
Rails에서 모델은 ActiveRecord
를 통해 DB 테이블과 연결됩니다.
class Post < ApplicationRecord
validates :title, presence: true
end
데이터의 유효성 검사, 관계 설정, 비즈니스 로직 등을 담당합니다.
2. Controller (컨트롤러)
컨트롤러는 요청을 받아 필요한 데이터를 모델로부터 받아오고, 어떤 뷰를 렌더링할지 결정합니다.
def show
@post = Post.find(params[:id])
end
3. View (뷰)
뷰는 사용자가 직접 보게 되는 화면입니다. .html.erb
파일은 HTML 안에 Ruby 코드를 삽입할 수 있는 템플릿이에요.
<h1><%= @post.title %></h1>
<div><%= @post.content %></div>
🌀 MVC가 주는 이점
- 역할 분리: 유지보수성과 협업 효율 상승
- 재사용성: 모델 로직은 다양한 컨트롤러에서 재사용 가능
- 테스트 용이: 각 레이어별로 유닛 테스트 가능
🌊 실전 감각: MVC 흐름을 그림으로 이해해보기
사용자 → 라우터 → 컨트롤러 → 모델 → 데이터 가져옴 → 컨트롤러 → 뷰 → 사용자에게 HTML 응답!
이 흐름이 머릿속에 자연스럽게 그려져야 나중에 Ajax, API, GraphQL 같은 고급 기술을 다룰 때도 훨씬 수월해집니다.
🎯 마치며
MVC는 단순한 개념 같지만, Rails의 철학과 구조를 가장 잘 보여주는 핵심입니다. 컨트롤러가 하는 역할은 무엇이고, 뷰에서 데이터를 어떻게 출력하며, 모델은 어떤 유효성을 검증해야 하는지. 이 구조를 자연스럽게 익히면, 여러분은 이미 반쯤 Rails 장인이 된 거예요.
다음 글에서는 MVC를 확장해 모델 간의 관계 (has_many, belongs_to)를 다루어볼게요. 그럼 다음 편에서 만나요!
'Ruby On Rails' 카테고리의 다른 글
Validation & Callback — 데이터의 품질을 지키는 방법 (2) | 2025.07.10 |
---|---|
마이그레이션과 스키마 변화 — 안전하게 DB 구조 바꾸기 (1) | 2025.07.09 |
ActiveRecord로 데이터 다루기 — CRUD의 정석 (0) | 2025.07.07 |
Rails의 라우팅 시스템 — config/routes.rb 제대로 이해하기 (0) | 2025.07.06 |
첫 번째 Rails 앱 만들기 — Blog 프로젝트로 배우는 MVC (0) | 2025.07.05 |