본문 바로가기

RUBY ON RAILS

MVC(Model-View-Controller) & RUBY ON RAILS

안녕하세요 멋사3기 Kyunni입니다.

2주차부터 본격적으로 Ruby의 활용법에 대해 공부하게 되었습니다(포스팅도 2주차부터 진행하겠습니다.). 수업 내용을 자세히 포스팅하겠지만, 꼭 알고 넘어갔으면 하는 부분 중에서 간단히 짚고 넘어간 부분을 좀 더 깊이 학습해보고자 합니다 :)

오늘은 디자인패턴 중 하나인, Model-View-Controller(MVC) 패턴에 대해 포스팅하려고 합니다.


MVC (Model-View-Controller)


MVC는 소프트웨어 공학에서 사용되는 아키텍처 패턴, 즉 디자인 패턴입니다. MVC의 정의는 애플리케이션을 세 가지의 역할로 구분한 개발 방법론입니다. 세 가지의 구성요소를 통합적으로 정리하자면, 사용자가 Controller를 이용해 Model 측의 원하는 데이터를 가져오고, 사용자는 전달받은 데이터를 View를 통해 보기 쉽게 전달받게 됩니다. 

이 패턴의 장점은 UI(User Interface)로부터 로직을 분리하고, 각각의 요소를 서로의 영향없이 쉽게 고칠 수 있다는 점입니다.


Model-View-Controller, 각 요소의 의미

Model

  애플리케이션의 데이터를 나타내며, 일반적으로 Model은 데이터베이스 테이블에 대응됩니다. 

View

  클라이언트 단의 컨테이너로써, HTML/CSS/Javascript 들을 모아둔 컨테이너입니다. 실제 사용자의 눈에 보여지는 요소이기도 합니다. (1주차 과제에서 진행한 내용)

Controller

  데이터와 로직 사이의 상호 동작을 관리합니다. 쉽게 풀어서 이야기하자면, 사용자의 요청사항을 파악하고, 그 요청에 맞는 데이터를 Model에 의뢰해 데이터를 View에 반영하여 사용자에게 알려주는 역할을 합니다.


MVC와 Web, 그 긴밀한 관계

자, 이제 우리가 배운 내용을 WEB의 내용과 접목시켜 살펴봅시다. (그림 참조)

  1. 사용자가 웹사이트에 접속합니다. (Uses)

  2. Controller는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출합니다. (Manipulates)

  3. 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴합니다. 

  4. Controller는 Model이 리턴한 결과를 View에 반영합니다. (Updates)

  5. 데이터가 반영된 View는 사용자에게 보여집니다. (Sees)


MVC & RUBY ON RAILS

MVC를 실제 프로젝트에서 살펴봅시다. (개발환경은 Cloud9을 사용합니다. 프로젝트는 test라는 이름으로 미리 생성해주었습니다.)

시작하기 앞서, 간단한 구조를 파헤쳐보면,

도메인/컨트롤러/액션

ex) http://likelion.net/nambi/sonjob2

이러한 도메인 주소에서의 관계는 Rails에서 지정한 규칙입니다. 그리고 여기서 컨트롤러는 위에서 언급한 Controller를 의미하며, action은 컨트롤러가 처리하게 되는 대상을 의미합니다.


1. 컨트롤러 생성하기

rails generate controller [컨트롤러 이름]

개발화면 아래에 있는 Terminal 창에 위의 명령어를 입력해줍니다. 실행 결과를 확인해보면 알 수 있듯이, 컨트롤러와 관련 있는 다양한 파일들이 생성이 됨을 확인해볼 수 있습니다.

#참고로 rails g controller [컨트롤러 이름] 으로도 명령어 입력이 가능합니다.

 app>controllers>nambi_controller.rb 생성


2. 컨트롤러 파일 수정하기

컨트롤러 파일에 처리할 액션을 추가해주는 코드입니다.


3. 액션 생성하기

 

views>nambi[컨트롤러이름] 에 직접 .erb[액션파일]을 생성해줍니다.

화면에 보여질 View 내용을 HTML로 간단하게 표현해주었습니다.

#참고로 .erb 파일은 루비의 내장 템플릿 엔진으로 텍스트의 종류에 상관없이,루비 코드의 값을 포함하는 문서를 만들 수 있습니다. 템플릿은 문서 내에 변수 뿐만 아니라 흐름 제어를 위한 루비 코드와 함께 사용함으로써 다양한 문서 형식에 대응됩니다.

#erb는 embedded ruby의 약자로, HTML과 Ruby가 내장되어 있습니다. 

#주로 erb는 웹문서를 만들기 위해 사용되며 그 외 xml, rss, 소스코드 기타 구조화된 텍스트파일을 만들기 위해 사용됩니다. 특히 표준 형식을 지키는 반복 패턴을 포함한 문서를 만들 때 유용합니다. (대표예: 웹문서)

#erb의 장점은 루비나 rake에서 직접 호출할 수 있는 표준 라이브러리 형태로 제공되며, 다른 별도의 소프트웨어 설치가 필요 없다는 점입니다.


4. 라우트 파일 수정하기

 config>routes.rb 파일을 수정해주면 됩니다.

라우트 파일에 위에서 작성한 컨트롤러와 액션의 내용을 선언해줍니다. 생성한 컨트롤러와 액션을 연결해주기 위함입니다.


5. 결과화면

.erb 에서 작성한 코드의 내용이 "도메인/Controller/Action" 에 표시됨을 확인해볼 수 있습니다.