생각을 개발하자, 박진형

[rails] 레일즈 기본편 - 컨트롤러 본문

Likelion/rails

[rails] 레일즈 기본편 - 컨트롤러

imjinbro imjinbro 2017.01.26 00:38
[레일즈 컨트롤러]



- 도서관 예시 : 우리가 책을 빌리기 위해서 도서관을 간다. 도서관은 우리가 이용하는 장소다. 도서관은 클라이언트 페이지이고, 우리는 클라이언트이다. 둘 다 클라이언트로 분류된다. 도서관에 가서 책을 빌리는데, 이 도서관에서 책을 빌리기 위해서는 사서를 거쳐야한다. 사서에게 어떤 책을 빌리겠다라고 말하고 가져와주세요 라고 말한다. 사서가 서버 역할을 하는 것이다. 레일즈에서는 컨트롤러라고 한다. 우리와 책이 꽂힌 책장 사이에 중간 역할을 함과 동시에 우리의 요청에 의해 어떻게 동작을 할 것인지를 규정 해놓는 것이 컨트롤러가 하는 역할이다. 클라이언트인 우리가 클라이언트 페이지인 도서관에서 우리가 보고 싶은 책을 빌리기위해서 거쳐야하는 사서에게 요청을 한다. 사서는 우리가 요청한 책을 가져오기위해 책이 꽂힌 곳으로 간다. 책들이 많이 꽂혀있다. 많이 꽂혀있는 책장이 바로 데이터베이스이다. 도서관을 구성하는 핵심 자원들이 머물러 있는 공간 혹은 저장되어있는 공간이 바로 데이터베이스이다. 사서는 여러개의 책장 중에 우리가 요청한 책이 분류된 곳을 찾아간다. 분류되어 있는 곳을 잘 찾아갈 수 있는 것은 책장 앞에 붙여진 종이 덕분이다. 종이에 적혀진 규칙은 도서관을 만들 때 만들었다. 이 규칙은 레일즈에서 모델에서 한다. 사서는 책장(데이터베이스)에서 책을 찾아 우리에게 돌아온다. 돌아와서는 책을 대여해준다. 우리가 이러이러한 책 빌리기를 요청한 것에 대한 응답이다.


- 컨트롤러 만들기
    1) rails g 컨트롤러이름  혹은 rails g 컨트롤러이름 액션메서드이름1 액션메서드이름2


=> 컨트롤러를 생성하면 아래와 같은 경로와 파일들이 생성된다.


=> 컨트롤러에 맞는 뷰 폴더도 같이 생성되며, 컨트롤러 생성 시(rails g) 액션메서드(아래내용참고)를 기입해주면 그에 맞는 뷰 파일도 생성된다.
=> 앞선 포스팅에서 컨트롤러는 M(모델)과 V(뷰)를 연결시켜주는 역할을 한다고 했다. 
=> 먼저 V와 C가 어떻게 연결되나? C에서 일련의 연산과정을 거친 결과값이 나왔다. 이를 뷰에서 보여주기위해서는 레일즈에 약속된 문법을 사용하여야한다.
=> 약속된 문법은 아래 그림처럼 하면된다 : C안에서 연산된 값의 변수이름 앞에 @를 붙이고, V에서는 이를 불러오기위해 <%= %>를 붙인다.

=> 해당 내용은 V에 대한 포스팅에서 더 짚어볼 것이다.

    2) 생성된 컨트롤러 폴더로 이동한다.
    3) 구조를 살펴본다 
=> application_controller와 컨트롤러 생성 시 이름으로 된 폴더 내 컨트롤러의 차이 : 도서관 전체에 대한 응답 요청 처리 / 도서 대여 반납에 대한 응답 요청
=> 후자 컨트롤러 파일을 들어가본다 : 첫번째 행을 본다 : LibrarianController < ApplicationController 라고 되어있다.
=> 도서 대여 반납 관련 컨트롤러의 이름이 Librarian이라고 치자. LibrarianController가 만들어졌다. 그렇다면 옆의 < 기호와 그다음 컨트롤러는 뭘까?
=> ApplicationController는 클라이언트로부터 받은 요청이나 클라이언트에게 보내는 응답과 관련된 모든 처리와 관련된 메서드를 가진 컨트롤러이다.
=> 우리가 직접 만든게 아니라 레일즈를 만든 이가 만들어 놓았다.
=> 레일즈가 왜 편리한지 알 수 있는 부분

    4) 만든 컨트롤러로 들어가 동작을 하나 만들어본다
=> 액션 메서드라고 한다.
=> 도서관 예시를 들면, 도서관에 도서 대여반납 기능을 담당하는 컨트롤러를 만든다. 도서 대여반납 기능을 구성하는 세부 기능들이 있다.
=> 세부기능 : new(새로운 도서대여 항목 만들기), show(도서대여 목록 보기), update(도서대여 목록 중 특정도서 기간연장), delete(도서반납)