[ASP .NET] 세션을 편리하고 빠르게 사용하는 노하우

안녕하세요. 3월이 되기 직전에 어쩌면 마지막으로 올리는 강좌일 수도 있겠군요. 저 개인적으로는 수시 1학기때 대입에 관련된 모든 것을 끝을 내야 하는 입장인지라 당분간은 잠수를 타겠지요. ㅎㅎ 하지만 잠수를 타기 전에 잊지 않고 강좌를 올리고 갑니다. ^^


ASP .NET을 요즈음 들어서 많이 연구하는 중입니다. ASP .NET은 여러가지 장점도 있고 재미있는 토픽이 많지만 한 가지 불편한 점이 있습니다. 디자인 타임과 코드 비하인드 사이를 넘나드는 일이 그리 쉽지는 않다는 점입니다. ASP .NET 2.0 에서는 partial 키워드가 지원이 되므로 복잡한 상속 체인을 이용할 필요가 없습니다. (상속 체인을 쓰지 않아도 된다는 말의 본질적인 뜻은 결국 서술하는 위치만이 다를 뿐 결국에는 하나의 단일 클래스를 완성할 수 있다는 뜻이 되기도 합니다.) 하지만 아직은 ASP .NET 1.1이 많이 쓰이는 시대. 김칫국만을 마실 수는 없겠지요?


이번 강좌는 아주 약간의 노력으로 디자인 타임과 코드 비하인드 모두에서 편리하게 세션을 사용하는 방법을 소개 합니다. 디자인 타임에서는 코드 비하인드와 달리 복잡한 구문을 이용하는 것이 적절하지 않습니다. 반면 코드 비하인드는 디자인 타임처럼 자유로운 배치를 하거나 예약 변수가 전혀 없으므로 대체로 코드가 길어지기 마련입니다.


Step1. 클래스를 정의한다


여러분이 원하시는 이름의 클래스를 정의하시면 됩니다. 다만, 여기에 네임스페이스를 정의해야 한다면 약간의 추가 사항이 포함됩니다. 디자인 타임에서는 <%# Import Namespace=”네임스페이스 식” %>를 상단부에 배치해 주세요. 코드 비하인드에서는 늘 그래왔듯이 using (C#) 구문이나 Imports (VB.NET) 구문을 사용하여 네임스페이스 참조를 해주시는 것을 잊지 않도록 해야 하겠지요.


Step2. 구현하는 인터페이스로 반드시 System.Web.SessionState.IRequiresSessionState를 포함한다!


Step2를 놓쳐서 흔히 “안되겠구나” 하는 생각을 가지고 좌절을 맛보시는 분들이 많을겁니다. 놓치시면 안되겠지요? ^^


아, 그리고 인터페이스라고 해서 구현해야 하는 멤버수가 많지 않나 하여 걱정하시는 분들이 계실 거라 생각합니다. (저도 그렇게 생각하고 있습니다.) 하지만 다행히도 이 인터페이스는 단순한 표식 인터페이스로서 포함하는 멤버가 없습니다. 아주 간단한 스탬프를 하나 찍어놓는다는 기분으로 가볍게 써주세요. ^^


참고할 것은, 이 인터페이스는 세션 변수를 읽기/쓰기 할 수 있도록 표기하는 것입니다. 단순히 세션 변수를 읽기만 할 요량으로 설계할 클래스라면 이 인터페이스보다는 System.Web.SessionState.IReadOnlySessionState 인터페이스를 대신 써주시면 됩니다. 이 인터페이스도 마찬가지로 표식 인터페이스이므로 추상 멤버가 없습니다.


Step3. 어디서나 세션 변수에 접근하려면? System.Web.HttpContext.Current 속성에 주목하라!


Step2에서 좌절하고 Step3를 몰라 포기하실겁니다. 실수하지 말자구요. ^^


HttpContext.Current 속성은 정적 속성입니다. 그래서 위와 같은 표기로 접근하는 것이 맞습니다. 이 속성을 통하여 현재 시점에서 처리 중인 HTTP 요청에 대한 모든 것을 다룰 수 있습니다. 이 속성을 호출하는 대상이 누구인지, 현재 시점이 언제인지를 떠나서 웹 요청을 처리하는 클래스 라이브러리 (ASP .NET 응용프로그램)와 연결만 되면 항상 유효하므로 걱정하실 필요는 없습니다. (단 Out-Of-Process 상태인 콘솔, WinForm, GTK#, NT 서비스, 데몬 등의 프로그램 등에서는 유효하지 않을 수도 있습니다.)


그리고 디자인 타임에서 개체 생성 없이 빠르게 사용하시려면 가급적 이 클래스의 모든 멤버를 정적 멤버 (C#에서는 static, VB.NET에서는 Shared)로 선언해주는 것이 좋습니다.


Step4. 디자인 타임에서 쓰는 방법


<% = SessionHelper.UserIdentity %>님, 방문을 환영합니다!


<asp:Label id=”test”><%# SessionHelper.UserIdentity %></asp:Label>


간단하지요? ^^


많은 도움이 되시기를 바랍니다. ^^

댓글 남기기