Entries Tagged as Installation

Adobe ColdFusion 10에서는 이전 버전과  다르게 Apache Tomcat을 서블릿 엔진으로 쓰고 있어서 Apache web서버와의 연동이 mod_jk로 이루어집니다. (이전에 일반적인 Tomcat과 Apache의 연동과 동일)

다만, ColdFusion 10 설치 시 Installer가 자동으로 연동을 해주므로 사용자가 딱히 할 일은 없습니다. 이전 버전에서는 ColdFusion관리자 접속경로인 /CFIDE 디렉토리를 반드시 웹루트에 설치해 줘야 했지만 ColdFusion 10부터는 mod_jk에서 자동으로 Alias  연결을 해줍니다.

즉, 이전버전에서는 설치 시 서버에 여러 웹 호스트가 존재할 때 특정 호스트에 /CFIDE 이하의 디렉토리를 설치할 웹호스트를 지정하라고 나타나지만 ColdFusion 10에서는 기본 ColdFusion 10의 설치경로 내부의 /CFIDE 디렉토리를 웹서버에 매핑을 해줘서 아무 호스트에서나 접속이 가능해 졌습니다.

다만, 보안을 위해 신규로 추가된 기능이 있는데 ColdFusion관리자를 접속할 수 있는 IP주소를 지정할 수 있는 기능이 추가되었습니다. 접속자체를 막는 것은 아니고 로그인 시 튕겨버립니다. 아예 로그인화면 자체를 보이지 않았으면 더 좋았을 거 같습니다. 기본적으로 설치할 때 1개의 IP를 지정하지만 이후 /CFIDE/administrator 경로로 접속하여 관리자모드에서 추가할 수 있습니다.

설치 이후 <cfimage>태그에서 동적으로 image를 생성하여 화면에 뿌릴 때 동적 경로가  CFFileServlet 경로를 사용하는데 이 경로는 실제로 웹 루트에 존재하는게 아니고 ColdFusion 10 설치 경로내부에 존재합니다. 이전 버전에서는 Jrun의 매핑에 자동으로 추가되어 실제로 이런 작업을 할 일이 없었습니다만..

잔손이 많이 가는 Tomcat이므로 이 부분이 빠져버렸습니다. 즉, 수동으로 변경해줘야 합니다. 가령 사용자의 스팸을 막기 위해 CAPTCHA라고 하는 동적 이미지 비밀번호 입력기능을 쓸 때 이 이미지가 브라우저가 로드 될 때마다 바뀌게 됩니다. 이 이미지의 실제 경로는 Linux의 경우라면 /opt/coldfusion10/cfusion/tmpCache/CFFileServlet/_cf_captcha 하위에 png로 존재하는데 이 경로는 웹에서는 직접 연결할 수 없으므로 Tomcat에 매핑을 해야 합니다.

Ubuntu 시스템에서 ColdFusion 10을 설치하게 되면 다음과 같은 기본 경로에 설치됩니다.

ColdFusion 10 기본설치 경로 : /opt/coldfusion10/
ColdFusion 10 실행파일의 경로 : /opt/coldfusion10/cfusion/bin/coldfusion
mod_jk의 경로 : /etc/apache2/mod_jk.conf

먼저 mod_jk.conf를 수정합니다. 이 파일을 vi에서 열어서 다음의 매핑 코드를 추가합니다.

# Load mod_jk module
LoadModule    jk_module  "/opt/coldfusion10/config/wsconfig/1/mod_jk.so"

# Where to find workers.properties
JkWorkersFile "/opt/coldfusion10/config/wsconfig/1/workers.properties"
JkMountFile "/opt/coldfusion10/config/wsconfig/1/uriworkermap.properties"

# Where to put jk logs
JkLogFile "/opt/coldfusion10/config/wsconfig/1/mod_jk.log"

# Where to put jk shared memory
JkShmFile "/opt/coldfusion10/config/wsconfig/1/jk_shm"

# Set the jk log level [debug/error/info]
JkLogLevel info

# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
AddHandler jakarta-servlet .cfm .cfml .cfc .cfr .cfswf

Alias /CFIDE "/opt/coldfusion10/cfusion/wwwroot/CFIDE"
<Directory "/opt/coldfusion10/cfusion/wwwroot/CFIDE">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

############################### 이하 추가 ################################
Alias /CFFileServlet "/opt/coldfusion10/cfusion/tmpCache/CFFileServlet"
<Directory "/opt/coldfusion10/cfusion/tmpCache/CFFileServlet">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
##########################################################################

<Files ~ ".hbmxml$">
Order allow,deny
Deny from all
</Files>

기본적으로 Alias에 /CFIDE가 매핑되어 있는 것을 알 수 있을 겁니다. 그 아래 부분에 추가한 후 ColdFusion 10과 Apache를 재시작 해 줍니다.

예전의 블로그에서도 언급한 적이 있습니다만, 메모차원에서 다시 다루어 봅니다.

ColdFusion과 같은 JVM기반 WAS에서 SSL보안인증서가 탑재된 외부 HTTPS 호출을 할 경우 해당 웹서버의 SSL보안인증서를 ColdFusion 서버에 등록해야 합니다. 가령, CFHTTP태그로 어떤 데이터를 원격지의 서버에 POST전송하는 경우 원격지의 서버가 HTTPS로 수신한다면 해당 웹서버의 SSL보안인증서의 인증서(cer파일)를 등록해야 합니다. 이는 Adobe ColdFusion 전 버전에 영향을 받습니다. (Railo/OpenBD에서는 영향을 받지 않습니다.)

특히 SMS문자메시지전송, 카드결제 등의 웹어플리케이션을 구현하는 경우 SMS문자메시지 수신 웹서버나 카드결제대행사의 웹서버가 HTTPS방식만 지원하는 경우는 특히 중요합니다. ColdFusion에서 영향을 받는 태그는 CFHTTP, CFDOCUMENT, CFLDAP 등이 있습니다. 참고로 인증서파일이 기간만료되었거나 파기된 경우 다시 등록해 주어야 한다는 점 잊지 마시길 바랍니다.

Reference : http://helpx.adobe.com/coldfusion/kb/import-certificates-certificate-stores-coldfusion.html

우선 자신의 ColdFusion Server 설치옵션에 따라 그리고 JVM의 위치에 따라 경로가 다를 수 있습니다. 서버에 JDK나 JRE를 별도로 설치하고 ColdFusion의 기본 JVM위치를 별도로 추가한 JVM의 경로를 사용했다면 해당 JVM의 keytool를 이용해야 합니다만, 별도의 설치된 JVM이 있어도 대부분의 경우 ColdFusion은 내장 JVM을 사용하므로 다음과 같이 ColdFusion이 설치된 경로내의 keytool을 이용하면 됩니다.

cf_root/runtime/jre/bin

그리고 해당 웹서버의 인증서파일은 브라우저 등을 통해 쉽게 다운로드 할 수 있는데 X.509방식으로 인증된 DER포맷의 CER파일이여야 합니다. 이 파일을 다음의 경로에 kㄷytool을 이용해 임포트 한 후 ColdFusion을 재시작해 주면 됩니다.(멀티서버 방식이나 기타 방식으로 ColdFusion이 설치된 경우는 해당 경로를 위 레퍼런스 문서를 참조하여 변경하세요)

cf_root/runtime/jre/lib/security/cacerts

하나씩 예를 들어 해보도록 합니다.

가령 nid.naver.com으로 본인의 ColdFusion 서버에서 어떤 데이터를 전송해야 하는데 nid.naver.com이 HTTPS연결만 허용한다고 가정합니다. 이런 경우 CFHTTP태그를 써서 어떤 데이터를 보내더라도 CFML의 실행은 정상이지만 어떠한 데이터도 전송되지 않습니다.

이유는 nid.naver.com의 인증서가 내 ColdFusion서버내의 JVM에 등록되어 있지 않기 때문에 보안설정상 전송이 되지 않는 것 입니다. 따라서 nid.naver.com의 인증서를 등록해 줘야 하는 것이죠. 간단하게 아래 그림과 같이 CER파일을 생성하여 이 파일을 내 ColdFusion서버에 업로드 한 후 ColdFusion 내장 JVM의 keytool을 이용해 임포트합니다. (여기서는 크롬브라우저를 사용했으나 대부분의 브라우저에서 인증서내보내기 기능을 지원하고 있습니다.)

 

Import certificates in ColdFusion
<브라우저에서 자물쇠 모양을 클릭하여 인증서 정보를 열람합니다.>

Import certificates in ColdFusion
<인증서 정보창에서 [자세히] 텝부분의 [파일에 복사]를 클릭합니다>

Import certificates in ColdFusion
<인증서내보내기 마법사가 실행됩니다>

Import certificates in ColdFusion
<DER로 인코딩된 X.509바이너리 CER파일을 선택합니다>

Import certificates in ColdFusion
<적당한 경로에 적당한 이름으로 CER파일을 저장합니다>

Import certificates in ColdFusion
<마침버튼을 눌러 인증서내보내기를 완료합니다>

 

여기에서 예로 들은 naver.cer 파일을 자신의 ColdFusion서버에 임의의 경로에 업로드합니다. 이제 Shell화면에서 keytool을 이용해 인증서를 등록해 봅시다. Windows Server환경에서는 동일한 keytool의 명령어를 명령프롬프트에서 입력하거나 아래 그림처럼 간단하게 GUI JVM관리자 패널에서 등록해 줄 수도 있습니다. 

Import certificates in ColdFusion
<Windows Server에 설치된 ColdFusion 설치경로내의 JVM제어판을 실행한 후 [보안]-[인증서] 선택>

Import certificates in ColdFusion
<[가져오기]항목으로 CER파일을 임포트합니다>

 

Windows에서는 위와 같이 편하게 할 수도 있지만 Linux 환경에서는 Shell을 이용합니다. 가령 naver.cer파일이 /home/naver.cer 과 같이 업로드되어 있고 ColdFusion의 기본설치 경로가 /opt/coldfusion9/ 라면 다음의 경로로 이동하여 keytool을 사용합니다. 이때 naver.cer 인증서가 임포트 될 파일은 다음과 같습니다.

keytool의 경로 : /opt/coldfusion9/runtime/jre/bin/keytool
cacerts의 경로 : /opt/coldfusion9/runtime/jre/lib/security/cacerts

위 위치로 이동하여 다음과 같은 쉘명령을 수행합니다. 

./keytool -import -v -alias naver-cert -file /home/naver.cer -keystore /opt/coldfusion9/runtime/jre/lib/security/cacerts -storepass changeit

위 명령에서 naver-cert 부분은 임의대로 지정한 문자열입니다. 편의대로 지정합니다. 경로에 잘 맞추워 명령했다면 오류없이 등록될 것입니다. 자, 이제 ColdFusion Server을 재시작해 줍니다. CFHTTP태그 등의 소스를 이용하여 정상적으로 해당 웹사이트에 데이터를 전송하는 지 확인해 봅니다.

ColdFusion을 공부하려면 당연한 이야기이겠지만 자신의 PC에 ColdFusion Server을 설치해야 합니다. 때에 따라서는 Apache와 같은 웹서버도 설치해야 하고, MySQL과 같은 DB Server도 설치해야 합니다. 더욱이 Railo, OpenBD를 같이 공부하려면 전부 설치해야 하는데, 그러면 PC가 상당히 무거워지고 각 서버간 충돌로 인하여 제대로 작동이 안될 때도 있습니다. 그래서 Railo와 OpenBD는 Jetty를 이용한 무설치버전을 제공합니다. 간단하게 다운받아 압축을 풀고 안의 실행파일만 실행하면 자동으로 Railo나 OpenBD가 실행되는 것이지요. Railo와 OpenBD의 무설치버전은 각각 해당 공식 웹사이트의 다운로드 메뉴에서 찾을 수 있습니다. Railo ExpressReady2Run Jetty+OpenBD이 바로 그것이죠. 자신의 운영체제와 32/64 아키텍쳐에 맞는 버전을 다운로드 하시면 됩니다.(또한 CFServerUSB와 같은 프로젝트도 있습니다.)

하지만, 불행하게도 Adobe ColdFusion은 이런 무설치 버전을 제공하지 않고 있습니다. 여러 이유가 있겠지만 Adobe ColdFusion은 많은 오픈소스 라이브러리들을 내장하고 있어서 분리가 어려울 수 있거나, 사용자의 시스템마다 환경이 달라 정상적으로 작동하지 않을 수 있기 때문에 따로 제공을 하지 않을 뿐 무설치버전을 만드는게 불가능한 것은 아닙니다.

오늘은 간단하게 Jetty에 Adobe ColdFusion 9(Windows 32Bit)를 적용하여 무설치버전을 만들어 보겠습니다. USB 등에 간단하게 넣어다니면서 Adobe ColdFusion을 경험하거나 개발/테스트할 수 있습니다. 물론 MySQL과 같은 DB Server는 적용하지 않을 것이지만 Adobe ColdFusion 내장 Apache Derby와 같은 DB를 이용할 수 있거나, Local 또는 Remote환경에서 제공하는 DB Server에 얼마든지 연결할 수 있기에 개발하는 데에는 큰 어려움은 없을 것 입니다. 자, 이제 필요한 준비물을 알아볼까요?  

Preparations :

jPortable (Portable JDK)
Adobe ColdFusion 9 Developer Edition (Windows 32bit)
Jetty

우선 위 파일들을 모두 PC에 다운로드 합니다. 기본적인 순서는 제일 먼저 Jetty의 압축을 풀고, jPortable을 이용해서 Jetty 디렉토리 내부에 JDK를 설치할 것 입니다. 그런 다음 Jetty의 구동 여부를 확인한 다음, ColdFusion을 Jetty에 적용하면 모든 과정이 끝납니다.

Windows에서는 내문서 디렉토리에서 작업을 하지 말고, C:\나 D:\에서 작업하시길 바랍니다. 작업의 편리성을 위해 C:\cfusion 이란 디렉토리를 만들고 작업을 시작합시다. 이  cfusion 디렉토리를 USB에 담아 다니면서 사용할 것 입니다.

Jetty의 설치

우선 Jetty의 압축을 cfusion에 모두 풀어 줍니다. 이때 cfusion에 바로 풀어서 C:\cfusion\jetty 이런식으로 풀지말고 C:\cfusion안에 바로 Jetty의 파일들이 보이도록 합니다. 이 상태에서 Jetty를 실행하면 시스템에 이미 JDK가 설치된 경우 해당 JDK를 이용해서 Jetty가 구동되겠지만 그렇지 않을 경우 오류가 날 것입니다. 그래서 우리는 어떤 시스템에 JDK가 미리 설치되어있던 안되어있던 구동할 수 있게 Jetty용 JDK를 따로 설치할 것 입니다.

jPortable의 설치

위에서 다운로드한 파일 중 jPortable을 실행하여 C:\cfusion\java 의 경로에 JDK를 설치하도록 합니다. 그럴려면 C:\cfusion안에 미리 java라는 디렉토리를 만들어 놔야 하겠죠? 설치과정은 어렵지 않습니다. 한글로 지원되며, 설치폴더를 지정하는 화면에서 찾아보기 버튼으로 C:\cfusion\java을 지정하면 끝 입니다. 설치가 종료된 후 C:\cfusion\java안에 보시면 JDK의 파일들이 들어있는 것을 확인할 수 있습니다.

자 Jetty와 jPortable의 설치는 끝났습니다. 설명만 길다 뿐이지 사실 별 내용아닙니다. 이제, 약간은 어려운 과정이 남았습니다. Jetty로 하여금 자기 디렉토리내에 있는 JDK(방금전의 java디렉토리)만을 이용하게 구동파일을 하나 만들어 보겠습니다. 기본적인 Jetty 디렉토리내의 start.jar는 시스템에 설치된 JDK를 이용하므로 시스템에 JDK가 설치되지 않은 경우 실행이 안되니까요.

Jetty용 배치파일 만들기

간단하게 아래의 코드처럼 start.bat(구동용)과 stop.bat(중지용)을 만들어 봅시다. 이 두파일은 start.jar과 동일한 곳에 위치해야겠죠?

start.bat

@echo off
set LANG=ko_KR.UTF-8
set JAVA_HOME=./java
set PATH=./java/bin;%PATH%
set JAVA_OPTS=-Xmx512m

set JETTY_HOME=.
set JETTY_PORT=8080

java %JAVA_OPTS% -Djetty.port=%JETTY_PORT% -Djetty.home=%JETTY_HOME% -Dfile.encoding=UTF-8 -Duser.language=ko -Duser.country=KR -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar %JETTY_HOME%/start.jar 
rem pause

stop.bat

@echo off
rem set JAVA_HOME=./java
set JAVA_HOME=./java
set PATH=./java/bin;%PATH%
set JETTY_HOME=.

java -DSTOP.PORT=8079 -DSTOP.KEY=secret -Djetty.home=%JETTY_HOME% -jar %JETTY_HOME%/start.jar --stop
rem pause

위처럼 Windows bat파일을 만들고 난뒤, start.bat을 실행하여 http://127.0.0.1:8080 으로 접속이 되어 Jetty가 실행되는지 확인해 봅니다. 물론 stop.bat도 실행하여 중지되는지 확인해 봅니다. 어렵지 않게 만들 수 있겠죠?

Adobe ColdFusion 9 설치(WAR파일생성)

자, 이제 마지막 Adobe ColdFusion을 설치할 차례입니다. 아니, 아까 무설치한다고 하지 않았습니까? 라고 반문하시는 분 분명 있을것 같습니다. Adobe ColdFusion은 Server의 비밀번호 등을 설치과정중에 지정하므로 미리 WAR타입의 아카이브 파일을 배포할 수 없습니다. 그래서 일반 설치와 동일하게 설치를 진행하는 과정으로 WAR파일을 생성하여야 합니다. 물론 WAR파일 생성한 후엔 제어판의 프로그램 추가/삭제 메뉴에서 Adobe ColdFusion은 지워버리셔도 상관 없습니다. 우리가 필요한 건 cfusion.war 파일이니까요. 

Adobe ColdFusion Installation

설치과정 중에 위와 같은 화면에서 설치 옵션을 맨 마지막의 J2EE Configuration을 선택하고, WAR File을 지정하면 됩니다. 간단하게 위 화면을 설명하자면 맨위 Server configuration옵션은 가장 일반적인 설치방법으로 ColdFusion서버를 시스템에 설치하는 옵션이고, 두번째 Enterprise Multiserver configuration의 경우는 웹호스팅 환경처럼 여러 가상호스트별로 독립인스턴스를 가지는 독자적인 ColdFusion 설치옵션으로 실제 개발단계나 일반 PC에서 설치하는 옵션은 아닙니다. 마지막 J2EE configuration의 경우는 ColdFusion을 이미 시스템에 설치된 J2EE서버들 예를 들어 Tomcat, Jetty, JBOSS, Resin, GlassFish, WebLogic 등에 적용(deploy)하여 서비스하려는 옵션인데 여기서는 Jetty를 이용한 것이 되겠죠.  즉 Jetty에서 이용할 WAR파일을 만들어 낸다는 의미입니다. 

Adobe ColdFusion Installation

자, 다음버튼을 누르면 위 그림처럼 ColdFusion자체의 부가설치항목이 나오는데 아래의 그림 처럼 모두 해제하고 설치합니다. 검색엔진들인 Apache Solr과 Verity, ODBC커넥터, 영문문서 등이 설치되는 옵션인데 검색엔진들의 경우 실제 활용도는 검색엔진을 만들지 않는 한 필요가 없고, DB의 경우 JDBC를 이용하므로 ODBC는 필요가 없습니다. 영문 문서 역시 Adobe웹사이트에서 동일한 내용을 얼마든지 조회할 수 있으므로 따로 설치할 필요는 없겠죠?

설치 마지막으로 위 그림의 다음 화면에서 관리자용 비밀번호 지정하는 화면이 나오는데요 본인이 지정한 임의의 비밀번호를 반드시 기억하시길 바랍니다. 나중에 관리자모드에 접속할 때 필요합니다. 또한 RDS와 같은 옵션은 해제하여 설치하시길 바랍니다.

모든 설치 과정이 완료되면 C:\ColdFusion9 란 디렉토리가 생성되고, 안에 cfusion.war 파일이 보일 것 입니다. 이 파일이 Jetty에 적용할 파일입니다. 위에서도 언급했지만 이 파일을 따로 보관하고 있다가 나중에 Tomcat이나, 실제 서비스용으로 구동중인 WebLogic 등에 적용할 수 있습니다. (즉, J2EE용 cfsuion.war 파일을 매번 만들기 위해 매번 설치과정을 거칠 필요는 없겠죠?)

Jetty에 cfusion.war 적용하기

Jetty를 기본적으로 실행하면 test.war가 실행되어 브라우저 화면에 나타납니다. 따라서 기본 인스턴스를 삭제하고 ColdFusion만 나타나게 하려면 우선 Jetty의 구동을 중지한 다음, Jetty 디렉토리내의 webapps내의 test.war 파일과 contexts 디렉토리내의 모든 내용을 삭제해야 합니다.

그런다음 이제 webapps 디렉토리안에 cfusion.war 파일을 복사하고, Zip압축해제기(Winzip, Winrar 등등)으로 강제로 cfusion.war 파일을 webapps안에 풀어줍니다. 즉, webapps안의 구조는 아래 그림과 같이 하나의 cfusion.war 파일과 그것의 압축해제된 cfusion 디렉토리가 존재하겠죠?

Jetty cfusion.war

C:\cfusion\webapps\cfusion 의 경로에는 CFIDE, META-INF, WEB-INF, crossdomain.xml 가 존재하게 됩니다. 이제 모든 과정의 마지막 작업인 Jetty에게 cfusion.war의 context를 지정해 줄 차례입니다. 즉 Jetty에게 기본 컨텍스트는 cfusion이고 이때 webapps의 cfusion.war를 참조할것과 기본 홈디렉토리는 webapps안의 cfusion이라는 것을 지정해 주는 것 입니다. (중요한 것은 war파일명과 webapps안의 디플로이된 디렉토리명이 같아야 한다는 것 입니다.)

위 그림에서 보듯 C:\cfusion안의 contexts 디렉토리안에 webapps에 디플로이된 war파일과 동일한 cfusion.xml을 만들고 아래와 같이 내용을 정의합니다.

cfusion.xml

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/cfusion.war</Set>
    <Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/cfusion</Set>
</Configure>

모든 과정이 끝났습니다. 자, 이제 start.bat 파일을 실행한 후 http://127.0.0.1/CFIDE/administrator/ 를 입력하면 Adobe ColdFusion 관리자가 나오시나요? Adobe ColdFusion을 설치하여 WAR파일을 생성하는 과정에서 임의 지정한 관리자 비밀번호를 넣고 로그인하면 Adobe ColdFusion관리자 화면을 보실 수 있을 것 입니다.

마무리

Portable Adobe ColdFusion Server를 만드는 것은 설명만 장황하지 실제 Tomcat 등에 WAR패키지를 적용해 본 경험이 있다면 쉽게 이해할 수 있으실 겁니다. 간단히 다시 정리하면 Adobe ColdFusion Server에서 WAR파일을 생성하여 cfusion.war 파일을 얻고(이후 이 파일만 잘 보관하고 있다가 적용하면 됩니다.) 이를 J2EE 서버에 적용하는데, Jetty에 적용해서 Jetty를 포터블용으로 만들어서 USB 등에 넣어두고 언제 어디서나 ColdFusion 실행환경을 만드는 과정을 설명 드렸습니다. 

참고로, 여기에 적용된 Adobe ColdFusion은 Developer Edition이므로 최대 10개의 IP 커넥션만 허용됩니다. 하지만 개발하는데 이 제한 말고 어떠한 제한도 없이 상용서버와 동일하게 기능을 제공하므로 쉽고 빠르게 웹어플리케이션을 개발할 수 있겠죠?

Powered by

© 2010-2018 NOOREE.COM