구 원트노/멋사 - 1학기 정규

[before model 4] rails & params

모델 배우기 전에


[before model 1] rails & form에 대하여

[before model 2] rails & route 1

[before model 3] get or post?? Http 메소드란?

params란


이번에는 rails 모델 배우기 전에 마지막 부분 parmas입니다. 


parmas를 우리가 어디서 사용했었죠??



네 controller에서 사용했습니다. 


음 그렇다면 controller는 무엇을 하는 곳 일까요?


컨트롤러의 역할을 크게 분류하면 요청 정보 추출, 응답 생성으로 나눌 수 있습니다.


요청 정보 추출?? 응답 생성? 말이 어렵나요? 이걸 설명하려면 웹 서비스 통신에 대한 이해가 필요합니다.


우리가 배우는 웹 서비스, 즉 네트워크를 크게 생각했을 때 '요청'과 '응답'을 통해 통신을 합니다.

보통 '내가 보는 화면'은 클라이언트라고 하는데


클라이언트는 URI를 이용해서 서버에 접속하고 요청 정보를 통해 데이터를 요청합니다.


그러면 서버 측에서는 요청을 받아서, 이를 해석하고 응답하여 다시 사용자 즉 클라이언트에게 전달합니다.


이게 우리가 사용하는 네트워크 구조 구요. 컨트롤러는 서버의 역할, 요청을 받고 응답하는 역할을 합니다.


그리고 params는 요청을 받는 역할을 합니다. 즉, 요청 정보 추출의 역할입니다!



params는 어떻게 사용할까요?


먼저 클라이언트(view)에서 서버(controller)로 데이터를 넘길 때는 key와 value의 형태로 요청 정보를 value에 담아서 보냅니다.


key = value, 변수 선언과 비슷하다고 생각하면 됩니다.


클라이언트(뷰)에서 서버(컨트롤러)로 전달한 요청 정보  value값을 알고 싶다면 params[:키]의 형식으로 value에 접근할 수 있습니다.


예를 들자면 post를 통해서 보낸 정보를 받은 적이 있었습니다. (rails & form 에서 다룬 내용입니다!)

그런데 정보를 보내는 방법이 'post' 한 방법일까요?? 레일즈에서 3가지 방법이 존재합니다.


 종류

설명 

 POST를 통해서 보내기(POST)

 <form method="POST">로 정의된 입력 양식에서 전달된 값 

 GET URL 정보(GET)

 URL 끝에 ?가 붙고, "키=벨류&...."형식으로 지정된 정보 ex) 현재주소?키=벨류&키=벨류

 route 변수(GET)

 라우트에서 정의한 변수(키)를 통해 정보를 얻는다.



각 경우 별로 이야기하겠습니다.


첫 번째 POST를 통해서 보내기는 rails & form에서 다룬 내용입니다.




두 번째 GET URL 정보는 형태가 익숙하지 않나요? get or post?? Http 메소드란?에서 다루었던 내용입니다.

안 보신 분들은 보고 오는 걸 추천합니다.


 get or post?? Http 메소드란? 마지막 부분이 form을 통해 method를 get으로 넘길 때 값이 주소창(URL)에 찍히는 걸 확인할 수 있었습니다.



예제 내용 form 부분 code입니다.



controller와 view의 코드는 이렇습니다.


1
2
3
4
5
6
7
8
9
#controller code
def write
    @title = parmas[:title]
    @content = params[:content]
end
#write.erb code
<%= @title %>
<br/>
<%= @content %>
cs


이 때 주소창에서 "?title=안녕&content=get이야" 부분을 바꾸어 보면 어떻게 될까요?



이렇게 "?title=와우&content=주소창에서 직접 바꿔볼까?"로 변경하고 새로고침을 해보겠습니다.


이렇게 화면의 내용이 변경되었습니다.


출력 내용은 params[:title]params[:content]의 결과물입니다.


이 방식과 첫 번째 POST방식과의 차이점에 대해 이야기해보겠습니다.


POST 방식은 form안에 양식을 통해서 값이 전달되었다면, 


이 방식은 주소 창에서 "?title=무엇&content=무엇"으로 선언해서 값을 전달하였습니다. 




세 번째 route 변수 방법입니다. 이 부분은 두 번째 방법과 원리는 같지만 키 값을 주소창에 작성하지 않고 route.rb에 작성하는 방법입니다.


코드를 이렇게 작성하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#route.rb 추가
get 'home/write/:title' => "home#write"
 
#index.erb 추가
<h1>라우트 방법</h1>
<a href="home/write/1">버튼을 눌러주세요</a>
 
#controller
def write
  @title=params[:title]
end
 
#write.erb
<%= @title %>
cs


route부분에서 'home/write'뒷 부분에 :title을 추가했습니다. :title은 키 값이라고 생각하면 됩니다.


index.erb에서 링크를 'home/write/1" 이렇게 선언했습니다. 여기서 1은 아까 route에 설정한 :title의 value이구요.

:title=1이라고 선언한거라고 생각하면 됩니다.


다음 controller에서 params[:title]을 통해 :title의 value인 1을 받아왔습니다.


그리고 마지막으로 write.erb에서 value인 1을 출력하는 코드였습니다.


그래서 이렇게 출력 된 걸 볼 수 있습니다.




이렇게 params를 사용하는 3가지 상황에 대해 설명했습니다.


각각 자주 쓰이는 상황들이 있는데 


첫 번째는 데이터를 새로 생성할 때나 변경할 때 주로 사용합니다.

두 번째는 내용 검색을 할 때 주로 사용되고(구글 검색 참고)

세 번째는 rails에서 모델(데이터베이스)을 통해 데이터를 보여줄 때 주로 사용합니다.(이 방법을 자주 사용합니다.)



이번 포스팅 내용은 어렵기도 하고 웹 서비스 흐름을 이해하는 중요한 부분입니다.


이해하고 넘어가는 걸 추천합니다!


궁금하신 점 있으시면 댓글 남겨주세요!!