http://rifers.org 에서 발췌한 내용을 번역 하였습니다.
번역: 이원찬(wonchan.lee@gmail.com)
-------------------------------------------------------
Acceptable session support
사람들은 왜 RIFE가 전통적인 세션에 직접 접근하는 방법을 제공하지 않는지 질문한다. 지금부터 우리가 어떻게 현재의 솔루션에 도달했는지 상세한 설명을 할것이다.
전통적인 세션의 문제점.
먼저, 왜 RIFE가 전통적인 세션에 접근하는것을 막았는지 이유를 알아보자
세션은 어플리케이션 실행 흐름과 동기화되지 않는다.
하나의 세션 아이디는 어플리케이션 어디에서나 가져다 수정할 수 있는 상태정보를 포함한다. 방문자는 뒤로가기 버튼이나 페이지 북마크를 누를때 어플리케이션의 실행흐름중 이전 위치를 가져와 같은 세션아이디를 가진다. 그러나, 실제 어플리케이션은 다음 위치의 세션 데이타를 사용한다. 이것은 예측할수 없고, 원하지 않은 상태를 만들 수 있다.
세션을 휴지통처럼 되려는 경향이 있다.
코더들은 단지 나중에 필요할 것 같은 모든것들을 세션에 던져 넣으려는 경향이 있다. 그러나, 한번 이것이 생성되면, 이것을 언제 버려야 할지 결정하기 매우 어려워 진다. 이런 상황은 가볍게 보이지 않는다. 사이트의 어디에서 어떤 세션 파라미터를 필요로 할지 알수 없으므로 늘 모든 값이 붙어 다니는 경향이 있다.
비록 몇개월 뒤, 모든것을 기억 하지 못할때 한가지가 세션에 남아있다면 가장 빠른 해결책은 충돌이 발생하지 않는것을 보장하는 수상한 이름을 찾기 시작하는 것이다. 따라서, 개발자가 철저히 방법론에 따라 세션의 영향과 컨텐츠를 적당히 문서화 하지 않는다면 무서운 혼란을 초래할 것이다.
세션은 의미없는 URL들을 생성한다.
이것은 매우 작은 관점이다. 그리고, 어떤 서버 기반 상태 보관 엔진으로도 이 문제를 피하는것은 현실적으로 불가능하다. 이것이 진짜 문제가 아니다. 진짜 문제는 RIFE없이 일반적인 질의 파라미터를 통해 데이타를 주고 받는것은 매우 성가신 일이란 것이다. 따라서, 세션은 데이타를 가져오는데 사용되나 사실은 URL을 통해 전달된다.
전통적인 세션의 해택들
하지만 세션은 서버측 상태를 보관하는 솔루션으로써 몇가지 장점들을 가진다.
세션은 클라이언트로 부터 전송된 데이터를 숨긴다.
방문자에게 보안상 또는 기타 민감한 이유로 전송된 데이터를 보이지 않게 하는것이 중요한 어플리케이션이 있다. 신용카드 번호를 하나 받았다고 가정하자. 실제 이 번호가 사용되기 전에 몇단계의 부가적인 절차가 필요하다. 이 번호가 단계마다 계속 전달되어 그 값이 다른 누군가에게 북마크 되거나 캐쉬에 저장될 수 있다은 것은 끔찍한 일이다. 임시 데이터베이스 저장 메커니즘을 이용하여 수동적으로 풀수도 있지만 이것은 분명히 개발자에게 친숙하지도 않고 시간을 줄여줄 수도 없다.
세션은 대량의 데이타가 전달 되는 것을 전달 되는것을 방지한다.
파라미터를 쿼리스트링이나 폼객체로 전달하는 것은 생각처럼 가벼운 일이 아니다. 이것은 대역폭을 소비하고 반복되어 전달될 필요가 있다. 많은 양의 데이터를 이렇게 전달하다 보면 문제가 된다. 또한, URL은 길이에 제한이 있다. 만일 이 제한에 걸리면 어플리케이션이 정상적으로 작동하지 않을 수 있다.
세션은 상태의 변화 과정을 쉽게 핸들링 할 수 있게 도와준다.
웹사이트에 데이터를 입력시 마법사형식의 접근이 필요한 어플리케이션을 개발한다고 가정하자. 사용자에게 각 단계마다 필요한 데이터를 입력하도록 해야 할것이다. 비록 RIFE의 빈을 이용해 자동으로 엔트리에 데이터를 채운다 하더라도 시작부터 모인 모든 데이터가 각 단계 마다 모든 데이터가 확인(validate)되어야 한다. 자체적으로 확인하는 메커니즘의 빈(validated bean)을 이용하는 것은 이 작업을 좀 더 쉽게 하긴 하지만 대부분의 개발자에게 친숙하지 않을 뿐더러 일부 중복된 코딩을 요구한다. 세션은 받은 데이터를 서버에 저장할 수 있게 해주고 서버에 저장된 데이터는 클라이언트로 부터 수정되지 않았음을 보장할 수 있다. (그러므로, 각 요청마다 모든 데이터를 확인할 필요가 없다.)
RIFE의 해결책
디음의 사항을 주의깊게 보라 :
* RIFE는 데이터의 흐름에 관해 전혀 여지를 남기지 않는다. 따라서, 이것은 문제를 야기하거나 세션을 불가능한 상태로 남겨두지 않는다. 데이터는 필요할때 필요한 정보만 전송되어 질 것이다.
* RIFE는 데이터 링크 뿐만 아니라 전역변수 사이에서 데이터의 전송을 쉽게 한다. 이것은 섬세하고 간편한 개발 환경을 제공하여 개발자의 간섭을 최소화 한다.
* RIFE는 웹 연속성을 지원한다. 이것은 상태의 변화를 매우 쉽게 제어한다.
* RIFE는 클라이언트를 통해 기본적으로 모든것을 전송한다. 그리고 URL또는 폼객체가 어플리케이션을 제어하도록 한다.
* RIFE는 모든 데이터 흐름 기능을 이용하는 동안 설정가능한 상태 저장 메커니즘을 통해 서버측에서 상태 저장을 허락한다. 이것은 민감하고 대량의 데이터가 전송되어지지 않도록 하는것을 허락한다.
댓글 없음:
댓글 쓰기