[Ubuntu] user 디렉토리의 public_html 연결하기

2014. 12. 27. 00:52 from Dev/etc

오늘은 UBUNTU에서 개인 유저의 home에 있는 public_html 폴더를 apache에서 접근할 수 있도록 (http://www.sample.com/~foo 이런 형식으로) 세팅하는 방법입니다.


사실 오랜 옛날 사업한다고 그 비싼 서버(HP였나.. 이젠 기억도 가물가물..)를 돈 주고 사서 애지중지 세팅하고 개발하고 했던 이후로는 서버 관리를 할 일이 없었지요. 분업화가 되어서 서버관리, DBA, 개발이 다 전문성을 띄고 분화가 되니 한두명이 모여서 하는 회사가 아니면 웹 쪽 개발을 한다고 해서 서버 세팅까지 다 알기는 힘들지요. 하물며 저처럼 프로그래밍쪽을 해도 주로 알고리즘이나 내부 로직 쪽만 몇 년 동안 하다가 다시 손수(!) 해야 하는 상황이면 어쩔 수 없이 구글링에 의존할 수밖에 없습니다.


이런.. 이 부분도 역시 겁나(?) 많이 바뀌었군요. 옛날에는 유저 홈의 public_html은 기본적으로 보여주었던 것 같은데..


각설하고, 일단 public_html 이라는 디렉토리를 만들어줍니다.


mkdir public_html

apache2의 설정이 있는 /etc/apache2 디렉토리를 보면 mods-enabled가 있고, mods-available이 있습니다. 눈치를 보아하니 mods-available에 있는 애들 중에 이용할 mods를 mods-enabled에다 sybolic link로 걸어주는 거네요.


cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/userdir.conf userdir.conf
sudo ln -s ../mods-available/userdir.load userdir.load
sudo service apache2 restart 

이렇게 해주면 그림처럼 경고(!)가 나옵니다(전 root로 들어가서 sudo를 쓰지 않았습니다). 보아하니 도메인 네임이 안정해져있어서 나오는 거라 가볍게 무시해줍니다.



이제 public_html 디렉토리에 index.html을 만들고 웹브라우져에서 http://localhost/~USER_NAME 이렇게 해주시면 접속이 가능합니다.

Posted by banasun :

[javascript/tip] a tag에 onclick event 설정해서 이동 전에 이용자 확인 받는 방법

2014. 11. 27. 02:42 from Dev/javascript

알고 보면 간단한 팁이지만, 원스텝으로 이용자 확인 받고 다른 링크로 넘어가는 과정을 보여드리겠습니다.

당연히 다른 페이지로 넘어가는 데에는 a tag을 이용합니다.

여기에 onclick event를 설정해서 이용자 input을 받는 거지요.

예를 들어, delete.php로 이동하기 전에 삭제 확인을 받으려면 다음과 같이 합니다.

삭제
Posted by banasun :

[wamp server] 윈도우즈 환경에서 apache, mysql, php 개발환경 한번에 셋업해주는 wamp server

2014. 11. 24. 15:56 from Dev/etc


오늘은 wamp 서버 설치를 해보도록 하겠습니다.

wamp는 윈도우즈 환경에서 Apache + mysql + php를 셋으로 구성해서 간단하게 개발환경을 구축해주고, 서비스 할 수 있도록 도와주는 kit입니다. 물론 이 세 가지는 설치도 그다지 어렵지 않아서 따로따로 설치해도 잘되지만, 저처럼 윈도우즈 별로 안좋아하는 사람도 쉽게 설치 및 관리를 할 수 있도록 해줍니다.

1. 설치파일 다운받기

먼저 wamp server 페이지(http://www.wampserver.com/en/)로 가서 설치파일을 다운받습니다.


OS가 32비트인지 64비트인지 확인해서 받으셔야 됩니다. 클릭하면 sourceforge에서 설치파일을 다운로드 받습니다.


2. setup 파일 실행

셋업과정은 단순합니다. 설치 경로와 기본 브라우져, 그리고 SMTP에 이용할 메일 주소만 확인해주면 알아서 잘 설치가 되는군요.




3. 설치 완료

어떻게 생각해보면 허무하게 세팅이 끝나버렸습니다. ㅋㅋ

브라우져에서 http://localhost 해서 아래 화면이 나오면 정상적으로 설치가 완료된 것입니다. 제 컴에서는 트레이에 아이콘은 server offline으로 표시되어서 문제가 있나 했는데, php나 mysql 모두 정상적으로 잘 작동을 하는 걸 보면 제 컴의 문제이거나 트레이의 정보와는 상관이 없거나 한 것 같습니다.


4. 설정하기

아파치 설정은 bin/apache 밑의 conf 디렉토리에 있습니다. 입맛대로 설정하시면 되고요..



mysql은 그래도 root 패스워드 설정은 해놔야 쓰겠지요? 위 3의 화면에서 phpmyadmin으로 가서 사용해도 되겠지만, console에서 이용하려면 PATH에 다음을 추가합니다 :

C:\wamp\bin\mysql\mysql5.6.17\bin

그 다음에는 root 패스워드 설정을 해줍니다.


자.. 이제 끝났습니다. 사실 워드프레스 한번도 안써보았는데 아는 분이 부탁을 하셔서 한번 깔아보고 하느라 익숙하지 않은 윈도우즈에 설치를 해 보았네요. 가능하면 다음에는 wordpress 설치를 주제로 다시 포스팅 해보도록 하겠습니다.

혹시 wamp 설치하면서 안되거나, 궁금하신 점이 있으시면 답글 달아주세요.


Update (11/26/2014)

저는 mysql을 console에서 많이 이용하는 것도 있고 해서 위와 같이 root 패스워드 설정하고 이것저것 하는데.. 이렇게 하면 phpmyadmin 접속이 안됩니다.

확인해보니 wamp server와 같이 배포되는 phpmyadmin은 local 설정이 되어 있어서 local에서만 접속이 됩니다. phpmyadmin 이용이 더 익숙하신 분은 (어차피 wamp 자체가 서비스용이라기 보다는 간단하게 개발환경을 만들어 주는 용도이니) 굳이 설정 변경을 안하고 그냥 이용하시는게 더 낫지 않을까 싶네요. ^^

Posted by banasun :

[php] openweathermap.org의 API와 cUrl을 이용하여 기상정보 가져오기

2014. 11. 6. 15:47 from Dev/php

간단하게 기상정보를 표시해주어야 할 일이 있어서 검색을 해보았는데, yahoo나 기상청의 공개 api 등이 나오더군요.

기상청은 공개 API이긴 하지만 승인요청하고 며칠 기다려야 하고, 상업적 용도의 사이트에 이용이 가능한지도 애매하고, 주의사항에 있는 '서버 과부하시 이용이 제한될 수 있습니다'라는 문구를 보고는 솔직히 좀 불안하더군요. 군함도 486 컴퓨터로 돌리는 나란데.. 아무도 책임 안지는 공개 api의 서버는 어떠할지...

그래서 조금 더 찾아 보니 http://openweathermap.org/api 라는 공개 서비스가 있네요. 일단 key 발급 같은 것도 간단하고(email 등록하면 됨), 일정 용량 이상 넘어가지 않는다면 이용하는 데 문제는 없어 보입니다.


php의 cUrl을 이용해서 자료를 가져와 보겠습니다:

 
$w = curl_init('http://api.openweathermap.org/data/2.5/weather?q=Seoul');
$weather_options = array(
	CURLOPT_HEADER => false,
	CURLOPT_RETURNTRANSFER => true
	);
curl_setopt_array($w, $weather_options);
$a = curl_exec($w);
curl_close($w);

if (isset($a) && $a) {
	$weather = json_decode($a);
	
	$current_temp = $weather->main->temp - 273.15;
	$temp_min = $weather->main->temp_min - 273.15;
	$temp_max = $weather->main->temp_max - 273.15;
	$weather_main = $weather->weather[0]->main;
	$weather_icon = "http://openweathermap.org/img/w/{$weather->weather[0]->icon}.png";

	echo "
";
	echo "현재 기온 : " . $current_temp;
	echo "최저 기온 : " . $temp_min;
	echo "최고 기온 : " . $temp_max;
	echo "날씨 : " . $weather_main;
	echo "
"; } else { exit(0); }

json 타입과 xml 타입으로 받을 수 있고, 넘겨온 값을 처리할 때에는 하위 값이 object도 있고, array도 있으니 이용할 때 참고하시고요, 그리고 한참 헤맸던게, 온도가 화씨가 아니라 절대온도(K)입니다. 섭씨 온도로 변경하려면 273.15를 빼주어야 합니다.

그리고 해당 날씨의 아이콘도 같이 제공해줍니다. 18번째 라인이 아이콘을 가져오는 부분인데, 아이콘도 예뻤으면 좋았을텐데 하는 생각이 드는 군요. ^^

원래는 APPKEY를 같이 넘겨줘야 한다고 되어 있는데, 테스트 할 때에는 없이도 잘 수행이 됩니다. 그래도 정책이 APPKEY를 받도록 되어 있고, 발급도 간단하니 안정적으로 이용할 때에는 넣어주시면 될 것 같습니다.

위 코드는 테스트용이라.. 이용하시는 목적에 맞게 객체를 만드시든, 함수를 만드시든 해서 사용하세요. ^^

Posted by banasun :

[ubuntu] 설치되어 있는 패키지들 확인하기

2014. 10. 29. 06:58 from Dev/etc

오늘은 간단하지만, 많이 이용하는(그리고 매일 까먹고 확인하는) 명령어입니다.

설치되어 있는 패키지들을 확인하는데 이용하는 dpkg 명령입니다. 예전에 제가 일 시작할 때에는 사실 소스코드 받아서 빌드하고, 버전 안맞으면 충돌하고 그랬었지요. 요새는 패키지 매니저들이 잘 되어 있어서 그런 경우가 많지는 않지요. 물론 major update가 있을 때는 신경이 좀 쓰이긴 하지요 ㅋㅋ

dpkg --get-selections

이렇게 하면 설치되어 있는 패키지들이 리스트됩니다. 당연히 아래와 같이 grep과 같이 이용하면 보고 싶은 패키지들을 쉽게 찾아볼 수 있지요. 한번 mongodb와 관련된 패키지들을 찾아보겠습니다:

dpkg --get-selections | grep 'mongo'



--listfiles 옵션과 같이 이용하면 어떤 파일들이 설치되어 있는지도 알 수 있습니다.

    dpkg --listfiles 'mongodb-org-tools'



Posted by banasun :

[vim] vim editor에 color scheme 적용하기

2014. 10. 17. 21:35 from Dev/etc

vim에 color scheme 입히기

최근 aws에서 작업을 많이 하다 보니 간만에(!) vim을 사용할 일이 자주 생기고 있습니다. 그런데 해보신 분들은 잘 아시겠지만, vim이 상당히 밋밋하지요. ㅋㅋ 그래서 잠시 짬을 내서 color scheme을 입혔는데, 그 과정을 정리해보겠습니다:

    mkdir ~/.vim
    mkdir ~/.vim/colors

그 다음에 colors 디렉토리에 다운받으신 color scheme을 저장해줍니다. 그리고 사용자 계정에 있는 .vimrc 를 수정해주고, 없다면 만들어줍니다. 저는 distinguished라고 하는 다크 계열의 스킴이 맘에 들더군요. https://github.com/Lokaltog/vim-distinguished

    set t_Co=256
    syntax on
    set background=dark
    colorscheme distinguished

저는 요새 javascript 작업을 많이 하는지라.. javascript syntax를 넣도록 하겠습니다. 자세한 내용은 다음을 참조하세요. https://github.com/jelera/vim-javascript-syntax

Posted by banasun :

[Linux] 일정 기간 내에 변경된 file list - find 명령으로

2014. 10. 13. 12:09 from Dev/etc

서버 작업을 하다 보면 이러저러한 이유로 일정 기간 이내에 변경된 파일을 뽑아 보고 싶은 경우가 생깁니다.

find의 기본 명령 모양은 다음과 같습니다 :


find / -name foo


이러면 이름이 foo 인 파일들이 주르륵 나옵니다. find의 검색 기준은 여러 가지를 동시에 적용할 수 있는데, 따로 정해주지 않으면 이 조건들은 모두 AND로 봅니다. 모두 만족시키는 것만 표시를 해주는 거지요.

오늘 우리가 찾고 싶은 건 변경 일자 기준입니다. 그러면 타입은 파일이고, 변경일자로 7일 이내를 찾아볼까요?


find / -type f -mtime -7


이렇게 해주시면 됩니다. 이렇게 해서 나온 결과를 xargs 등등으로 처리해주면 더 복잡한 작업도 할 수 있겠지요?

마지막으로, 30일~45일 이전에 변경된 파일은 어떻게 하면 될까요?


find / -type -mtime +30 -mtime -45


이렇게 해주시면 됩니다. -mtime의 값으로 +값은 그 이후, -값은 이전, 숫자만 주면 정확히 그날을 기준으로 찾아줍니다.

Posted by banasun :

[php] serialize() VS json_encode()

2014. 9. 30. 17:15 from Dev/php

예전에는 거의 serialize()를 많이 사용했던 것 같은데, 요새는 AJAX 가 대세고, 더구나 angularJS처럼 아예 javascript로 app을 만드는 때가 되다 보니 json_encode()를 실무에서도 많이 이용하게 됩니다. json_encode()로 포맷을 잡아 놓으면 데이터 송수신하면서 따로 작업을 할 필요가 없어지게 된 거지요.

퍼포먼스 측면에서도 외국에서 벤치마킹한 결과를 보면 serialize()보다 json_encode()가 1.5~2배 이상 더 빠른 것으로 알려져 있습니다. 

그럼에도 개인적으로 작업을 하다 보면, serialize()가 필요한 이유는 개인적으로 몇가지 있습니다 :

1. 자료를 복원할 때 정확하게 특정 class로 복원해야 하는 경우에는 serialize()가 아직도 더 편리합니다. 물론 단순 class나 array라면 캐스팅해버리면 되긴 하지만요.


2. 서버의 php 버전이 낮은 경우입니다. 사실 이 글을 포스팅하는 이유가 오늘 하루 종일 예전 DB의 레코드를 json_encode 해서 신규 서버 mysql에 넣었다가 다시 이용하는 작업을 하다 짜증하서 쓰게 되었는데요. 특히 PHP 5.2 이전 버전은 json과 관련된 함수들의 기능에 제한이 많습니다. 


3. 이건 별 실효성은 없는 한계이지만, json_decode() 실행시 nested 계단이 127개 이상이면 에러가 발생합니다. json을 이용하는 이유가 직관적이고 사람이 바로 알아보기 편하다는 이유도 있는데.. 127 계단을 만들지는 않겠지요? ㅋㅋ 아마 PHP 개발자들도 그렇게 생각하고 한계를 127개로 한 것 같습니다.


하여튼 대세는 json 이지만, 아직도 serialize()가 더 편한 점도 남아있습니다. 

Posted by banasun :

node.js update 하기 - n package

2014. 9. 22. 00:54 from Dev/javascript

node 자체를 upgrade 해주어야 할 경우가 있습니다.

이럴 때에는 shell에서 다음과 같이 해줍니다 :


sudo npm cache clean -f
sudo npm install -g n
sudo n stable
node -v


1번 명령은 일단 캐쉬를 강제적으로 비우는 것입니다.

2번 라인은 npm을 이용, n이라는 패키지를 설치합니다. 응? node를 update하는데 또 n 이라는 거를 깔아야 해?

물론 node package 자체를 새로 다운받는 것도 방법이지만, n은 일종의 helper package라고 보시면 됩니다.

그냥 쉘에서 바로 업그레이드가 되니 훨씬 편하지요.

3번 라인이 실제로 stable version을 설치하는 명령이고,

4번은 새 버전이 잘 설치되었는지 확인해보는 겁니다.

Posted by banasun :

application/json 포맷으로 angularJS - php script 사이에 데이터 주고받기

2014. 9. 21. 02:22 from Dev/php

데이터를 post 방식으로 php server로 보낼 때, 각 요소들을 파싱해서 application/x-www-form-urlencoded 방식으로 보낼 수도 있고, 아니면 application/json 방식으로 보낼 수 있습니다.

angularJS에서는 아래와 같이 보냅니다 :


        $http({
            method: "post",
            url: apiUrl,
            data: JSON.stringify(data),
            headers: {'Content-Type': 'application/json'}
        }).success( function(rtnData){
           //
        });


그리고 서버의 php script에서는 간단하게 다음과 같이 받습니다:


$foo = file_get_contents("php://input");

var_dump(json_decode($foo, true));


Posted by banasun :