태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Ruby On Rails - Scaffold의 함정

Tech 2007. 4. 18. 09:36

RoR을 공부하며 "얼라? 꽤 편하네?" 라고 생각하게 되는 scaffold. 사실 이게 독이다 ... 까진 아니어도 독이 될 수 있다. scaffold가 본연의 목적을 넘어가는 용도로 사용되기 시작할때 그 아픔이 시작된다.

Scaffold를 사용해보면 dynamic scaffold/static scaffold 모두 Model-Controller가 1:1 관계로 가기 좋다. 아니 1:1 관계다. 왜냐하면 scaffold는 특정 모델을 웹에서 접근 가능하게 하는 인터페이스이기 때문이다. 컨트롤러는 URL, 즉 페이지와 직접적으로 닿아있고 웹 페이지가 바로 모델의 인터페이스가 되는 구조인 scaffold에서는 이런 일대일 관계가 자연스럽다. 하지만 ? ... 만들려는 서비스가 조금 복잡해지기 시작하면 문제가 시작된다.

일반적인 웹 서비스의 경우, 모델이 웹을 통한 직접적인 인터페이스를 가지지 않는 것이 더 상식적이지 않은가? 관리자가 아니라면 말이다. 개발 단계에서야 모를까 하나의 페이지에 여러 모델에서 가져온 정보가 이곳저곳에 서로 다른 형태로 등장하게 되는데, 이렇게 되면 scaffold를 베이스로 만들어진 코드들은 뭔가 난감하게 된다. 꼭 scaffold가 아니라 모델-Wrapper 스타일의 컨트롤러의 경우. 레일즈가 유연하기 때문에 어느정도 규모가 될 때까지는 무리 없이 작업이 가능하고 잘못되어가고 있다는 점도 모를 수 있다는게 안습이라면 안습. Model-Controller의 일대일 대응관계는 튜토리얼 성격의 간단한 프로그램에서나 볼 수 있는(그게 아니라도 일반적인건 아닐는) 것이라는게 지금까지의 결론.

그렇다면 Model, View, Controller는 레일즈에서 어떤 역할을 해야 하는가? 사실 모든 코드를 Model, Controller, View 어느 한곳에만 때려넣어도 동작은 한다. 모든것을 View에 때려넣으면 PHP와 거의 같은(하지만 Embedded Ruby가 더 강력할것 같다) 동작을 하게 된다. 코드가 Controller, Model중 어느 한곳에만 모여도 웹 서비스를 구성하는 것은 가능하다. 요는 이 세가지에 어떻게 적절하게 서비스를 분산시킬 것인지, 이 세가지에 속하지 않는 것을 어떻게 따로 뺄 것인지를 정하는 것인데 지금까지 레일즈를 보며 세운 기준은 이렇다.

1. View는 가능한한 로직을 배제. Display를 위한 조각 템플릿과, 조각 템플릿이 모여 구성되는 레이아웃 정도. 단계별 구조화가 중요하다.
2. Model은 군더더기 없이 유지한다. OOP적인 시각에서 보면 Model은 넣을 수 있는 것은 다 넣고 뺄 수 있는 것은 다 빼두는 하나의 응집된 클래스로 유지해야 한다.
3. Controller는 URL과 View사이를 Model을 개입시켜 연결해 주는 역할을 한다. 즉 웹 페이지와 직접 살을 맞대는 일을 한다.
4. 복잡한 로직은 가능하면 Helper나 Library의 모듈로 뺀다.

...

튜토리얼은 그 플랫폼에서의 사고방식의 베이스를 구축하는데 중요한 역할을 한다. Scaffold는 Agile이라는 키워드에 맞는 쉽고 강력한 툴이다. 하지만 위험하다. 개발의 도구가 아니라 개발의 과정(주로 Static으로 뿌려놓고 고쳐나가는?)으로 사용한다면 나중에 자신을 옥죄게 될지도 모른다.



P.S. RoR은 유연한 프레임웍인것 같다. 사실 모델과 컨트롤러가 1:1 대응이 되어도 지저분하지 않게 다룰 수 있는 장치들이 있다. ... 위에도 밝혔듯이, 어떻게 해도 할 수 있다, 라는 데에서 왠지 Perl느낌이 든다.

'Tech' 카테고리의 다른 글

지름: Ferret short cuts (O'reilly), PDF  (0) 2007.06.08
Web - 데이터를 어디에 저장하지?  (2) 2007.05.02
Ruby On Rails - Scaffold의 함정  (2) 2007.04.18
Javascript - folding  (2) 2007.04.16
책 제본했다! 아자~  (4) 2007.04.07
지름: AgileWebDevelopmentWithRails, PDF Ver  (0) 2007.04.01
tags : , , , , ,
Trackbacks 0 : Comments 2
  1. Favicon of https://deisys.tistory.com 가난한 d-goon 2007.05.02 00:56 신고 Modify/Delete Reply

    공부를 더 하다보니, 왠지 CRUD기반의 컨트롤러 설계에 대한 생각이 바뀌어가고 있음. 다시 생각을 정리해서 포스팅할것 - ... 덜덜

  2. Favicon of http://15675aniefit.com/ralphlauren-it.php polo 2013.07.16 18:05 Modify/Delete Reply

    당신 매력있어, 자기가 얼마나 매력있는지 모르는게 당신매력이야

Write a comment