Entries for month: November 2009



Railo 3.1.2 업데이트
Category : Railo Comments : 댓글쓰기 Posted by 장창학 at 12:23 AM

Railo가 3.1.2로 업데이트 되었습니다. 이전 버전에 비해 몇가지 달라진점은 우선 기반 J2EE서버가 Resin 3.1.9로 바뀌었습니다. 그리고 서버관리자모드의 지원언어에 독일어가 추가되었고 로그인 시간옵션이 추가되었습니다. 그외로 사용자장의 태그의 확장지원,  캐시엔진지원 등 소규모 업데이트가 있습니다. 현재 Railo를 운영중이라면, 서버관리자에서 업데이트 메뉴를 통해 업데이트할 수 있으며, 자동으로 업데이트되도록 설정되어 있다면 아마 업데이트 되어 서버관리자 로그인화면 부터 바뀌어 있을 겁니다.

기타 자세한 사항은 Railo 블로그를 참조하세요. : http://www.railo.ch/blog/index.cfm/2009/11/26/Release-notes-Railo-312


ColdFusion으로 MySQL 테이블을 최적화 하기
Category : ColdFusion , Database Comments : 2 Comments Posted by 장창학 at 5:32 PM

mysql phpmyadmin웹프로그래밍에서 주로 많이 쓰이는 DB Server는 MySQL을 많이 쓰고 있습니다. 어떤 DB서버나 마찬가지로 데이터의 입출력(입력 및 삭제)이 많아지다 보면 테이블에 부담이 가기 시작하는데요. 우리가 흔히 쓰는 PHPMyAdmin으로 관리를 하다보면 심심치 않게 외쪽과 같은 메시지를 볼 수 있습니다.

물론, PHPMyAdmin으로 최적화를 할 수 있지만, 그냥 ColdFusion을 이용하여 만든 웹사이트라고 가정하고, 간단하게 관리자모드 등에서 전체 테이블을 최적화하려면 다음과 같이 할 수 있습니다.

<cfdbinfo type="tables" datasource="DSN이름" name="mysqlSet">
<cfset tableslist = valuelist(mysqlSet.table_name)>
<cfquery datasource="DSN이름" name="mysqloptimise">
     OPTIMIZE TABLE #tableslist#
</cfquery>

cfdbinfo태그로는 해당 DSN(Data Source Name)의 모든 MySQL Table의 목록을 가져옵니다. 그런다음 valuelist함수로 목록화(List)한 다음, cfquery태그로 최적화하는 OPTIMIZE TABLE 구절의 SQL구문을 실행하게 됩니다. 어때요? 간단하죠?


Hack my CF - 간단하게 보안위협요소를 검사
Category : ColdFusion , Securities Comments : 댓글쓰기 Posted by 장창학 at 11:02 PM

몇몇 유용한 ColdFusion component를 개발해서 다소 비싼가격에 팔고 있는(?) Foundeo에서 웹상에서 자신의 ColdFusion의 위협요소를 간단하게 살펴볼 수 있는 Hackmycf하는 사이트를 오픈했씁니다. 자신의 ColdFusion이 설치된 웹사이트 주소를 입력하고 검사하면 검사결과를 이메일로 전송해 줍니다.

그런데, 아마 대부분의 ColdFusion웹사이트에서 Critical 요소가 나올 겁니다. 바로 ColdFusion엔진 자체의 디버깅 오류메시지 페이지 때문인데요, Adobe ColdFusion이나 Railo의 웹관리자 페이지에서 error페이지에 대한 템플릿을 간단한 페이지로 제작하여 지정하거나, 해당 템플릿을 수정하여 서버정보 및 소스정보가 최소한의 노출되도록 조절해야 할 것 같습니다. 이외 Adobe ColdFusion 8 이상의 버전에서는 FCKeditor(현재의 CKEditor)의 패치를 반드시 하시길 바랍니다.

http://www.adobe.com/support/security/bulletins/apsb09-09.html


Blog를 VPS로 옮겼습니다. 돌아가시겄습니다.ㅋ
Category : Miscellaneous Comments : 댓글쓰기 Posted by 장창학 at 3:41 PM

지난 10월까지 Cafe24의 웹호스팅을 이용하다가, 회사의 우분투 서버로 단독이전했는데, 어떤 사정으로 다시 홈페이지를 옮겨야 하는 상황이 되어 제 블로그와 몇개의 웹사이트가 갈곳이 없어졌습니다.

고민끝에 Cafe24의 VPS 가상서버를 신청하고 옮기느라 좀 접속불안이 있었습니다. 역시나 우분투의 편리함에 놀다가 CentOS를 쓰자니 해줘야 하는것이 하나같이 복잡 & 짜증이더군요. 일단 Iptables 지정해주고, JDK를 깔고, APM은 그냥 YUM으로 깔고..

여기까지는 좋았는데, Railo Resin을 깔때부터 삽질의 연속이였습니다. 결론은 yum install apr-devel을 먼저해야 하더군요. 아파치의 apxs를 이용해서 컴파일하는데 어떤 파일을 로드할 수 없다면서 계속 컴파일 실패.. 하다가 설치가 편리한 VIviotech에서 배포하는 Railo설치본을 깔았더니 설치는 한방에 성공했는데.. 문제는 제 블로그의 SES URL이 안되더군요. 아우.. 짜증연발.. 역시 Tomcat은 구리구나..ㅋ 느꼈습니다.

Resin에서는 아무런 설정없이도 apache의 mod_rewrite를 적용하거나 또 망고블르고 사용자가 복잡스레 정규표현식으로 URL을 지정해 주지 않아도 되는데, 이놈의 톰캣은.. 역시.. 실패..

그래서 다시 Railo Resin 설치도전하다 구글링에서 힌트를 얻어 yum install apr-devel설치하고 나니 컴파일이 되더군요. 원인은 대강보니 CentOS의 레포지스트리에 내장된 Apache가 버그가 있다고 하네요. 아우.. 씨발.. 진짜 욕나오네..이놈의 쎈토스..ㅋ

진짜 솔직히 우분투로 뭐 컴파일하거나 설치하면 거의 100에 1번 오류날까 말까 합니다. 매뉴얼대로 잘되죠.. 그러나 이놈의 레드햇복사판들은 10에 9은 오류를 뿜어 대니..ㅋ 매뉴얼대로 해도 안되는 이유는???????

암튼 새로이 또 터전을 옮겼습니다. 힘들게.. 이젠 홈페이지 이사도 일반 가정집 이사만큼 힘드네요..ㅋ


PHP와 Open BD가 설치된 환경에서 그누보드 PDF생성기능 만들기
Category : Open Bluedragon , ColdFusion Comments : 댓글쓰기 Posted by 장창학 at 2:03 AM

국내의 홈페이지에서 가장 많이 쓰이는 오픈소스 게시판 시스템중 하나는 그누보드(http://www.sir.co.kr/)가 아닐까 싶습니다. 가벼우면서도 필요한 기능이 다 들어 있어 인기가 높습니다. 더욱이 라이센스가 GPL를 따르고 있어 제로보드와 다르게 카피라이트를 표기할 의무가 없어 다양한 프로젝트의 일부로 사용할 수 있습니다. 국내의 오픈소스들은 저작자가 대부분 그 자체로만 이용해 주길 바라는 마음이 강해서 인지 뭐든 자기가 배포한 오픈소스에 다 넣으려는 경향이 있고,  공개를 했다고 하더라도 소스의 수정, 다른 상용 프로젝트의 일부로서의 사용은 거의 대부분 금하고 있습니다.

그래서 저는 제로보드(익스프레스엔진 포함), 킴스보드와 같은 프로젝트들은 오픈소스라고 부르지 않습니다. 그냥 제작자가 써보라고 공개한 어정쩡한 라이센스라고 말하고 있습니다. 해외의 경우 대부분 공개한 소스자체로도 사용하기도 하지만 대부분 자신이 진행하는 프로젝트의 일부를 다른 오픈소스 프로젝트를 포함하여 개발하는 경우가 많습니다. 가령, 제로보드의 기본골격은 제로보드에서 배포하지만, 어떤 프로젝트 예를 들어 웹컨퍼런싱 툴의 일부분으로서 제로보드를 사용하는 개념입니다. 물론 제로보드도 모듈을 다른 개발자가 개발하여 공개하기도 하지만 제로보드라는 테두리안에서 배포되기 때문에 사실상 완전한 공개라 볼 수 없습니다. 반드시 저작권을 표기해야 하고, 또 그 모듈을 다른 프로젝트에 쓸 경우 원작자의 동의를 또 구해야 하는 절차가 있기 때문입니다. 

암튼 각설하고, 오늘은 그누보드를 쓰고 있는 환경에서 본문 내용은 인쇄, 파일로 저장하기 위해 PDF를 생성하는 것에 대해 이야기 해 볼려고 합니다.  우선 웹호스팅 환경에서 그누보드를 사용한다면 오늘의 팁은 무의미할 수 있겠네요. 일단 PHP+MySQL만 구동되는 환경에서는 작동이 안되니까요? 왜냐하면, PDF를 생성하는 기본 프로그램이 ColdFusion이기 때문입니다. 사실 ColdFusion이 구동되는 환경이라면 그누보드와 같은 게시판을 아예 ColdFusion으로 개발해 버리면 되지만, 그렇지 못한 경우 PHP+MySQL이 구동되는 웹서버에 ColdFusion엔진만 설치해서 충분히 간단하게 ColdFusion을 사용할 수 있는 환경을 구축할 수 있기 때문입니다. 또, Cafe24의 JSP호스팅처럼 PHP와 Servlet엔진이 동시에 지원되는 환경에서도 가능합니다. Servlet위에서 구동되는 ColdFusion엔진을 쓰면 되니까요.

물론 PHP에서도 PDF를 생성할 수 있지만, 한글 폰트 문제, 성능문제, 복잡한 표나, HTML문서의 레이아웃을 그대로 PDF로 만들기는 매우 힘듭니다.하지만 ColdFusion은 iText, PD4ML, PDFBox 등의 Java PDF Library를 그대로 쓰기 때문에 몇줄의 ColdFusion코드로 쉽게 PDF를 만들 수 있습니다.

예제의 소스 코드는 다음과 같습니다. 그누보드의 글읽기 화면에서 게시판아이디인 bo_table과 게시물아이디인 wr_id를 Get으로 pdf.cfm파일로 전송하면 pdf.cfm파일 내부의 소스에서 이 두 데이터를 기초로  실제 그누보드의 게시판 테이블에 Query하여 해당 게시물의 작성자, 작성일, 이메일주소, 내용을 가져와 PDF로 생성하고 있습니다.

gnu_cfpdf.cfm - Download

<!--- Open BD의 DSN명을 입력합니다.--->
<cfset DSN = "">

<cfparam name="URL.bo_table" default = "">
<cfparam name="URL.wr_id" default = "">

<cfset BO_TABLE = PreserveSingleQuotes(#REReplace(#URL.bo_table#,   "[[:punct:]]", "", "All")#)>
<cfset WR_ID = PreserveSingleQuotes(#REReplace(#URL.wr_id#,   "[[:punct:]]", "", "All")#)>

<cfif #BO_TABLE# EQ "">
	< script>alert('게시판이 선택되지 않았습니다.');</ script>
<cfabort>
</cfif>

<cfif #WR_ID# EQ "">
	< script>alert('게시글 번호가 선택되지 않았습니다.');</ script>
<cfabort>
</cfif>


<cfcontent type="text/html; charset=utf-8">
<cfset setEncoding("URL", "utf-8")>

<cfquery datasource="#DSN#" name="getContents" debug="no">
	SELECT wr_subject, wr_content, wr_name, wr_email, wr_datetime
	FROM g4_write_#BO_TABLE#
	WHERE wr_id=#WR_ID#
</cfquery>

<cfif getContents.RecordCount EQ 0>
	< script>alert('게시물이 없습니다.');</ script>
<cfabort>
</cfif>


<cfdocument format="PDF" pageType="A4">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
< style type="text/css">
< !--
body {
	width:100%;
	font-family:Gulim, Dotum, Arial, Apple Gothic;
	color:#333;
	padding:0;
	margin:0;
	overflow:auto;
}
table, div, span {
	font-family:Gulim, Dotum, Arial, Apple Gothic;
	color:#333;
	padding:0;
	margin:0;
	overflow:auto;
}

-- >
</ style>
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
  <tr>
    <td colspan="2" style="border-bottom: 1px solid #333;" mce_style="border-bottom: 1px solid #333;">
    <cfoutput><h1><strong>#getContents.wr_subject#</strong></h1></cfoutput>
    </td>
  </tr>
  <tr>
    <td width="80"><strong>작성자</strong></td>
    <td>
    <cfoutput>#getContents.wr_name#</cfoutput> (<cfoutput>#getContents.wr_email#</cfoutput>)
    </td>
  </tr>
  <tr>
    <td><strong>작성일</strong></td>
    <td>
    <cfoutput>#DateFormat(getContents.wr_datetime, "yyyy년 mm월 dd일")#</cfoutput>
    <cfoutput>#TimeFormat(getContents.wr_datetime, "HH시 MM분 SS초")#</cfoutput>
    </td>
  </tr>
</table>
<br />
<cfoutput>#getContents.wr_content#</cfoutput>
</body>
</html>
</cfdocument>


About me

Categories

Monthly Archives

Links

Recent Posts

Recent Comments