🏗️

MVC 패턴

Model-View-Controller — Rails의 핵심 아키텍처

MVC(Model-View-Controller)는 소프트웨어 설계 패턴으로, Rails의 근간입니다.

Model: 데이터와 비즈니스 로직을 담당합니다. 데이터베이스 테이블과 1:1로 매핑되며, ActiveRecord를 통해 SQL 없이 데이터를 조작할 수 있습니다. 유효성 검사, 관계 설정, 콜백 등도 Model에서 처리합니다.

View: 사용자에게 보이는 화면을 담당합니다. ERB(Embedded Ruby) 템플릿으로 HTML 안에 Ruby 코드를 삽입합니다. 레이아웃, 파셜(partial)로 재사용 가능한 UI 조각을 만듭니다.

Controller: HTTP 요청을 받아 적절한 Model을 호출하고, 결과를 View에 전달하는 중개자입니다. 인증, 권한 확인, 파라미터 처리 등을 담당합니다.

Rails에서 요청 흐름: 브라우저 → 라우터 → Controller → Model(DB 조회) → Controller(데이터 전달) → View(HTML 생성) → 브라우저

구조 다이어그램

🌐 Browser — GET /posts/1
Router
config/routes.rb
posts#show
💎
Model
Post.find(1)
app/models/
🎮
Controller
@post = Post.find
app/controllers/
📄
View
<%= @post.title %>
app/views/
Controller Model (DB 조회) Controller (@post) View (HTML)
🌐 Browser — HTML 렌더링
핵심: <strong>Controller가 Model과 View를 중개</strong> — 관심사를 분리하여 코드 구조를 명확하게 유지

핵심 포인트

1

사용자가 브라우저에서 URL 요청 (예: GET /posts/1)

2

config/routes.rb에서 URL을 Controller#Action으로 매핑 (posts#show)

3

PostsController#show가 실행 — @post = Post.find(params[:id])

4

Model(Post)이 ActiveRecord를 통해 DB에서 데이터 조회

5

Controller가 @post 인스턴스 변수를 View에 전달

6

View(show.html.erb)가 @post 데이터를 HTML로 렌더링하여 브라우저에 반환

장점

  • 관심사의 분리 — 코드 구조가 명확
  • 팀 협업 용이 (디자이너=View, 개발자=Model)
  • Rails 컨벤션으로 자동 매핑
  • 코드 재사용성 높음

단점

  • 간단한 앱에서는 과도한 구조
  • Controller가 비대해지기 쉬움 (Fat Controller)
  • Model이 너무 많은 책임을 가질 수 있음 (God Model)
  • Service Object 등 추가 패턴이 필요한 경우 있음

사용 사례

모든 Rails 애플리케이션 RESTful API 서버 관리자 대시보드 E-commerce 사이트