본문 바로가기

RUBY ON RAILS

Rails 로그인하기 (Session & Cookie)

안녕하세요 멋사3기 Kyunni입니다.

이번 포스팅은 열세번 째 강의인 '레일즈에서 로그인하기'에 관련된 포스팅 입니다. DB를 가지고 놀아보기도 하고, 여러가지 다양한 기능들을 다루어 보았으니, 이제 Rails를 이용하여 회원가입을 하고, 로그인을 하는 방법에 대하여 알아보도록 하겠습니다. 

저는 배운 내용에 덧붙여서 Login에서의 핵심 기술인 Session과 Cookie에 대하여 자세히 다루어보도록 하겠습니다.


Ruby에서 사용되는 몇 가지 Tips

1. controller 만들 때, 동시에 action 생성해주기

rails g controller controller_name action_1 action_2 ...

기존에 컨트롤러를 생성할 때에는 'rails g controller 컨트롤러이름'을 콘솔창에 명령을 내리고 나서, View와 컨트롤러에 따로 액션을 추가하는 식으로 Controller와 View를 만들었었습니다. 하지만, 위와 같은 명령어를 입력하면, 한 번에 컨트롤러와 액션 생성이 가능합니다.


2. get, post 한 줄에 route 파일에 적용시키기 

match ':controller(/:action(/:id))', :via => [:post, :get]

이전까지는 위의 코드에서 match 대신에 get과 post를 입력한 두 줄을 이용하여 모든 get과 post 방식의 액션들을 자유롭게 사용했습니다. 나아가 위의 코드를 이용하면, 한 줄에 모든 액션들을 허용할 수 있게 됩니다.


3. 많은 파일에 적용되는 공통의 소스코드 적용하기

_filename.erb

<%= render :partial => 'controller/filename'%>

공통적인 내용을 많은 파일에 적용시킬 때에는 view에 언더라인(_)을 파일명 맨 앞에 붙인 erb파일을 생성하여, 이를 활용해주면 됩니다. 두 번째 라인은 이렇게 만든 공통의 파일을 다른 erb 파일에 적용시키는 코드입니다. 


Session과 Cookie

기본적으로 HTTP는 Stateless(페이지를 이동할 때마다 새로운 연결로 인식합니다.)합니다. 사용자의 요청에 대한 응답을 한 후 페이지 간의 연결을 해제하게 되는 것입니다. 이러할 경우, 로그인 정보가 기억되지 못하고 바로 소멸되기 때문에 이러한 클라이언트의 정보 유지를 위해 사용되는 것이 바로 세션과 쿠키입니다.

Session

SID를 식별자로 서버에 데이터를 저장하며, SID로는 쿠키나 도메인 파라미터를 이용하게 됩니다. 데이터는 서버 내의 파일이나 DB에 저장됩니다. (바로 이 저장 위치가 쿠키와 세션을 구분하는 가장 큰 차이점입니다.)

Cookie

쿠키는 클라이언트(웹브라우저)에 데이터를 저장합니다. 클라이언트 측에 저장을 하기 때문에 이를 해결하기 위해 제안된 것이 Session입니다. 현재는 Session이 더 많이 사용되고 있다고 합니다.


로그인 코드 작성

1. User MODEL 생성

회원 정보를 저장하기 위한 데이터베이스 모델입니다. 7번째 라인은 사용자 등급을 나타낸 것인데, 이번 실습 내용에서는 사용하지 않습니다.

회원가입 프로세스입니다.


2. Login Process 생성

로그인과 로그아웃에 관련된 컨트롤러의 내용입니다.
- 16번째 라인: u에는 폼으로부터 전달받은 이름과 비밀번호 내용과 일치하는 데이터베이스 정보를 대입합니다.
- 19번째 라인: u에 대응되는 데이터가 없지 않을 때? session[:user_id] = u.id sessin에 유저 정보를 저장합니다. 참고로 여기서 의미하는 id는 rails에서 1씩 증가시키는 고유의 값입니다. 로그인 아이디가 아닙니다.


3. index 페이지에서 출력