쿠키 매커니즘을 이용한 세션 유지

정리하고 있던 내용 중 일부를 발췌했습니다. 로그인 관련해서 어려움을 겪는 분들이 있다면, 이 포스트가 도움이 되었으면 좋겠습니다.


9장 사용자 인증

새로운 프로젝트를 할 때마다 로그인이 업무의 절반이라고들 한다. 서비스의 대부분의 기능이 User 모델과 엮여 있기 때문이다.

웹서비스에서 사용자 인증(authentication)이란 사용자가 제시한 신분(아이디와 비밀번호)이 우리 서비스의 사용자가 맞는지를 확인하는 절차이다. 권한부여(authorization)와는 다른 개념이다.

여러분이 컴퓨터를 켜고 운영체제에 로그인하는 행위는 인증이다. 가족이 같은 컴퓨터에 다른 아이디로 로그인할 수 있는데, 가족은 여러분이 만든 디렉터리에 접근할 수 없을 수도 있다. 권한이 없기 때문이다. 직장을 다니는 분들은 아이디 카드로 회사에 출근하고 퇴근한다. 아이디 카드로 서버실 문을 열 수 있는 직원이 따로 정해져 있다. 인증과 권한 부여의 차이를 이해했는가?

9.1. HTTP의 무상태 특성

직장과 같은 현실세계에서는 사람이 사무실에 머무르기 때문에 출근했는지를 눈으로 확인할 수 있다.

웹에서는 사용자가 로그인하면 세션(session)이라 부르는 이름표를 하나 만들고, HTTP 쿠키(cookie)라는 매커니즘을 이용해서 이름표를 계속 주고 받는다. 언제까지? 세션이 만료되거나 사용자가 명시적으로 로아아웃할 때까지.

컴퓨터는 로그인한 사용자의 이름표를 메모리에 가지고 상태를 유지할 수 있다. 반면 두 대의 단절된 컴퓨터가 통신을 하는 웹(HTTP)은 상태를 저장할 공유된 장치가 없다. 홍길동 사용자가 연속해서 두번 우리 홈페이지를 방문했다 가정하면, 우리 웹서버는 두 연속된 요청의 소유자를 구분할 수 없다. 이처럼 무상태(stateless)는 HTTP 프로토콜의 가장 큰 특징이다.

HTTP 트랜잭션의 상태를 유지하기 위해 PHP는 웹사이트에 접속하는 방문자에게 세션 아이디라는 고유 식별자를 할당한다. PHP 스크립트에서 세션을 쓰겠다고 선언해 놓는다면 방문자가 웹사이트를 다시 찾아오면 같은 사람인지 알아차릴 수 있다. 식별 정보를 HTTT 응답 헤더에 실어서 주고 받기 때문이다. 라라벨은 web 미들웨어 그룹에 속한 모든 라우트에 대해 (사용자 로그인 여부와 상관없이) 세션을 유지한다.

그림 9-1에서 처음 두 개의 HTTP 트랜잭션은 로그인하지 않은 상태다. 이 때도 웹브라우저와 웹서버의 세션 유지 시퀀스는 동작한다. 세번째는 사용자가 로그인 요청의 처리하는 트랙잭션이다. 마지막은 로그아웃할 때를 묘사한다.

그림 9-1 쿠키를 이용한 세션 유지 메커니즘

9.2. 기본기 다지기

우선 라라벨 로그인의 동작 원리를 익히자.

9.2.1. User 모델

...

그림 9-2 크롬 개발자 도구로 본 쿠키 매커니즘

comments powered by Disqus