Category Archives: 허접프로그래머

mod_geoip 설치하고 사용해 보기

어플리케이션을 개발하거나 혹은 좀더 정밀한 사용자들의 로그 정보를 쌓고 싶을때 필요한 것이 국가 정보입니다.

물론 전세계를 대상으로 하는 서비스라면 이점이 더욱 더 중요해 지겠죠.

MaxMind라는 회사에서 제공하는 GeoIP Extension의 경우 매우 유용한 프로그램입니다.

여러가지 경로의 사용이 가능하지만 그중에 가장 강력한 퍼포먼스로 선호하는 Apache 모듈로 설치해 보도록 하겠습니다.

설치에 앞서 필요한것은 다음과 같습니다.

GeoIP C Library, GeoIP mod_geoip (Apache1, Apache2)

1. C Library 설치하기
[code]# tar -zxvf GeoIP-1.4.6.tar.gz
# cd GeoIP-1.4.6
# ./configure
# make
# make install[/code]

2. mod_geoip 설치하기
[code]# apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c[/code]

3. httpd.conf에 모듈이 정상적으로 추가되었는지 확인
[code]LoadModule geoip_module       modules/mod_geoip.so[/code]

4.httpd.conf에 모듈 설정 추가
[code]<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
</IfModule>[/code]

5. GeoIP 데이터 베이스 추가&업데이트하기
첫 설치시에 GeoIP.dat가 설치되어있지만 다음에서 데이터베이스를 다운받아 최신으로 업데이트 해봅시다.
http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

[code]# gzip -d GeoIP.dat.gz
# gzip -d GeoLiteCity.dat.gz
 
# mv GeoIP.dat /usr/local/share/GeoIP/GeoIP.dat
# mv GeoLiteCity.dat /usr/local/share/GeoIPCity.dat[/code]

6. City 정보까지 필요할 경우 httpd.conf 설정의 GeoIPDBFile을 다음과 같이 수정
[code]GeoIPDBFile /usr/local/share/GeoIP/GeoIPCity.dat[/code]

아파치등에서의 사용법은 [이곳]을 참고하시고, PHP와 같은 언어에서는 다음과 같이 정보를 얻어올 수 있습니다.

[code]<%
$country_code = apache_note(“GEOIP_COUNTRY_CODE”);
$country_name = apache_note(“GEOIP_COUNTRY_NAME”);
%>[/code]
사용자 삽입 이미지위의 그림은 phpinfo()를 실행했을 경우의 결과값 입니다. 데이터가 정상적으로 잘 나오는 것을 알 수 있습니다.

[iPhone] NSLog 업그레이드 + Debug 모드에서만 로깅하기

iPhone 개발환경을 보면 Visual Studio, Eclipse와 같은 화려한 IDE의 지원을 받아오던 저로서는 답답하고 답답하고 안타깝기에 그지없는 상황이 자주 연출되곤 합니다.

가끔씩 gdb에 근거한 알수없는 로깅시스템도 한몫을 하는데요 우리의 허접하기 짝이없는 NSLog를 화려하게 업그레이드 시키는 방법을 알아보도록 할까요.

우선 목표는 NSLog의 내용을 파일명과 에러발생 지점 라인, 기타 정보를 포함함과 동시에 빌드시에 선택하는 ActiveConfiguration을 Debug로 선택했을때만 로깅하도록 해보겠습니다.

사용자 삽입 이미지그림을 하나 보도록 하겠습니다. 이것과 같은 순서로 OTHER_CFLAGS를 추가하면 됩니다.
(1) 자신의 프로젝트 루트를 선택합니다.
(2) Info버튼을 눌러 Build 탭으로 이동합니다.
(3) Debug를 선택합니다.
(4) Show에서는 Setting defined this level을 선택해 줍니다.
(5) 그림에는 안나왔는데 좌측 하단의 Add User-defined setting을 눌러 OTHER_CFLAGS = -DDEBUG=1 을 추가해 줍니다.

이제 Debug모드로 컴파일할때는 #define DEBUG 1 이 자동으로 설정되게 됩니다.

이제 각각의 프로젝트의 prefix를 열어봅시다. 보통은 프로젝트명_Prefix.pch 이름을 가지고 있습니다.
다음을 추가해 주도록 합시다.

#ifdef DEBUG
    #define NSLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
    #define NSLog( s, ... )
#endif

이제는 Debug모드일때만 이쁘게 로깅을 하며, 그외의 경우에는 NSLog가 아예 동작하지 않게 됩니다. 한결 좋아졌네요.

참고 :
http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog
http://stackoverflow.com/questions/300673/is-it-true-that-one-should-not-use-nslog-on-production-code