'세션데이터'에 해당되는 글 1건

  1. 2019.08.26 JSP와 ColdFusion의 Session 공유

기존에 JSP나 Servlet으로 구축된 어떤 시스템이 있다고 가정해 봅시다. 이 시스템은 워낙 방대하고 복잡해서 전면적인 개편이나 신규구축이 어렵다고 합니다. 그런데 ColdFusion의 강력한 기능과 효율적인 개발환경을 도입하고자 합니다. 상이한 두 환경과 이질적인 웹어플리케이션간의 통합을 어떻게 해야 할까요?

어려 방법이 있겠습니다만, 가장 우선 두 이질적인 웹어플리케이션을 통합하는데 있어 중요한 것은 데이터베이스와 파일의 기본적인 환경 공유와 함께 사용자인증, 어플리케이션 인증 등을 위해 세션(Session)을 공유해야 정확한 의미에서 "통합"이라는 단어를 쓸 수 있겠죠.

가령, PHP로 구축된 어떤 어플리케이션과 ASP로 구축된 어떤 어플리케이션을 단일호스트(웹사이트환경)에서 모두 실행 할 수는 있겠죠. Windows 시스템에 IIS웹서버를 사용하고, PHP를 별도로 추가 설치한 후 IIS에 매핑을 해주면 되니까요. 두 언어 모두 MSSQL이나 Oracle 또는 MySQL에 접근하는 방식만 다를 뿐 기존 데이터베이스를 얼마든지 이용가능합니다.

그런데 ASP로 구축된 회원로그인과 같은 기능은 PHP와 통합하기 어렵죠. ASP에서 인증을 처리하고 세션을 생성해도 PHP에서는 가져다 쓸 수 없으니까요. 약간의 꼼수로 ASP세션을 파일이나, DB에 넣어두고 PHP가 그때 참조하도록 조치할 수 있겠지만 복합한 비지니스 환경에서 보안적 위협을 무릎쓰고 그렇게 할 수 는 없는 노릇입니다.

반대로 PHP와 ColdFusion, 또는 PHP와 JSP는 어떨까요? 한가지 확실한건 Resin을 만든 Caucho의 Quercus와 같은 Java로 만들어진 PHP해석기 때문에 PHP로 만들어진 웹어플리케이션이 Quercus에서 구동이 보장되는 호환성만 갖추었다면 J2EE기반의 어떤 언어 가령 JSP나 ColdFusion과는 Session 데이터를 서로 공유할 수 있습니다. 물론 ColdFusion 중 BlueDragon이란 .NET기반으로 만들어진 WAS을 사용한다면 닷넷과도 공유는 가능할 지 모르겠습니다.

이질적인 언어들간의 세션공유는 보안적측면을 떠나서 메모리상에서만 존재하는 데이터에 대한 상호공유의 문제이므로 완벽한 통합과 관련이 깊다고 생각됩니다. 오늘은 JSP와 ColdFusion사이에 어떻게 세션을 공유하는지 알아보려 합니다.

ColdFusion은 잘 아시다시피 J2EE기반으로 만들어진 WAS입니다. Tomcat과 같은 Servlet부터, Resin, Glashfish, Jboss, Weblogic 등등 대부분의 J2EE기반의 WAS에 통합되어 사용됩니다. 따라서 설정의 문제이지 기본적으로 JSP를 구동할 수 있는 환경이 자동으로 조성됩니다.

문제는 단독으로 JSP나 또는 ColdFusion을 사용하는 경우라면 문제가 없겠지만 기존의 JSP/Servlet기반의 어플리케이션에 ColdFusion을 도입하려 한다면 기존의 J2EE WAS에 단순히 ColdFusion의 여러 제품들 가령, Adobe ColdFusion이나 Railo, Open BlueDragon 같은 것을 Deploy하기만 하면 됩니다.

문제는 ColdFusion을 Deploy하여 JSP와 ColdFusion을 단일 J2EE WAS내에서 구동되게 하였어도 Session이 통합되지 않으면 로그인 인증처리 등등에서 문제가 생길 수 있습니다. 

자, 먼저 JSP에서 세션을 생성하고 그 세션을 ColdFusion에서 가져와 봅시다. JSP세션이 살아있는 동안은 ColdFusion에서 참조할 수 있지요. 여기서 몇가지, 우선 JSP세션을 가져와서 단순히 이용만할 것인지(JSP세션이 사라지면 ColdFusion에서도 참조할 수 없음) 아니면 JSP세션을 가져와서 ColdFusion내에서 세션을 한번 더 생성하여 JSP세션의 존재유무와 상관없이 ColdFusion에서는 생성된 세션을 계속 이용하는지의 여부를 생각할 수 있습니다. 어떠한 경우든 상관없이 문제는 생성되는 JSP세션을 ColdFusion이 정확하게 인식해야 한다는 것 입니다.

 

JSP에서의 세션이 아직 생성되지 않은 화면을 ColdFusion화면(새창)에서 조회해 본 화면
JSP에서 생성한 세션데이터 "JSP가 만든 세션"을 ColdFusion화면에서 가져온 화면

이제 간단한 소스를 살펴보죠. JSP에서는 3가지로 간단하게 세션을 조회하는 index.jsp파일과 세션을 생성하는 create_session.jsp과 세션을 제거하는 remove_session.jsp입니다. 매우 간단한 코드입니다. 그리고 ColdFusion에서는 메모리 영역에 존재하는 세션데이터를 가져오는 코드입니다.  

 

index.jsp

<%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

<% 
	String myStr;
	if(session.getAttribute("myVar")!=null) {
		myStr=(String)session.getAttribute("myVar");
	} else {
		myStr="세션값 없음";
	}
%>

세션값 : <%=myStr%>

create_session.jsp

<%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<% session.setAttribute("myVar", "JSP가 만든 세션");%>

remove_session.jsp

<%@page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<% session.invalidate();%>

get_session.cfm

<!--- Java객체생성 --->
<cfset htreq=createObject("java","javax.servlet.http.HttpServletRequest")>
<cfset htsess=createObject("java","javax.servlet.http.HttpSession")>
<cfset jumap=createObject("java","java.util.Map")>

<!--- 세션가져오기 --->
<cfset htreq = GetPageContext().getRequest()>
<cfset htsess = htreq.getSession()>
<cfset jumap = htsess.getAttribute("myVar")>

<!---세션값 출력 --->
<cfoutput>#jumap#</cfoutput>

 

ColdFusion 서버들은 Java기반의 여러 응용서버위에 적용되므로 이렇게 완벽하게 세션데이터를 공유할 수 있습니다. 고로 기존에 JSP나 Java로 짜여진 시스템이 있더라도 ColdFusion으로 확장이 가능하답니다.

Posted by nooree nooree 트랙백 0 : 댓글 0

댓글을 달아 주세요