[RoR 학습] 2장 실습 그리고 3장 MVC 패턴- 레일스 아키텍쳐 이야기

2장 공부한 것을 복습하는 차원에서 2장 끝 부분에 있는 실습을 간단하게 진행했다. 새롭게 시작하려고 하는데 맞닿뜨린 문제가 있었다. 기존에 demo라는 앱을 생성해서 연습했었는데 실습을 위해 새롭게 다른 앱을 생성했는데 이 앱이 웹서버에 적용이 안 된 것이다.
air jordan 1 retro
생각해보니 보통 아파치나 톰캣을 쓰면 웹앱이 포함되는 폴더가 명시되어 있는데 본 실습에서는 일단 레일스가 제공하는 WebBrick 서버는 이런 과정이 없다. 그냥 알아서 자동으로 배포해서 실행시켜 주는 것이다. 따라서 당연히 새로 생성한 앱을 인식하지도 못하는 것이다. 다시 확인해 보니 처음에 서버를 실행시킬 때 해당하는 앱 폴더경로 상에서 실행시키는 것이 중요했다. 엉뚱한 위치에서 “rails server”를 아무리 쳐 봤자 서버가 실행되지 않는다. 반드시 실행시킬 앱의 폴더에서 서버를 실행시켜야 한다.
oakley razrwire nbt sunglasses
다시 돌아와서, 새롭게 앱을 생성하고 4가지 간단한 실습을 위해서 컨트롤러와 4개의 액션을 다음과 같이 생성시켰다.
Where Can I Buy ray ban sunglasses
Screenshot from 2013-07-25 22_05_31

첫 번째 실습은 아주 간단하게 사칙연산을 확인하기 위함이고 실제 연산은 컨트롤러에 넣어두고 변수 만 받아서 보여주는도록 뷰의 코드는 간단하게 했다.
nike air max uptempo
두 번째 실습은 문자열을 붙이는 실습이며 뷰의 코드는 첫 번째와 거의 같다.

세 번째 실습은 역시 시간함수를 사용한 것으로 첫 번째와 두 번째와 동일하게 루비코드는 컨트롤러에 있고 뷰에서는 변수만을 사용한다. 첫 번째부터 세 번째까지의 뷰의 코드는 거의 동일하다. 아래 코드는 첫 번째 뷰의 코드이다.
oakley razrwire nbt sunglasses
Screenshot from 2013-07-25 22_06_15

여기서 한 가지 추가된 것은 내부 링크를 거는 실습이다. 위 캡쳐화면에서 4번줄 코드가 바로 내부링크를 하는 과정이다.
Oakley sunglasses Spain
루비에서는 “link_to”라는 메서드를 통해서 아주 간단하게 내부링크를 걸 수 있다. 다른 언어처럼 괄호를 사용해서 파라미터를 받지 않는 것이 특이한 점이다. link_to 뒤에는 두 개의 파라미터가 붙는다. 첫 번째 파라미터는 링크를 걸 문자열이고, 두 번째 파라미터가 루비에서 미리 정의된 형식이다. 두번째 파라미터의 형식은 {컨트롤러 이름}_{해당 액션}_path 처럼 써 주면 된다. 위에서 쓴 link_path_FileList_path는 “link_path” 1가 컨트롤러 명이고 “FileList”가 내부적으로 링크 걸 액션이 되는 것이다.

네 번째 실습은 현재 폴더 리스트를 출력하는 실습이다. 책에 적혀 있는대로 “Dir.glob(‘*’)를 통해서 현재 폴더 내 파일명을 어레이로 받아올 수 있는 것 같다. 이를 뷰에서 for문을 통해서 다음과 같이 구현했다.
Screenshot from 2013-07-25 22_06_31마지막으로 위에 모든 실습에 해당하는 액션들은 다음과 같다.
all air jordan shoes
Screenshot from 2013-07-25 22_03_28

첫 실습이라 그리 어렵지 않다. 이어지는 3장도 분량은 많지 않다. 여기서는 다시 한번 레일스의 아키텍쳐인 MVC 패턴을 이야기한다. MVC 패턴에 대한 이야기는 레일스라고 해서 특별한 것은 아니다. 한 번 읽어보는 것으로 복습한다. 필요하면 링크를 참조한다. 2

다만, 레일스에서 MVC 패턴을 강조하는 이유는 “관심사에 따라 분리”(Separation of Concerns, SOC)가 코드 간의 결합도를 낮추기 때문에 사용한다는 점을 책에서는 설명하고 있다. 또한 레일스가 고집하는 “설정보다 관례(convention over configuration)” 철학으로 폴더 구조를 강제시켜 철저하게 MVC 패턴으로 개발하게 한다는 점이다. 이는 개발역량을 기능개발에 집중하게 하려는 의도라고 한다.

다음으로 나온 핵심적인 개념은 ORM, 즉 객체관계매핑이다. 대부분의 웹애플리케이션은 DB를 통해 저장된 데이터를 모델이 가지고와서 처리하여 뷰를 통해 보여준다. 여기서 문제가 개발은 객체지향언어로 하는데 DB는 집합이론을 기반으로 한 관계형 DB를 쓴다는 점이다. SQL로 데이터를 다루는 것을 OOP로 바꾸는데 공수가 많이 들어가는 것이 문제라는 것이다. 그래서 레일스에는 이러한 시간을 줄이고자 DB의 관계형 모델을 객체지향 개념과 맵핑을 시킨 것이다. 아주 간단하게 설명하면 테이블을 클래스로, 행을 객체로, 열을 객체의 속성으로 맵핑한다. 그리고 이를 통해서 아주 간편하게 DB 안에 있는 데이터들을 불러오고 저장할 수 있는 것이다. 아래 루비 코드가 책에서 보여주는 예제인데 눈으로만 봐도 SQL을 쓰지 않고도 이게 어떻게 데이터를 다루는지 감이 올 것이다.

구글링을 통해 ORM과 액티브 레코드 사이에 관계를 확인해 본 바 그리 어려운 것이 아니었다. ORM은 위에서 설명한 대로 관계형 DB와 객체를 맵핑하는 기술이며 이를 구현한 것이 액티브 레코드이다. 다시 액티브 레코드는 액티브 레코드 패턴으로부터 탄생했으며 Martin Fowler가 쓴 Patterns of Enterprise Application Architecture에서 처음 나온 개념이라고 한다 3. 결론적으로지금까지 살펴본 액티브레코드가 레일스에서 Model을 담당하여 비즈니스 로직과 데이터를 담당하게 된다.

마지막으로 3장에 액션팩에 대한 이야기가 나온다. 뷰톼 컨트롤러를 단일 컴포넌트로 묶어서 제공한다고 설명하는데 자세한 예제나 추가 설명이 없다. 추후에 다시 나올 것으로 기대하고 패스한다.

Notes:

  1. 일부러 컨틀롤러 명으로 ‘_’ 사용되는지 확인하기 위해 이름을 이렇게 썼다. 레일스에서 알아서 잘 파싱해준다.
  2. https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Model%E2%80%93view%E2%80%93controller
  3. http://edgeguides.rubyonrails.org/active_record_basics.html