내가 레일즈로 논문 프로젝트를 할 때, 레일즈 구성 요소가 진짜 MVC 디자인에 정말 잘 부합하는 녀석 중 하나라고 확신이 들 정도로 레일즈는 MVC가 철저하게 이루어져 있다. 게다가 모델, 뷰, 컨트롤러의 이름 생성에도 규칙이 존재하고, 이 규칙만 일치하면 레일즈 프로젝트에서 알아서 변수나 파일, 내용 끌어다 쓰는 건 진짜 쉬운 일이다.
레일즈 프로젝트의 구성 요소를 간단한 예시를 들어서 그림으로 그려보면 이렇게 구성될 수 있다.
이 예시는 다음과 같이 동작을 한다.
- 브라우저에서 특정 사용자를 확인하기 위해 주소 창에 http://XXXXXXXX.XX/users 이라고 입력했다고 하자.
- 해당 주소를 읽어서 어떠한 컨트롤이 필요한 지를 rails의 router에 지정된 형식에 따라 주소 변환과 그에 따른 컨트롤러 프로젝트로 연결한다. 이 경우에는 index 에서 사용자를 보여주도록 되어 있어서 index 처리로 넘어간다.
- index에 연결되어 있는 user_controller.rb 컨트롤러에서는 해당 유저가 있는지 User 모델을 검색한다. 모든 사용자를 검색하는 것이기 때문에 검색으로 User.all로 하였다.
- 모델 컨트롤러에 있는 액티브 레코드에 연결된 데이터베이스에서 알아서 검색한다.
- 검색 결과를 컨트롤러에 반환한다.
- 검색 결과를 View에 넘겨서 보여주는 형태로 전환한다.
- 전황된 HTML 코드를 컨트롤러가 받아 완전한 형태의 HTML 페이지로 구성한다.
- 브라우저로 HTML을 전달하여 화면에 표시한다.
모델 에서는 진짜로 데이터 모델에 관련된 작업만 하도록 구성되어 있고, 뷰는 진짜로 말 그대로 화면 뷰이다. 특정 템플릿에 맞춰서 화면을 보여주는 html 및 레일즈 코드를 이용하여 화면을 구성한다. 마지막으로 컨트롤러는 해당 주소의 이벤트 혹은 API에 데이터를 받으면 어떠한 작업을 해야하는지를 구성하는 코드로 이루어져 있다.
그리고 이걸 확인할 수 있는 것이 바로 레일즈의 폴더이다. 예제로 만들었던 hello 폴더를 비주얼 스튜디오 코드로 열어보았다. 레일즈 어플리케이션 코드가 들어있는 app에 보면 controllers, views, models라고 별도의 폴더가 있는 것을 볼 수 있다. 레일즈에서는 이 각각의 폴더 안에 해당되는 코드를 만들어서 이용하면 알아서 MVC 모델의 디자인화 된 코드를 볼 수있다.
레일즈 관련된 책에도 보면 이런 내용에 대해서 칭찬을 많이 하는데, 내가 봐도 이 부분이 되게 깔끔학데 되어 있다. 사용자가 특정 URL에 접근하여 요청을 하면 컨트롤러가 이 요청을 받아 모델을 조회해서 데이터를 불러오고, 이 데이터를 바탕으로 뷰를 통해 시각적으로 표현한다. 그리고 시각적인 표현에 클릭을 하였을 때의 동작 또한 컨트롤러를 통한 후에 필요하면 데이터를 모델을 통해 호출하고 그걸 뷰가 표현하고…
그럼 이젠 이걸 어떻게 만드는 지 보여줄 수 있어야 하는데, 일단 그것은 다음 포스팅에서..!