- 전체
- ServerSpecific
- Tips
- Apps (Freeware)
- Apps
- BulitIn
- News
- MyStories
- Apps (iPhone/iPod Touch)
- Report
- Hardware
Tips OSX에 설치형 웹하드를 설치해 보자!
2009.06.07 23:50
참고로 여기서 말하는 웹하드는 와레즈처럼 운영되는 엄한 인터넷 공유사이트가 아니라 개인에게 저장공간을 제공하는 그런 서비스를 말한다.
간단히 생각해 보면 우선 대용량 메일의 경우에는 수신자만이 데이터에 접근이 가능하다. 다른 사람에게 데이터를 주려면 메일 계정을 알려주던지 데이터를 첨부한 메일을 전달해야 한다. 이게 인터넷에 항상 접근이 가능한 경우에는 아무런 문제가 되지 않을 수 있지만 그렇지 않다면 좀 귀찮은 상항이 되어버린다. 그리고 대용량 파일을 많이 다루는 경우 메일 용량이 무한정이 아님으로 아무래도 제한을 받을 수 밖에 없다. 거기다가 대용량 파일을 수신해야 할 경우 상대가 컴퓨터에 익숙하다면 아무런 문제가 없겠지만 그렇지 않다면 참 힘들 수 밖에 없다.
그리고 USB 메모리는 어디까지나 로컬에서 사용가능한 장치임으로 파일의 전달에 근본적인 어려움이 있다.
반면에 웹하드의 경우에는 권한이 제한된 별도의 계정을 두면 자신이 인터넷에 접속이 불가능한 경우에도 이 계정을 알려주어 파일을 전달할 수 있고, 자신이 필요한 파일을 받기도 원할하다.
자 이쯤되면 생각해 볼 수 있는게 왜 굳이 웹하드인가인데, 이용하는 사람이 모두 컴퓨터에 능숙한 사람이라면 사실 FTP를 쓰는 것이 정답이다. 가장 직관적이고 확실하다. 그런데 문제는 현실에서는 이메일 주고받기와 인터넷 서핑 정도는 가능하지만 복잡한 기능에 거부감 혹은 두려움을 가지고 있는 사람이 절대 대다수라는 것이다. 컴퓨터에 능숙하다면 사실 몇 GB정도 되는 파일을 주고 받는데 무슨 어려움이 있겠는가...
이럴때 유용한게 바로 웹하드다.
특히나 쉽고 직관적인 인터페이스를 통해서 메일을 주고 받는 정도만 가능한 사람도 이용할 수 있고, 추가 프로그램 없이 인터넷 브라우져만으로 접속 가능하면서, ActiveX 설치 없이 사용이 가능하다면 무엇을 더 바라겠는가??
인터넷 검색을 해 보면 이런 웹하드 서비스를 유료로 제공하는 업체가 몇 있다.
http://www.bighard.co.kr
http://www.bizhard.com
http://www.webhard.co.kr
http://www.webzip.co.kr
서비스 업체에 따라서 서비스 내용도 가격도 차이가 있다.
작은 용량이라면 그래도 이용할만한 비용이고 무료라는 문구가 보이기도 하지만 어디까지나 일정 기간이다. 용량이 늘어나고 기간이 길어지면 비용이 만만치 않게 된다.
사설이 길어졌는데 사실 이 글의 목적은 간단하다. 비용이 부담될 만큼의 웹하드가 필요하거나, 기존에 운영하고 있는 서버가 있거나 서버를 운영할 만한 상황이 된다면 직접 이런 웹하드를 만들어 보자는 것이다.
http://extplorer.sourceforge.net/
eXplorer는 php로 작성되어 있으며 오픈소스 프로젝트임으로 당연히 무료이다. 더욱이 별도의 ActiveX나 Plug-In 설치를 요구하지 않으며 그럭저럭 괜찮은 인터페이스를 가지고 있다.
이 후의 내용은 구체적으로 MacOSX를 사용하는 시스템에 eXtplorer를 설치하고 사용하는 데 필요한 몇가지 팁이다.
또한 초보자를 위해 처음부터 하나하나 자세히 쓰면 모두에게 좋겠지만 경험상 그건 너무 힘들고 별 도움도 안되는 것 같다. 더더군다나 컴퓨터 시스템에 대해서 잘 모르는 사람이 자신이 직접 운영하는 서버에 웹스토리지를 설치하고자 하는 경우는 없을 것이라 생각하기 때문에 필요한 포인트만을 간략하게 적고자 한다.
eXplorer은 2009년 6월 7일 현재 최신 버전인 2.0.1을 기준으로 한다.
MacOSX로 운영되는 서버에서 원본 코드 그대로의 eXplorer을 사용하는데 문제가 되는 점은 크게 두가지이다.
1. 한글이 포함된 파일의 다운로드 문제
eXplorer은 이미 다국어를 위한 대비가 몇가지 되어 있다. 하지만 다운로드에 대한 다국어 지원이 빠져있다. 이는 일종의 버그로 MacOSX만이 아닌 다른 운영체제에서도 겪게되는 문제로 보인다. 한글이 포함된 파일을 다운로드 하려고 한다면 에러 메세지를 보게 될 것이다.
2. 한글 표현 문제
MacOSX는 파일 시스템에 UTF-8-MAC이라는 독자적인 인코딩 방식을 사용하고 있다. eXplorer이 다국어를 위한 대비가 되어 있다고는 하지만 불행히 MacOSX가 사용하는 이 독자적인 인코딩 때문에 한글과 같은 각 파트별로 조합이 되는 언어에 대해서 자소단위로 풀어서 표현하는 문제가 있다. 즉 "한글.txt"라는 파일이 있다면 eXplorer를 통해 웹브라우져에서 보면 "ㅎㅏㄴㄱㅡㄹ.txt"로 표시가 된다.
다음은 이를 수정하기 위한 내용이다.
1. 한글이 포함된 파일의 다운로드 문제
다운로드 문제는 쉽게 해결이 가능하다.
[eXplorer]/include/download.php 파일을 열어 다음 부분을 살펴보자.
75 if($browser=='IE') {
76 header('Content-Disposition: attachment; filename="'.$item.'"');
77 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
78 header('Pragma: public');
79 } else {
80 header('Content-Disposition: attachment; filename="'.$item.'"');
81 header('Cache-Control: no-cache, must-revalidate');
82 header('Pragma: no-cache');
83 }
이렇게 되어 있는 부분을 다음과 같이 변경하면 된다.
75 if($browser=='IE') {
76 header('Content-Disposition: attachment; filename="'.rawurlencode($item).'"');
77 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
78 header('Pragma: public');
79 } else {
80 header('Content-Disposition: attachment; filename="'.rawurlencode($item).'"');
81 header('Cache-Control: no-cache, must-revalidate');
82 header('Pragma: no-cache');
83 }
간단히 설명하자면 http 헤더에는 다국어 표현을 사용할 수 없게 되어 있다. 알파벳과 숫자 그리고 몇개의 특수기호만 사용이 가능하다. 위에서 보이는 부분은 파일 이름을 브라우져로 헤더를 통해 전달해 주는 것인데 한글을 그대로 전달하는 과정에서 문제가 생기는 것이다. 따라서 php의 기본 함수인 rawurlencode(대신 urlencode를 사용해도 된다)를 사용하여 파일명을 인코딩하여 브라우져에 전달해 주는 것이다. 이렇게 하면 한글 파일의 다운로드에 문제가 없다.
2. 한글 표현 문제
MacOSX에서 서버를 운영해본 사람은 모두 알 것이다. 지긋지긋한 UTF-8-MAC.
UTF-8-MAC이 문제가 되는 것은 다른 인코딩에서는 하지 않는 decomposition을 한다는 것에 있다.
이 원치 않은 decomposition을 해결하기 위해서 다음에서 설명하고 있는 function을 이용하면 된다.
http://www.php.net/manual/en/normalizer.normalize.php
확인해 보면 다음과 같은 문구가 있다. "PHP 5 >= 5.3.0, PECL intl >= 1.0.0"
다행이 여기서 ","는 and가 아닌 or이다. 따라서 PHP5 5.3 이상을 사용하고 있거나 그렇지 않더라도 PECL intl module을 이용하면 normalizer function을 사용할 수 있다.
PHP 5.3 이상을 사용하면 아래 과정을 생략해도 된다.
http://site.icu-project.org/
우선 icu lib가 필요하다. MacOSX는 컴파일된 바이너리를 제공하고 있지는 않기 때문에 소스를 받아 직접 컴파일 해야 한다. .zip으로 되어 있는 것은 windows를 위해 제공되는 것임으로 .tgz 파일을 받도록 한다.
압축을 풀고 다음과 같이 컴파일 및 설치를 하도록 한다.
> cd [icu root]/source
> ./configure
> make
> sudo make install
직접 설치해 본 바로는 아무런 문제없이 수월하게 컴파일/설치가 된다.
http://pecl.php.net/package/intl
그리고 PECL intl extension module을 컴파일 하도록 하자.
압축을 풀고 다음과 같이 컴파일을 하도록 한다.
[주의] 다음 설치는 MAMP 1.72를 사용하는 것을 가정하고 작성되어 있으며 MAMP 1.72가 아닌 경우 자신의 시스템에 맞는 경로를 확인해야 한다
> cd [intl root]
> /Applications/MAMP/bin/php5/bin/phpize
> ./configure
> make
> make test
(출력되는 항목 중에서 반드시 PASS normalize() [tests/normalizer_normalize.phpt] 부분을 확인하도록 한다)
> sudo cp ./modules/intl.* /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/
그리고 이제 다음 파일을 열고,
/Applications/MAMP/conf/php5/php.ini
extension 항목을 찾아서 다음과 같이 추가를 한다.
extension=intl.so
여기까지 끝냈다면 이제 php에서 normalizer 함수를 사용할 수 있다.
그럼 소스코드에서 자소단위로 분해되는 것을 normalizer로 해결할 수 있도록 손을 봐야하는데 변경되는 지점이 좀 있다.
요약하자면 기존 소스코드에서 utf8_encode를 이용해서 문자셋을 변환하던 것을 normalizer 기능을 포함하는 새로운 함수를 사용해서 처리를 하도록 바꾸는 것이다.
작업을 설명하면,
[eXtplorer]/include/functions.php 에 normalizer 기능을 포함한 char_encode, char_decode 함수를 추가하고
모든 곳에 사용된 utf8_encode, utf8_decoe를 char_encode, char_decode로 변경하면 된다.
1316 function char_encode($srcstr) {
1317 if(function_exists('mb_detect_encoding')) {
1318 $srcenc=mb_detect_encoding($srcstr,"EUC-KR, EUC-JP, UTF-8");
1319 } else {
1320 if (!empty($GLOBALS["charset"])) {
1321 $srcenc='UTF-8';
1322 } else {
1323 $srcenc=$GLOBALS["charset"];
1324 }
1325 }
1326
1327 if($srcenc != 'UTF-8') {
1328 if(function_exists('iconv')){
1329 $srcstr=iconv($srcenc,'UTF-8',$srcstr);
1330 } else {
1331 $srcstr=utf8_encode($srcstr);
1332 }
1333 }
1334
1335 if(function_exists('normalizer_is_normalized')) {
1336 if ( normalizer_is_normalized($srcstr) ) {
1337 return $srcstr;
1338 } else {
1339 return normalizer_normalize($srcstr);
1340 }
1341 } else {
1342 return $srcstr;
1343 }
1344 }
1345
1346 function char_decode($srcstr) {
1347 if(function_exists('mb_detect_encoding')) {
1348 $srcenc=mb_detect_encoding($srcstr,"EUC-KR, EUC-JP, UTF-8");
1349 } else {
1350 if (!empty($GLOBALS["charset"])) {
1351 $srcenc='UTF-8';
1352 } else {
1353 $srcenc=$GLOBALS["charset"];
1354 }
1355 }
1356
1357 if($srcenc != 'UTF-8') {
1358 if(function_exists('iconv')){
1359 $srcstr=iconv('UTF-8',$srcenc,$srcstr);
1360 } else {
1361 $srcstr=utf8_decode($srcstr);
1362 }
1363 }
1364
1365 if(function_exists('normalizer_is_normalized')) {
1366 if ( normalizer_is_normalized($srcstr) ) {
1367 return $srcstr;
1368 } else {
1369 return normalizer_normalize($srcstr);
1370 }
1371 } else {
1372 return $srcstr;
1373 }
1374 }
이미 내가 해 놓은 삽질(?)을 다른 사람이 굳이 반복해야 할 이유가 없기에 patch파일도 첨부를 한다.
정말로 대단하십니다.
저도 님처럼 사이트를 만들고 운영해보고 싶지만,
확실히 맥으로 서버 구축한다는건 쉬운일만은 아닌듯보이네요..
한가지 한가지 풀어나가는 재미도 있기는 합니다만.. 요즘들어서 에휴 라는 한숨만이 더 늘고있답니다.
좋은 정보 잘보고 갑니다.