관리 메뉴


Kinesis´s Open Document

초보 웹 개발자를 위한 세션의 이해 - #03 본문

MEMO/기술 자료/Web Application

초보 웹 개발자를 위한 세션의 이해 - #03

Kinesis 2012. 10. 12. 17:20
초보 웹 개발자를 위한 세션의 이해 - #03

 

- 첫번째 글 바로가기... ( 링크 : http://kinesis.kr/entry/초보-웹-개발자를-위한-세션의-이해-01 )

- 앞의 글에서 이어서... ( 링크 : http://kinesis.kr/entry/초보-웹-개발자를-위한-세션의-이해-02 )

 

우선적으로 지금까지의 글을 통해서 세션이 왜 필요한가와 그 방식, 그리고 만료라는 시스템이 필요한 이유까지는 확인했다. 하지만 만료가 있다면 연장도 있지 않을까? 물론 실제 세션의 연장은 실제로 사용되고 있고, 세션을 통해 인증을 하는 이상 필수적인 요소이다. 그러나 그 전에 우리는 이 세션을 언재 연장 갱신을 해야할까?

 

앞서 우리는 세션이 필요로 되는 공간을 "작업실" 또는 "작업의 방" 내지는 "회사" 와 같은 식으로 비유해 불러왔다. 명칭이야 어찌되엇든 상관 없지만. 우선적으로 지금 상황에서 이해하기 쉽게 그 공간을 "방" 으로서 가정해보면서 다음의 예문을 한번 보자.

 

당신은 방에 들어오기 전, 집 앞에서 신분 인증을 거치고 머무르는 시간에 대한 갱신을 하지 않는다면 10분 뒤에는 나와야 한다는 조건으로 집에 들어와 1번 방을 살펴보았다. 그런데 어느세 6분이라는 시간이 흘러가 버렸다. 그런데 당신은 2번째 방을 보고 싶어한다. 시간이 부족한 당신은 그 시간을 갱신 했으면 한다. 그러나 각 방에 들어갈때는 자신이 가진 시간을 갱신하는 도구가 일체 존재하지 않는다.

 

자 당신은 갱신을 하기 위해 어떠한 행동을 취해야 하는가?

 

이 예문에 대한 답은 나왔는가? 사실상 이 예문에서 인증을 하고 시간을 갱신해주는 부분은 바로 "대문" 에 해당하는 부분이다. 웹사이트 개념으로 보자면 "초기 페이지" 혹은 "로그인 페이지" 가 된다고 볼 수 있다. 이러한 상황에 있어서 다시 시간을 갱신 받기 위해서는 시간을 발급해주는 "대문" 에 해당하는 위치로 이동을 했다 와야한다.

 

하지만 여기에서는 자칫 논리적 오차 또는 오해를 일으키기 쉽다.

 

여기서 나는 이 글을 보고 있는 초보 웹 개발자에게 한번 물어보고자 한다.

 

대문 혹은 로그인 페이지는 다른 페이지를 포함 하고 있는가? (부모와 자식 관계)

혹은 동일선상에 놓여 있는가?

 

정답은 페이지가 요청되는 우선 순위가 대문 페이지 혹은 로그인 페이지일 뿐이며, 각각의 페이지의 실상은 동일선상에 있는 각각의 페이지(방)인 것이다.

 

요컨데 다음과 같은 구성인 것이다.

 

 

 대기중인 자신

 

 공지 / 안내 방

소개 방 

로그인 하는 방 

방명록 방 

게시판이 있는 방 

 

 

결과적으로 모든 방은 하나의 방안에 자식으로 속해 있는 것이 아닌 평행선상에 있는 것이므로 모든 방에는 들어갈 때마다. 인증을 요구하게 되는 것이다. 결과적으로 로그인을 통한 서비스를 제공하게 되는 이상 모든 페이지에 접근하는 순간 세션이 갱신되게끔 구현을 해 주어야만 권한이 없어졌으니 어서 빨리 나가라는 "권한 없음" 이라는 경고를 피할 수 있게 되는 것이다.

 

물론 좀더 심화적으로 가면 이러한 인증을 "공통(Common)" 이나 "뼈대(Framework)" 단에 구현을 해놓고 상속받는 개념으로 자동처리로 만들어 처리를 하게 되지만, 이 글은 이해를 위한 글이니 이 부분에 대해서는 자세히 들어가지 않겠다.

 

그럼 『 세션이 만료되는 것을 어떻게 확인 할 수 있을까? 』 라는 물음이 들지 않는가? 이 물음에 대해서 앞서 1번째 글에서 언급했던 말을 떠올려 보자.

 

웹 서비스는 본디 연결이 끊어져 있는 통신 방식이다.

 

그래서 첫번재 글에서의 예에서 나는 『 그리고 그 결과는 작업실을 나오고 나서만 확인할 수 있다. 』 라고 언급했었다.

 

사실상 웹페이지에 접근해서 페이지를 보고 있는 순간 우리는 마치 그 페이지에 실질적인 연결이 되어 있는 것으로 생각 한다. 실제로는 끊어져 있는데 말이다.

 

그 실 예로 종종 혹은 어쩌다 한번씩 화면 페이지를 정상적으로 보고 있었는데, 다른 페이지를 열람 하는 순간 "권한이 없다" 라던가 "로그인을 다시 해주세요" 와 같은 메세지를 보고 초기화면으로 튕겨져 간 경우를 본 적이 있지 않는가?. 이는 실제로 우리는 웹 페이지 (웹 문서)를 보고 있기는 하지만 그것은 이미 『 과거의 기록 』 이기 때문이다. 마치 우리가 지금 보고 있는 햇빛이 약 8초전에 태양이 발산 햇던 과거의 빛인 것처럼 말이다.

 

요컨데 우리가 세션 시간을 갱신하는 방법은 페이지에 접근하는 순간. 즉 방에 들어가기 위해 자신의 정보를 전달하는 그 순간 외에는 세션을 갱신할 방법이 없다.

 

물론 통상적일때의 이야기이다. (이와 관련한 우회법과 확인에 대한 방법은 나중에 언급하기로 하고 미뤄두기로 하자. 이 부분가지 언급하면 초보일때에는 머리가 아프고 혼란스럽게 된다.) 그렇기에 다른 페이지에 접근하지 않고 오랜시간 페이지에서 머물러 있으면 요청과정이 실제로는 일어나지 않아, 인증이 갱신되지 않아 세션이 만료되는 상황으로 닫게 되는 것이다.

 

그렇다면 해당 방에 들어갔다 나와 결과만을 보고 있는 상태에서 세션의 연장은 어떠한 방법으로 처리하는지 알아보자.

 

- 다음편에 이어서...

- 2012년 10월 12일 Kinesis 작성.

 

본게시물의 저작권은 Kinesis 에게 있습니다. 무단 펌을 불허합니다.

단, 본 게시물로의 링크는 허용합니다.

 

비 공지 티스토리 초대장키 : 3a34a78cb104f434f83dcf016a1b7f9 - 2012년 10월 12일 만료

 


Comments