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 Session Sharing
<JSP의 세션이 아지 생성되지 않은 화면>

JSP ColdFusion Session Sharing
<JSP에서 생선된 세션을 ColdFusion에서 가져온 화면>

 

먼저, 세션의 유무를 확인하는 소스코드가 들어간 첫페이지(index.jsp)를 살펴봅니다. 소스코드 참조.

 

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%>

 

그리고 세션을 생성하는 jsp파일(create_session.jsp)와 세션을 제거하는 jsp파일(remove_session.jsp)의 소스코드를 살펴보세요.

 

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();%>

 

마지막으로 ColdFusion에서는 다음과 같이 JSP가 생성한 세션을 가져올 수 있습니다. JSP세션이 파괴되면 아무런 값을 가져올 수 없습니다. JSP세션주기에 따라 ColdFusion에서 어플리케이션을 제어할 수 있게되는 셈인데, JSP세션이 생성되고 (만약 이 세션이 정상적인 로직에 의해 생성된 것이라면) ColdFusion에서 이를 확인한 후 다시, ColdFusion내에서 같은 값으로 ColdFusion세션을 생성하여 활용할 수도 있겠죠? 다만 이 경우엔 JSP의 세션주기와는 무관하게 작동하므로 이를 주의할 필요는 있어 보입니다.

기본적으로 ColdFusion에서는  GetPageContext().include("hello.jsp"); 와 같이 JSP페이지를 인클루드할 수 있습니다. 이때 세션정보도 같이 인클루드 되므로 JSP에서 세션이 생성되지 않았다면 이 코드가 실행되는 ColdFusion페이지에는 세션정보가 전달되지 않습니다. 하지만 이렇게 인클루드할 경우 JSP파일을 인클루드하는 ColdFusion페이지를 제어하기 약간은 곤란합니다.(경험상 보면 JSP세션이 생성된 경우 세션값이 그대로 노출.) 따라서 다음과 같이 ColdFusion에서 JSP세션을 가져오는 것이 안전합니다.

 

get_jsp_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>

 

어떤가요? 뭐 JSP나 ColdFusion을 모르시는 분들이야 이게 뭔소리래? 하시겠지만 우선적으로 동일한 J2EE기반의 이질적인 언어지만 같은 J2EE란 베이스를 가지고 있으므로 좀더 간결하고 쉽고 개발편의성을 제공하면서도 Java의 기능을 사용할 수 있는 ColdFusion으로 확장이 좀 쉬어지지 않을까 생각합니다. ^^

참조 : 

 

 

There are no comments yet. - 아직 댓글이 없습니다.

Leave a Comment

Leave this field empty:




Powered by

© 2010-2018 NOOREE.COM