Entries for month: December 2009



Easy find ColdFusion opensource projects - 오픈소스 콜드퓨전 소스 찾기
Category : Miscellaneous Comments : 댓글쓰기 Posted by 장창학 at 5:37 AM

ColdFusion을 공부하다보면 정말 간절한 것이 어떤 것을 구현할때 참조할 만한 모델이 되는 샘플소스가 필요한 경우가 많습니다. 비단 ColdFusion뿐만 아니라 대부분의 프로그래밍 언어를 공부할 때도 마찬가지겠지요. ColdFusion의 경우 생긴지 15년이나 되었지만 국내에서는 생소한 언어이다보니 사실 국내 프로젝트는 거의 없는 실정입니다만, 조금만 영어와 친해지면(?) 사실 원하는 대부분의 오픈소스를 얻을  수 있습니다.

자, ColdFusion의 경우 어떻게 소스들을 구해 볼 수 있을까요? 크게 2가지 경로를 추천하고자 합니다. 우선 Adobe의 ColdFusion 개발자 그룹의 지원을 받는 RiaForge와 전통의 SourceForge를 예로 들 수 있습니다.

RiaForge : http://www.riaforge.org -> ColdFusion 뿐만 아니라 ColdFusion Builder, 기타 Adobe 제품군의 다양한 오픈소스를 다운로드 할 수 있습니다.
SourceForge : http://sourceforge.net -> ColdFusion 또는 CFML로 검색하면 다양한 ColdFusion 소스를 다운로드 할 수 있습니다.

하지만 이 모든 것이 귀찮다면, Brian Rinaldi가 운영하는 블로그의 The ColdFusion Open-Source Project List를 이용해도 됩니다. 매우 편리하게 각 프로젝트의 다운로드 링크를 제공합니다. 분야별로 검색할 수 있도록 flex어플리케이션으로 정리해 두었습니다.

여기서부터 사설 ^^ ------------------------------------------------------------- :)

국내 기업이나 개발자의 경우 오픈소스 라이센스로 공개를 하더라도 사실상 오픈소스라는 것이 무색할 정도로 제한을 많이 걸어 둡니다. 원작자의 노고를 무시하는 것은 아니지만 라이센스를 표기해라, 상업용으로 쓰지마라, 너네 프로젝트내에 포함하지마라 등등... 정작 본인들은 Apache며, PHP며, MySQL과 같이 아무런 제한이 없는 소스를 마구퍼다 쓰면서 말이죠.. 이건 좀 아니라고 봅니다.

또한 국내에서는 오픈소스를 가지고 프로젝트를 진행하는 것에 대해 부끄러워하거나 마치 기술력이 없어 그런 소스를 쓰는 것처럼 여기는 풍토가 강한데, 경험상 보면 중소개발회사가 시간과 자본에 쫓겨 만든 소스보다는 공개된 소스가 더욱 안전하고 더 많은 기능을 제공합니다. 기업 및 관공서에서도 프로젝트를 오픈소스를 도입하는 것에 대한 고려가 있어야 오픈소스진영에도 수익원이 생기는 것입니다. 이건 안된다 저건 안된다 하지만 공개한다 써봐라 식의 소스는 수익을 내기 힘듭니다. 아무런 제한없이 무료로 쓰되 기술지원, 운영지원, 보안지원으로 수익을 내거나 또는 Donate 즉, 기부를 통한 수익기반이 있어야 한다고 봅니다.

그리고 소스를 찾다 보면 대부분의 웹개발자들이 요구하는 한국식 게시판소스는 없습니다. 우리나라의 "게시판"이란 어플리케이션은 사실 PC통신시절의 Perl로 된 게시판이 그 원형이 아닐까 생각합니다. 모양도 비슷하고 제목만 뽑아두고 글을 읽기위해 제목을 클릭해서 들어가는 구조와 다시 나오는 구조 그리고 하단에 숫자로 기록된 페이징 아카이브 등등.. 그 원형을 그대로 웹으로 가져온게 아마도 제로보드이고 국내 어지간한 웹사이트에서는 제로보드자체 또는 그와 유사한 게시판을 구축해서 사용해서인지 국내 웹사이트에서 게시판이 없는 사이트는 찾아보기 힘든것이 사실입니다.

제가 아는 독일인 교수님과 독일대사관의 주재원들의 이야기를 들어보면 서양인들에게 한국식 게시판은 좀 개념이 어렵다는 것이 공통된 의견입니다. 서양식 Forum에 익숙해서인지 한국식 게시판은 너무 정형화되어 있어 가장 최신의 의견이나 글에 중점을 두어 다양하고 포괄적이면 폭넓은 대화보다는 최근에 이슈화된 주제에 대해서만 궁극의 목표를 향해 이야기를 쏟아내는 것과 같다는 것이죠. 물론 중간 중간 뜬금없는 이야기가 하나둘 있지만.ㅋㅋ 반대로 국내게시판이용자에게 phpBB와 같은 Forum을 써보라고 하면 한참을 해매고 다닙니다. ㅎㅎㅎㅎ 문화적인 차이겠지요.

국내의 게시판 어플리케이션이 잘못되었다가 아니라 ColdFusion으로 그런 소스가 없다보니 ColdFusion자체에 대한 관심도도 낮지 않나 그런생각을 한 것입니다. 어찌되었던 말이 또 딴데로 빠졌는데요..ㅎㅎㅎ 외국의 경우 대부분의 소스를 아무런 제한없이 공개하는 것에 대해 국내실정을 좀 까봤습니다. 저도 회사 내부적으로 간단한 ColdFusion 게시판을 제작하고 있는데요. 곧 아무런 제한없이 공개할 예정입니다. 내년 상반기 쯤이면 가능하지 않을까..ㅋㅋ 싶습니다.ㅋ

 


ColdFusion 9로 만들어보는 웹 파워포인트(PPT) 제작 - 웹에서 만들어 PPT를 다운로드 해보자.
Category : ColdFusion Comments : 댓글쓰기 Posted by 장창학 at 3:04 AM

Adobe ColdFusion 9부터는 OpenOffice의 여러 공개 개발도구 및 라이브러리를 이용해서 웹에서 동적으로 PPT를 생성하거나, PPT를 업로드 하여 PDF로 변환하는 등 다양한 오피스문서를 생성, 변환하는 기능을 제공합니다. 물론 이전부터 Apache POI 프로젝트를 이용하여 Java와 ColdFusion의 통합으로 충분히 개발이 가능했지만 상당한 복잡스런 코딩과 실제 결과물이 그리 좋지 않는 문제점이 있었습니다. Adobe ColdFusion 9에서 지원하는 오피스문서 포맷 및 상호변환의 가능여부는 제 블로그 "ColdFusion 9에서의 PDF, SWF 그리고 Office 파일"에서 확인해 주세요.

Making Powerpoint in ColdFusion Making Powerpoint in ColdFusion

오늘은 간단하게 웹게시판 등에서 사용자가 작성한 HTML포맷을 동적으로 PPT로 생성하여 다운로드 할 수 있도록 해 보겠습니다. 예를 들어 사용자가 게시판이나 CMS에서 문서를 작성하면, DB에 저장이 되고 이 Data를 읽어 들여 PDF 또는 PPT, DOC로 생성이 가능합니다. 여기서는 간단히 PPT의 생성을 해 보겠습니다. 단, DB저장 방식이 아닌 단순히 폼으로 작성된 HTML을 내용을 PPT로 생성해 보겠습니다.

Source Code Download

index.cfm - PPT의 내용을 작성하는 폼

<cfprocessingdirective pageencoding="utf-8">

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

<!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>Making Powerpoint - 웹 파워포인트 문서만들기</title>
</head>

<body>
<strong>Making Powerpoint - 웹 파워포인트 문서만들기<strong>
<br /><br />
<cfform name="pptForm" method="post" action="makeppt.cfm">
	<cftextarea richtext="true"
					  name="content"
					  toolbar="Default"
					  fontNames="Gulim, Dotum, Malgun Gothic, Batang, Verdana, Tahoma, Arial, Courier New"
                      fontSizes="10px, 11px, 12px, 14px, 16px, 18px, 22px, 26px, 32px, 48px"
					  required="yes"
					  width="950"
					  height="650">
	</cftextarea>
	<br />
	<input type="image" src="btn_send.jpg">
</cfform>
</body>
</html>

makeppt.cfm - index.cfm에서 넘어온 Form data를 PPT로 변환하여 서버에 저장하는 파일

<cfprocessingdirective pageencoding="utf-8">

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

<cflock timeout="60">
<cfpresentation
    title="my presentation"
    format= "ppt"
    destination="#ExpandPath('./tmp/sample.ppt')#"
    backgroundColor = "white"
    overwrite = "yes">

    <cfpresentationslide  src="#ExpandPath('./tmp/sample.ppt')#" slides="1">
	<cfoutput>#FORM.content#</cfoutput>
    </cfpresentationslide>
</cfpresentation>
</cflock>

<a href="./tmp/sample.ppt">PPT 다운로드</a>
<br />
<a href="index.cfm">뒤로</a>

index.cfm파일에서 쓰인 <cfform>태그는 일반적인 <html>에서의 <form>태그와 유사한 ColdFusion만의 고유 태그입니다. 여기서 이 태그를 쓴 이유는 웹에디터(FCKeditor)를 동적으로 생성하기 위함입니다. Adobe ColdFusion 8이상의 버전에서는 웹에디터를 일일히 개발자가 배포 사이트에서 다운로드하여 웹페이지내의 Form에 적용해 주지 않아도 cftextarea richtext="true" 와 같이 <cfform>태그내에서 <cfteaxtarea> 태그의 옵션 중 richtext="true"와 같이 옵션을 주기만 하면 알아서 자동으로 FCKEditor(지금의 CKEditor)를 생성하여 적용해 줍니다. <cfform>을 쓰지 않고 일반 HTML의 <form>을 쓰려면 <textarea>에 FCKeditor와 같은 웹에디터를 수동으로 적용해 주면 됩니다.

index.cfm파일에서 원하는 대로 Table 생성이나, Image 임포트 등 다양한 문서의 양식을 만들고 전송버튼을 누르게 되면 화면에 보이는 대로 거의 80~90%이상의 동일한 모양으로 ppt를 생성해 줍니다. 100% 동일한 화면을 구현하기 힘든 이유는 사실 OpenOffice와 MSOffice문서와의 관계라고 볼 수 있습니다. OpenOffice는 표준문서포맷인데 반해 MSOffice문서를 OpenOffice에서 열면 100%동일한 양식이 전부 표현되지 않습니다. 웹 역시 DHTML이라는 표준 문서양식포맷이 있지만 이를 오피스문서내에서 로드하면 약간의 모양에 있어 100%만족스런 결과를 얻기가 좀 어렵습니다.

하지만 간단하게 표현된 양식은 거의 동일하게 변환되므로 매우 유용한 기능임에는 분명합니다. 반대로 PPT파일을 HTML문서로 변환하는 것 역시 가능합니다. 이는 다음 Post에서 다뤄보겠습니다. 파워포인트에서 HTML문서를 생성하는 방법에는 Apache POI를 이용한 pptutils라는 ColdFusion Component가 공개되어 있습니다. 물론 이 pptutils는 ColdFusion 7이전의 버전과 Railo, OpenBD등에서 사용할 수 있습니다. (Railo와 pptutils의 예제는 다음 Post에서 다뤄보겠습니다.)

makeppt.cfm 파일에서는 넘겨받은 Form data를 <cfpresentation>와 <cfpresentationslide>태그를 이용하여 PPT를 생성하는 코드입니다. 이 두 태그는 Adobe ColdFusion 8이상에서 Flash 기반의 웹 Presentation을 생성하기 위한 태그이지만 ColdFusion 9부터 PPT의 생성등 몇가지 기능이 추가되었습니다. 웹프리젠테이션을 생성하는 예제는 "CFPRESENTATION 태그로 동적 웹프리젠테이션 생성하기, 그리고 Tip"에서 볼 수 있습니다.


mod_evasive - Protect your apache from DDos attacks!
Category : Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 6:23 PM

mod_evasive는 Apache 모듈로서 간단하게 아파치 웹서버를 공격하는 DDos공격을 차단하는 모듈입니다. 하드웨어적으로 별도의 DDos방화벽을 설치하지 못하는 중소규모의 웹서버 및 소규모 VPS환경에서 비교적 효율적으로 사용할 수 있습니다. 하지만 성능이 웹서버의 성능에 좌우되므로 가장 최선의 방법은 웹서버와 별도로 하드웨어적인 DDos를 차단하는 솔루션을 고려해야 합니다. 여기서는 간단히 Apache 2.0이상의 웹서버에서 사용하는 방법을 살펴보겠습니다.

우선 mod_evasive를 다운로드합니다. http://www.zdziarski.com/projects/mod_evasive/ 에서 최신버전의 mod_evasive를 다운로드 합니다. wget으로 직접 경로를 서버상에서 받아도 되며, 다운로드후 다시 자신의 웹서버로 FTP업로드해도 상관없습니다. 가령 /home 경로에 업로드 했다고 가정합니다.

압축풀기 및 설치

tar xzvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/local/apache2/bin/apxs -iac mod_evasive20.c


Apache2 환경설정

자신의 웹서버의 httpd.conf 파일을 열어 아래를 추가합니다. 그런 다음 Apache 웹서버를 재시작 합니다.

LoadModule evasive20_module /usr/local/apache2/modules/mod_evasive20.so

<IfModule mod_evasive.c>
        DOSHashTableSize          3097
        DOSPageCount              3
        DOSSiteCount                50
        DOSPageInterval            1
        DOSSiteInterval              1
        DOSBlockingPeriod        30

        DOSEmailNotify             test@test.com
        DOSLogDir                    "/usr/local/apache2/logs/mod_evasive.log"
        DOSSystemCommand   "iptables -I INPUT -s %s -j DROP"
    DOSWhitelist                     127.0.0.1
</IfModule>


모듈설정


모듈설정에 대한 자료는 http://guni.loveyust.net/136 에서 참조하였습니다. 다만, DOSSystemCommand 를 IPTABLES로 차단하도록 명령어를 변경했습니다. 참조하세요.

- DOSHashTableSize
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정한다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다,
접속량이 많으면 이 수치를 높혀도 된다.

- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.

- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.

- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.

- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.

- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간. 이때 클라이언트는 403(Forbidden) 에러를 출력하게 된다.

- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.
주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다. 디폴트는 "/bin/mail -t %s" 이다.

- DOSLogDir
로그 파일 경로

- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.

- DOSWhitelist
차단에서 제외될 호스트
DOSWhitelist    127.0.0.1


Installing fail2ban on Centos 5
Category : Securities , Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 4:53 AM

제가 쓰고 있는 Cafe24의 VPS호스팅은 CentOS 기반입니다. 이 서버에 Fail2ban을 설치하고자 할때 보통은 yum install fail2ban 하시면 설치되지만 연결되는 저장소에 Fail2Ban이 없는 경우가 많습니다. 특히 국내 미러들은 말이죠.. 아마 거의 없다고 봐도.. 그래서 그냥 정신건강에 좋게 다음과 같이 소스를 받아다가 직접 업로드하고 설치해 봅니다.

먼저 http://sourceforge.net/projects/fail2ban/ 에서 최신 버전을 받습니다. 가장 최근 버전은 2009년 12월 24일 현재 fail2ban-0.8.4.tar.bz2 입니다. 이 파일을 자신의 서버에 업로드 합니다. root권한이 있어야 합니다. 업로드는 그냥 /root나 /home 아무대나 업로드 합니다. 예를 들어 /home에 업로드 했다고 합니다.

/home에서
tar -xjvf fail2ban-0.8.4.tar.bz2
cd fail2ban-0.8.4
python setup.py install

위 순서대로 압축을 풀고, 해당 디렉토리로 가서 파이선스크립트로 설치합니다. 그런다음, vi /etc/fail2ban/jail.conf 하여 설정을 해 줍니다.

그런다음 실행을 해줘야 하는데,  아무 경로에서 그냥 fail2ban-client start 해주시면 됩니다. fail2ban-client -h 하시면 다양한 실행옵션을 볼 수 있습니다. 이때 /var/log/아래에 sshd.log와 vsftpd.log가 없다고 에러나면, 그냥 touch 명령어로 해당 디렉토리에 두개의 파일을 만들어 줍니다. 

touch /var/log/sshd.log
touch /var/log/vsftpd.log

필요한경우 chmod 등 권한설정을 해주면 되겠죠? 이상하게 Fail2ban의 rpm 버전들은 Fail2Ban의 공식홈페이지에서 다운로드하려도 하면 해당 웹사이트들이 거의 문을 닫았거나, 오류가 나더군요. 이럴때는 apt-get으로 설치하는 우분투가 그립습니다. 이상한게 경험상 보면, CentOS의 미러 저장소들은 없는 패키지가 너무 많습니다. :(

 


CFDIRECTORY Tag에서 다중목록 Filter 적용
Category : ColdFusion Comments : 댓글쓰기 Posted by 장창학 at 11:19 AM

ColdFusion에서 cfdirectory태그는 여러가지 기능을 가지고 있지만 cfdirectory action="LIST"와 같이 특정 디렉토리안의 모든 파일목록을 불러올 수 있는 기능을 제공합니다. 물론 Filter 옵션이 있어서 특정 확장자만, 또는 측정 파일명만, 또는 특정 파일명중 앞자리 3자리가 동일한 것만 등 다양한 옵션을 주어 파일을 목록화할 수 있습니다.

오늘은 간단하게 특정 폴더안의 모든 이미지 파일을 불러와서 jpg, png, gif와 같은 이미지 파일을 목록화 해보고, 특정 파일명으로 시작하거나 특정 확장자만 정렬해 보겠습니다.

uploads라는 디렉토리안의 모든 이미지를 추출하고자 하는 경우는 다음 코드와 같이 filter="*.jpg|*.JPG|*.png|*.PNG|*.gif|*.GIF" 와 같이 각각의 이미지 확장자별로 모든 파일을 필터링하면 됩니다. 대소문자를 구분하는 Linux 시스템에서의 체크를 위해 확장자 대소문자 필터를 추가합니다.

그런데, 이 필터 옵션에서 filter="sp*.*" 와 같이 옵션을 주게 되면, sp로 시작하는 파일을 모두 가져오게 됩니다. 여기서는 이미지 파일만 디렉토리안에 있으므로 sp로 시작하는 두개의 이미지 파일만 목록화됩니다. 간단하지만 파일필터를 할때 매우 유용한 코드입니다.

Demo 보기

<cfdirectory action="LIST" 
				   name="Images" 
				   directory="#ExpandPath('./uploads')#" 
				   filter="*.jpg|*.JPG|*.png|*.PNG|*.gif|*.GIF">

<cfoutput query="Images">
	<a href="./uploads/#Images.name#" target="_blank">
		<img src="./uploads/#Images.name#" border="0" width="150"><br />
		#Images.name#
	</a>
	<br />
</cfoutput>

<cfdirectory action="LIST" 
				   name="filenames" 
				   directory="#ExpandPath('./uploads')#" 
				   filter="sp*.*">

<cfoutput query="filenames">
	<a href="./uploads/#filenames.name#" target="_blank">
		<img src="./uploads/#filenames.name#" border="0" width="150"><br />
		#filenames.name#
	</a><br />
</cfoutput>

추가팁 !!
만약, 어떤 디렉토리안에 이미지 파일이 있는데 이것을 광고등의 목적으로 랜덤하게 하나씩 보여줘야 한다면 어떻게 해야 할까요? 다음과 같이 해볼 수 있습니다. 어때요? 간단하죠?

<cfdirectory action="LIST" 
                   name="Images" 
				   directory="#ExpandPath('./uploads')#" 
				   filter="*.jpg|*.JPG|*.png|*.PNG|*.gif|*.GIF">

<cfoutput>
<img src="./uploads/#Images.name[RandRange(1, Images.RecordCount)]#" border="0">
</cfoutput>


About me

Categories

Monthly Archives

Links

Recent Posts

Recent Comments