웹개발을 하다보면, 테스트 용도로 잠시 간단한 웹서버가 필요할 때가 자주 있다. 하지만, 이럴때마다 APMSETUP이나 XAMPP같은 것들을 설치하기는 조금 부담스러울때가 있다. 다양한 기능이 필요할때는 어쩔수 없지만, HTTP 요청/응답을 위해서 저걸 받아서 설치하자니 삽으로 할 일을 대형 장비를 가져다 쓰는 느낌이다. 그럴때 파이썬만 설치되어있다면 다음과 같이 간단하게 웹서버를 띄울 수 있다.

$ python -m SimpleHTTPServer 8000

8000은 원하는 포트 번호로 바꿔주면 되고, 실행한 경로를 웹 루트로 설정한다.

'Developing' 카테고리의 다른 글

Fluent 2013 Preview  (0) 2013.04.05
PHP에서 PDF 만드는 방법  (2) 2012.07.09
WebSocket 채팅 프로그램 예제 - 패러디 웨이브 <4>  (0) 2010.12.15

필요에 의해서 한국어 형태소 분석기를 찾아보기도 했고, MeCab을 이용한 한국어 형태소 분석과 폐쇄적인 21세기 세종 계획 성과물이란 글을 보면서 쓸만한 오픈소스 형태소 분석기가 없다는 것에 실망한 적이 있었다. 내가 전문가는 아니라서 잘 모르는 것일 수도 있겠지만, 영어는 물론이고 일본어도 연구 결과들이 공유되고 발전해가는 것이 보이는데, 왜 한국어는 없는지 답답했다. 그래서 "검색에서 쓸만한 오픈소스 한국어 형태소 분석기를 만들자!"라는 생각으로 시작했다는 전한닢 프로젝트를 보고 상당히 반가운 기분이 들었다.

그래서 한번 사용을 위해서 테스트를 해보기로 했다. 은전한닢 프로젝트는 일본어 형태소 분석기인 mecab에 한국어 형태소 사전을 추가한 형태로, 이를 사용하기 위한 Lucene/Solr용 tokenizer를 제공하고 있다. 그래서 사용해보려면 우선 mecab 설치가 필요하다.

테스트는 ubuntu 12.04 에서 진행했다.


mecab 설치

mecab은 ubuntu 저장소에 들어가있기때문에 쉽게 설치가 가능하다. 신경쓸 것은 컴파일이 필요하기 때문에 libmecab-dev 패키지도 별도로 설치가 필요하다는 것 정도이다.

$ sudo apt-get install mecab libmecab-dev


mecab-ko-dic 설치

mecab-ko-dic이 은전한닢 프로젝트의 핵심 결과물이라고 할 수 있는데, bitbucket 저장소에서 배포중이고, 사실 설치방법도 여기에 한국어로 친절하게 소개되어있기도 하다. 저장소의 다운로드 페이지에서 mecab-ko-dic 최신 버전을 다운로드 받아서 다음과 같이 컴파일하자. 이 글을 쓰는 시점에서 최신버전은 1.1.3 버전이다.

$ tar xzf mecab-ko-dic-1.1.3-20130226.tar.gz
$ cd mecab-ko-dic-1.1.3-20130226/
$ ./configure
$ make

컴파일이 잘 되었는지 테스트해보려면 다음과 같이 확인할 수 있다.

$ mecab -d .(엔터)
잘 설치되었는지 확인하려면 이렇게 확인할 수 있다.(엔터)
잘    MAG,T,잘,*,*,*,*
설치    NN,F,설치,*,*,*,*
되    XSV,F,되,*,*,*,*
었    EP,T,었,*,*,*,았/EP
는지    EC,F,는지,*,*,*,*
확인    NN,T,확인,*,*,*,*
하    XSV,F,하,*,*,*,*
려면    EC,T,려면,*,*,*,*
이렇    VA,T,이렇,*,*,*,*
게    EC,F,게,*,*,*,*
확인    NN,T,확인,*,*,*,*
할    XSV+ETM,T,할,Inflect,XSV,ETM,하/XSV+ㄹ/ETM
수    NNB,F,수,*,*,*,*
있    VV,T,있,*,*,*,*
다    EF,F,다,*,*,*,*
.    SF,*,*,*,*,*,*
EOS
(Ctrl + d)
$

이렇게 표시되면 잘 동작하는 것이다. 설치를 마무리하려면 다음과 같이 입력한다.

$ sudo make install

이렇게 하면 "/usr/lib/mecab/dic/mecab-ko-dic"에 사전 파일이 저장되고 설치가 끝난다고 했는데, 나의 경우에는 다음과 같은 오류가 발생했다.

test -z "/usr/lib/mecab/dic/mecab-ko-dic" || /bin/mkdir -p "/usr/lib/mecab/dic/mecab-ko-dic"
 /usr/bin/install -c -m 644 ./model.bin matrix.bin char.bin sys.dic unk.dic left-id.def right-id.def rewrite.def pos-id.def dicrc '/usr/lib/mecab/dic/mecab-ko-dic'
/usr/bin/install: cannot stat `./model.bin': No such file or directory
make[1]: *** [install-dicDATA] Error 1
make[1]: Leaving directory
make: *** [install-am] Error 2

model.bin 파일이 없어서 나는 오류인데, 그냥 무시하고 진행해도 별 문제없이 동작하는 것으로 보인다. mecab 설정파일(/etc/mecabrc)을 다음과 같이 수정해주면 설치가 끝난다.

6c6
< dicdir = /var/lib/mecab/dic/debian
---
> dicrc = /usr/lib/mecab/dic/mecab-ko-dic

root 권한이 없는 경우에는 사전파일들을 적당한 디렉토리에 넣어두고, 홈디렉토리에 .mecabrc 파일을 만들어서 동일한 설정을 해줘도 된다.

테스트 해보면 다음과 같다.

$ mecab(엔터)
설치가 다 끝났는지 확인하려면 이렇게 해보자.(엔터)
설치    NN,F,설치,*,*,*,*
가    JKS,F,가,*,*,*,*
다    MAG,F,다,*,*,*,*
끝났    VV+EP,T,끝났,Inflect,VV,EP,끝나/VV+았/EP
는지    EC,F,는지,*,*,*,*
확인    NN,T,확인,*,*,*,*
하    XSV,F,하,*,*,*,*
려면    EC,T,려면,*,*,*,*
이렇    VA,T,이렇,*,*,*,*
게    EC,F,게,*,*,*,*
해    VX+EC,F,해,Inflect,VX,EC,하/VX+ㅕ/EC
보    VX,F,보,*,*,*,*
자    EF,F,자,*,*,*,*
.    SF,*,*,*,*,*,*
EOS
(Ctrl + d)
$


Windows 업데이트를 하려고 할때 80070003 오류가 발생하면서 업데이트가 되지 않는 경우가 있다. 이럴 때는 0x80240022 오류가 나면서 Windows Defender의 바이러스/스파이웨어 정의도 업데이트 되지 않을 수 있다. 나의 경우에는 Windows 8에서 이런 경우가 발생했는데, 이전 버전에서도 발생하는 오류인 것 같다.

해결 방법은 다음과 같다.

  1. Windows Update 중지
    제어판 - 서비스 에서 Windows Update 항목에서 우클릭하여 나오는 문맥 메뉴에서 중지를 클릭한다.
  2. 임시 업데이트 파일 제거
    Windows 설치된 드라이브에서 다음 두 폴더의 내용을 모두 삭제한다.
    \Windows\SoftwareDistribution\DataStore
    \Windows\SoftwareDistribution\Download
  3. Windows Update 시작
    제어판 - 서비스 에서 Windows Update 항목에서 우클릭하여 나오는 문맥 메뉴에서 시작을 클릭한다.

나의 경우에는 2번에서 \Windows\SoftwareDistribution 폴더내의 모든 것을 삭제해서 해결했다.

참고 : Windows Update 오류 80070003

  1. regedit를 실행해서 아래 키 값을 '0' 으로 바꾼다.
  2. HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/setup/OOBE/mediabootinstall

  3. 명령프롬프트에 'slmgr /rearm' 을 타이핑하고 리부팅한다.
  4. 정품인증 끝!


Windows 7 이상 버전에서 응용프로그램 실행시, 파일 열기 대화상자 등에서 네트워크 드라이브가 표시되지 않는 경우가 있다. 탐색기 등에서는 정상적으로 표시되고 접근이 되지만, 응용프로그램에서만 표시되지 않는 경우인데, 레지스트리를 수정해서 해결이 가능하다.

  1. regedit를 실행하여 아래 위치를 찾는다.
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
  2. 다음 값을 추가한다.
    EnableLinkedConnections / DWORD / 1

출처 : http://support.microsoft.com/kb/937624/ko

Mac OS X의 Spotlight 기능은 유용하지만, 외장 디스크를 연결했을 때는 대부분의 경우 필요없는데도 자동으로 인덱싱을 하느라 디스크를 사용한다. 따라서, 인덱싱을 하지 않도록 지정하여 이런 일을 막을 수 있는데, "터미널"에서 다음 명령어로 인덱싱을 하지 않도록 설정할 수 있다.

sudo mdutil -i off /Volumes/[장치이름]

리눅스에서 zip 파일 압축을 풀었는데, 한글로 된 파일이름이 깨져서 알아볼수가 없게 되는 경우가 있다. 대부분 Windows에서 압축한 파일들이 그러한데, 이럴 때에는 다음과 같이 풀어주면 된다.

$ unzip -O cp949 [파일이름]

Ruby on Rails 데모 동영상 등에 등장하며, 인기를 끌었던 Mac OS X용 에디터인 TextMate가 GNU GPLv3로 소스 공개되었다. GitHub에서 소스를 다운로드 받을 수 있고, 이것을 사용할 수 있게 빌드하는 방법도 친절하게 올라와 있어서 어렵지 않게 설치할 수 있다. 설치 과정을 한번 정리해봤다. (자세한 설치 방법은 여기를 참고) 아래의 설치 과정은 Mac OS X 10.7, HomeBrew 설치된 환경에서 진행되었다.

1. 소스코드 받기

git이 설치되어있다면 다음과 같이 받을 수 있다.

$ git clone https://github.com/textmate/textmate.git
$ cd textmate

만약에 git이 없다면, GitHub 프로젝트 페이지에서 ZIP으로 다운로드 받아서 압축을 풀어도 된다.

2. 필요한 프로그램 설치

문서를 보면 빌드에 필요한 프로그램이 있다. 앞서 밝힌대로 나는 HomeBrew를 사용하고 있기때문에 다음과 같이 설치했다.

$ brew install --HEAD https://raw.github.com/adamv/homebrew-alt/master/head-only/ninja.rb
$ brew install ragel boost multimarkdown hg
$ brew install pgrep

3. 빌드

그리고 다음과 같이 빌드를 시작하면 설치가 끝난다.

$ ./configure
$ ninja

하지만, 다음과 같은 메시지만 나오고 진행되지 않았다.

$ ./configure
clang is too old to build this project.
Please see README.md for build instructions.
$

이것은 삽질의 징조..

문서를 봐도 HomeBrew를 사용할 경우에는 저 메시지에 나오는 clang을 어쩌라는 말은 없다. MacPorts를 사용할 경우의 설치 방법만 소개되어있다.

별도로 설치하는 방법을 알아보다가 혹시나해서 Xcode 4.4.1 을 설치하니, 저 메시지가 나오지 않고 빌드가 진행된다. 빌드가 끝나면 자동으로 TextMate가 실행된다.

~/build/TextMate/Applications/TextMate/ 에 TextMate.app 가 있으니, 원하는 곳에 옮겨놓고 사용하면된다.

4. 결론

  • 빌드는 문서가 꽤 잘 되어있으니 보고 따라하면 된다.
  • clang 문제가 있다면, 먼저 Xcode 4.4.1를 설치해보자. (MacPorts를 사용한다면 MacPorts로 설치해도 상관없겠지만..)
  • 공짜는 역시 좋다?

웹서버를 운영하면서 https 보안 서버를 사용하기 위해서는 인증기관에서 SSL 인증서를 발급받는다. 발급받은 개인키에 비밀번호가 걸려있을 경우에는 아파치 웹서버를 실행할 때마다 다음과 같은 메시지를 받게된다.

... waiting .Apache/2.2.14 mod_ssl/2.2.14 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.test.local:443 (RSA)
Enter pass phrase: [비밀번호 입력]

OK: Pass Phrase Dialog successful.
[ OK ]
root@www:/#

메시지만 나오는 것이라면 별 상관없겠지만, 개인키에 걸려있는 비밀번호를 입력해야만 서버 시작을 진행하는 것이 문제이다. 서버를 운영하다보면 관리 목적에서 자동으로 서버를 재시작해야할 경우가 종종 있는데, 그때마다 수동으로 비밀번호를 입력해주고 있을 수는 없는 노릇이다. 따라서, 이런 경우에는 개인키에 걸린 비밀번호를 제거해줘야할 필요가 생긴다.

개인키에 걸린 비밀번호는 다음과 같이 제거할 수 있다.

root@www:/etc/apache2/ssl/ssl.key# openssl rsa -in key.pem.orig -out key.pem
Enter pass phrase for key.pem.orig: [비밀번호 입력]
writing RSA key
root@www:/etc/apache2/ssl/ssl.key# [완료]

위의 예에서는 "key.pem.orig"라는 파일이 비밀번호가 걸려있는 원래 개인키 파일이다. 이렇게 실행한 후에, "key.pem"이라는 새로 만들어진 개인키 파일을 사용하면 비밀번호를 물어보는 귀찮은 일이 발생하지 않는다. 다만, 보안키의 비밀번호가 사라진만큼 보안키 저장에 신경써야하지만, 보안키 저장 장소는 비밀번호가 있건 없건 접근 권한등 보안에 신경쓰자.


PHP에서 PDF 문서를 만들기 위한 방법에는 다음과 같은 것이 있다.

1. PDFlib

PHP 공식 사이트의 문서에 나와있는 PDF 생성방법이다. PHP 공식 사이트에 소개되어있는 만큼 가장 문서화가 잘 되어있다고 봐야할 것 같고, 제공하는 기능도 괜찮아 보인다. 하지만, PDFlib 자체는 유료 소프트웨어이므로 정식으로 사용하기 위해서는 라이센스를 구매해야한다.(구매하지 않으면, 생성하는 모든 페이지 위에 데모 문구가 찍혀서 나온다고 한다.) 비 상업적 용도로 사용한다면, PDFlib Lite 7을 사용하는 방법도 있다.(현재 유지보수는 하지 않고 있으며, 무료답게 기술 지원도 없다고 한다. 참고로 현재 PDFlib의 버전은 8이다.)

참고

2. FPDF

FPDF는 무료로 용도에 상관없이 사용할 수 있다. PDFlib에서 라이브러리를 설치해야하는 것과는 달리, PHP 라이브러리만 설치하면 되기때문에 설치도 쉽다. 게다가 ubuntu를 사용한다면, 저장소에 이미 있기때문에 더욱 간편하게 끝난다. 문서는 FPDF 공식 사이트에서 함수 설명과 예제를 제공한다.

참고

3. TCPDF

FPDF처럼 TCPDF도 무료로 용도에 상관없이 사용가능한 자유소프트웨어이다. 설치도 다운로드해서 파일을 include해서 사용하는 간편한 방식이다. 다만, FPDF가 ubuntu 패키지로 존재하는 것에 비해서 TCPDF는 별도로 다운로드 받아야한다. 그러나, FPDF가 기본적으로는 유니코드를 지원하지 않는 것에 비해서, TCPDF는 기본 지원한다.(FPDF의 경우, 한글은 CP949 코드셋을 사용한다.) 문서는 공식 사이트에서 PHPDoc과 예제를 제공한다.

참고

+ Recent posts