'프로그래밍'에 해당되는 글 75건
- 2012/05/18 하둡(Hadoop) 설치부터 테스트까지 정리~
- 2012/05/03 HTML 색상(Color) 코드표
- 2012/04/30 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리
- 2012/04/27 웹 페이지 레이아웃을 설정하는 SiteMesh 세팅 및 활용에 대하여~
- 2012/04/24 구글 앱 엔진(Google App Engine) 자바 버전 설치 및 프로젝트 생성/실행/배포 ~
- 2012/04/16 프로그래밍 주석에 대한 정리 및 몇가지 팁~
- 2012/04/01 안드로이드 음성 처리 API에 대한 정리
- 2012/03/07 웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리
- 2012/02/15 N-Screen을 지원하는 미디어 쿼리에 대하여
- 2012/02/03 아파치 로그를 쉽게 필터링 할 수 있는 프로그램 cronolog~
지난번에 맵리듀스(2012/02/29 - [리뷰/블로그] - BigData 처리를 위한 맵리듀스(MapReduce)에 대하여~)에 대해서는 한번 정리한 적이 있는데요.
오늘은 하둡(Hadoop)을 설치하고 환경변수들을 설정한 후, 기본 예제인 Word Count를 실행해보도록 하겠습니다.
백문이 불여일견이라고 내용을 아무리 보는 것 보다 직접 해보는 것이 확실히 도움이 되는 것 같습니다.
하둡(Hadoop) 설치
하둡은 HDFS, MapReduce를 소프트웨어로 구현한 것으로 아파치 Top-Level 프로젝트입니다.
코어는 Java, C/C++, Python등을 지원하는데요. 기본적으로 JDK는 설치되어 있어야 Hadoop을 구동할 수 있습니다.
하둡을 구동하기 위해서는 리눅스 환경이 좋은데요. 윈도우나 맥의 경우에는 가상머신을 활용하면 됩니다.
저는 우분투를 PC에 설치해서 하둡 설치를 진행했네요.
다운로드는 http://ftp.daum.net/apache/hadoop/common/ 에서 버전별로 받으시면 됩니다.
현재 1.0.2버전까지 다운로드 할 수 있네요. 저는 1.0.0 버전으로 테스트를 진행했습니다.
다운로드한 파일(hadoop-1.0.0.tar.gz)을 압축을 풀고 진행하면 됩니다.
습관적으로 /usr/local 하위 폴더에 압축을 풀었네요.. ^^
# tar xzf hadoop-1.0.0.tar.gz
이제 환경변수 설정을 진행해야 합니다. 먼저 profile을 vi 에디터로 띄웁니다.
# cd ~
# vi .profile
그리고 나서 다음과 같이 환경변수들을 설정해 줍니다.
JAVA_HOME을 먼저 설정하고, 하둡이 설치된 경로인 HADOOP_INSTALL을 지정한 후 PATH에 추가했습니다.
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export HADOOP_INSTALL=/usr/local/hadoop-1.0.0
export PATH=$PATH:$HADOOP_INSTALL/bin
이제 하둡이 동작하는지 다음과 같이 확인하시면 됩니다.
# source .profile
# hadoop version
Hadoop 1.0.0
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1214675
Compiled by hortonfo on Thu Dec 15 16:36:35 UTC 2011
하둡(Hadoop) 환경 설정
하둡은 다음의 세가지 방식 중 한가지로 동작합니다.
- Standalone mode
- - 데몬 프로세스가 동작하지 않고 모두 단독의 JVM 내에서 동작한다. 테스트하고 디버그가 쉽기 때문에 개발에 적합하다.
- Pseudo-distributed mode
- - 하둡 데몬 프로세스가 로컬 컴퓨터에서 동작하므로 클러스터를 시뮬레이션 할 수 있다.
- Fully distributed mode
- - 하둡 데몬 프로세스가 여러 컴퓨터로 구성된 그룹에서 동작한다.
이 중에서 Standalone mode는 아무것도 설정해 줄 것이 없으므로 저는 Pseudo-distributed mode로 설정해 보도록 하겠습니다.
Hadoop과 관련된 환경설정 파일들은 conf/ 디렉토리에 있습니다.
hadoop-env.sh 설정
먼저 conf/hadoop-env.sh 파일에서 JAVA_HOME과 HADOOP_HOME을 설정해 줍니다.
java와 hadoop이 설치된 경로를 지정해 줍니다. (저와 경로가 다를테니 각자에 맞춰서 해주시면 됩니다.)
이제부터는 XML 파일들을 설정해 볼 차례입니다.
core-site.xml 설정
core-site.xml 파일은 HDFS와 맵리듀스에 공통적으로 사용되는 IO와 같은 하둡 코어를 위한 환경을 설정하는 파일입니다.
다음과 같이 설정해 주시면 됩니다.
hdfs-site.xml 설정
hdfs-site.xml 파일은 네임노드, 보조 네임노드, 데이터 노드 등과 같이 HDFS 데몬을 위한 환경을 설정하는 파일입니다.
Pseudo-distributed mode이므로 동일한 서버에 네임 노드와 데이터 노드를 설정했네요.
mapred-site.xml
mapred-site.xml 파일은 Job Tracker와 Task Tracker 같은 맵리듀스 데몬을 위한 환경을 설정하는 파일입니다.
slaves
이 파일은 데이터 노드와 Task Tracker를 작동시킬 컴퓨터의 목록을 작성하는 파일입니다.
실제 분산 환경으로 처리할 때는 데이터 노드에 해당하는 컴퓨터의 IP 주소나 호스팅 명을 써 주시면 됩니다.
전 Pseudo-distributed mode이므로 localshot라고만 했네요.
localhost
SSH 설정
Fully distributed mode에서는 Master 서버와 Slave 서버들이 상호 접속이 가능하도록 SSH를 설정해야 합니다.
물론 Pseudo-distributed mode에서도 이와 같은 설정이 필요합니다.
왜냐하면 Hadoop은 내부적으로 Pseudo-distributed mode와 Fully distributed mode를 구분하지 못하기 때문입니다.
그러므로 위와 같이 Slaves를 localhost로 설정했더라도 데몬 프로세스를 실행시키기 위해서 로컬호스트에 암호 입력없이 SSH 로그인할 수 있도록 설정할 필요가 있습니다.
그래서 서로 SSH 키를 생성하고 복사하는 과정이 필요한데요. Pseudo-distributed mode이므로 다음과 같이 한번만 해주시면 됩니다.
(참고로 SSH는 미리 설치되어 있어야 합니다.)
# ssh-keygen -t rsa
# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# ssh localhost
마지막의 #ssh localhost 를 실행해서 제대로 접속되는지 확인할 수 있습니다.
네임 노드 포맷
이제 마지막으로 네임노드를 HDFS로 포매팅 해주면 모든 세팅은 종료 됩니다.
다음과 같이 해 주면 됩니다.
# hadoop namenode -format
드디어 Hadoop 관련 설정을 마무리 했네요.
저도 각각의 항목들을 모두 이해한 것은 아니지만 대략적으로 각각의 파일이 어떤 것을 하는지 알고 있으면 될 것 같습니다.
하둡(Hadoop) 실행 및 UI 확인
Hadoop을 실행하는 명령어는 다음과 같습니다. HDFS만 시작할 수도 있고, 맵리듀스만 실행할 수도 있으면 전체를 한번에 시작할 수도 있네요.
# start-all.sh //HDFS & 맵리듀스 모두 실행
# start-mapred.sh //맵리듀스만 실행
# start-dfs.sh //HDFS만 실행
# stop-all.sh // HDFS & 맵리듀스 모두 중단
# stop-mapred.sh // 맵리듀스만 중단
# stop-dfs.sh // HDFS만 중단
Hadoop을 실행하고 난 후, 웹 기반의 UI로 모니터링할 수 있도록 제공하고 있습니다.
각각의 URL은 다음과 같습니다.
# 맵리듀스
http://localhost:50030
# HDFS
http://localhost:50070
실행한 화면은 다음과 같네요.
하둡 (Hadoop) 실행 테스트
위 그림을 보면 실제로 맵리듀스를 1개 테스트한 결과를 볼 수 있을 겁니다.
다음과 같이 Hadoop 배포판에 포함된 기본적인 예제를 테스트했네요.
여러분도 세팅을 마무리 한 후, 한번 테스트 해보시기 바랍니다. 지정된 텍스트 파일에서 단어의 개수를 체크하는 예제네요.
# cd /usr/local/hadoop-1.0.0
# hadoop dfs -mkdir input
# hadoop dfs -put CHANGES.txt input/
# hadoop jar hadoop-examples-1.0.0.jar wordcount input output
CHANGES.txt 는 하둡 설치 디렉토리에 있는 변경된 내역을 정리한 파일입니다.
이 파일에 있는 단어의 수를 체크해서 출력하는 내용입니다.
ps. HADOOP_HOME을 설정하고 실행하면 다음과 같은 메시지가 나타납니다.
Warning: $HADOOP_HOME is deprecated.
HADOOP_HOME이 deprecated 되었다고 하던데요. 일단 예제는 잘 돌아갑니다.
나중에 한번 제대로 확인해 봐야겠네요~
'프로그래밍 > Java' 카테고리의 다른 글
| 하둡(Hadoop) 설치부터 테스트까지 정리~ (0) | 2012/05/18 |
|---|---|
| 구글 앱 엔진(Google App Engine) 자바 버전 설치 및 프로젝트 생성/실행/배포 ~ (0) | 2012/04/24 |
| 프로그래밍 주석에 대한 정리 및 몇가지 팁~ (0) | 2012/04/16 |
| float와 double 타입.. (0) | 2011/11/01 |
| javadoc 생성시 한글 깨질때.. (0) | 2011/10/17 |
| URL 기반의 QRCode 생성하는 JSP 소스~ (0) | 2011/10/14 |
'프로그래밍 > Web' 카테고리의 다른 글
| HTML 색상(Color) 코드표 (0) | 2012/05/03 |
|---|---|
| 웹 페이지 레이아웃을 설정하는 SiteMesh 세팅 및 활용에 대하여~ (0) | 2012/04/27 |
| 웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리 (0) | 2012/03/07 |
| N-Screen을 지원하는 미디어 쿼리에 대하여 (0) | 2012/02/15 |
| Mobile Web에서의 스와이프를 위한 SwipeView 활용 (0) | 2012/02/01 |
| CSS의 Margin, Padding, Border 개념을 명확하게 하자 (0) | 2012/01/20 |
스마트폰 어플리케이션들이 증가하면서 각각의 디바이스에 대한 구분이 필요할 때가 있습니다.
이때 사용할 수 있는 것이 디바이스 식별자인데요.
아이폰의 경우에는 UDID라고 하는 디바이스별 식별자가 포함되어 있어 Unique하게 구분할 수 있습니다.
그러나 안드로이드에서는 고유한 식별자가 일률적이지 않아 어려움이 있는데요.
이 부분을 잘 정리해 놓은 글이 있네요. Tim Bray의 identifying App Installations 인데요.
Android에서 식별자로 사용할 수 있는 항목들을 설명하고 결국 자체 UUID를 활용하는 것이 바람직하다고 되어 있네요..
휴유님의 안드로이드의 개별 디바이스를 구분하는 방법을 보면 이 글을 한글로 잘 번역해 놓으셨네요.
그럼 내용을 다시한번 정리해 보도록 하겠습니다.
1. Device ID
TelephonyManager.getDeviceId() 메소드를 활용해서 디바이스의 ID 정보를 가져오는 것입니다.
일반적으로 휴대폰에 포함된 IMEI, MEID, ESN 등의 값을 유일한 값으로 활용하는 것이죠.
그러나 전화기가 아닌 단말에서는 해당 값이 없고, READ_PHONE_STATE 속성을 가지고 있어야 한다는 점이 이슈라고 하네요.
2. MAC Address
WIFI에 포함된 MAC Address를 활용하는 방법도 있다고 합니다.
그러나 WIFI가 없는 단말도 있으며,
특히 특정 단말에서는 WIFI가 ON 상태가 아니면 MAC Address 값이 없는 경우도 있다고 하네요.
3. Serial Number
원래 이걸 찾다가 위 글들을 찾은 것인데요. Build 클래스에 보면 SERIAL이라는 값이 있습니다.
android.os.Build.SERIAL 인데요. 2.3 진저브레드부터 지원하기 시작했다고 합니다.
즉, 2.2 프로요 이전 버전에서는 지원하지 않구요.
2.3 이후 버전도 필수 항목이 아니어서 제공하지 않는 단말도 있다고 하네요.
4. ANDROID_ID
Setting.Secure.ANDROID_ID 값을 유일키로 활용할 수도 있다고 합니다.
64 비트의 고유값으로 Tim Bray는 가장 추천하고 있는데요.
폰을 초기화 할 경우 삭제되고 다시 생성되는 정보 이구요.
프로요(2.2) 버전 이하에서는 신뢰성이 떨어질 수 있다고 합니다.
마지막으로 아이폰에서 UDID를 가져오는 방법도 정리해 봅니다.
이런 측면에서 보면 여러 제작사가 만드는 안드로이드보다 아이폰이 장점이 될 수 있다는 생각도 드네요.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리 (0) | 2012/04/30 |
|---|---|
| 안드로이드 음성 처리 API에 대한 정리 (0) | 2012/04/01 |
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
1. SiteMesh의 정의
SiteMesh(http://www.sitemesh.org/)는 웹 페이지의 레이아웃을 효율적으로 처리할 수 있도록 도와주는 프레임워크입니다.
쉽게 말해서 웹사이트의 동일한 상단, 하단, 메뉴 부분을 한곳에서 관리하고 각각의 페이지는 실제 내용만을 관리할 수 있도록 해줍니다.
즉, 상단/하단/메뉴와 같이 반복되는 부분이 각 페이지마다 들어가 있으면 추후 유지보수가 어렵기 때문에
SiteMesh와 같은 프레임워크를 사용하는 것이죠.
웹사이트를 제작하던 초기에는 iframe으로 나누어서 처리하기도 했었구요.
SiteMesh 이전에는 include를 활용해서 이런 형태를 구현하기도 했었습니다.
그러나 iframe은 확장이 어렵고 지원하지 않는 브라우저도 많이 있었네요.
또한 include는 모든 페이지마다 해당 부분을 삽입해줘야 하는 이슈가 있었죠.
그래서 실제로 SiteMesh를 사용해보면 얼마나 편리한지 알 수 있을 겁니다.
2. SiteMesh의 처리 방식
SiteMesh는 기본적으로 Java Servlet 환경에서 Filter 형태로 동작하고 있으며
다음 그림과 같이 Decorator 페이지를 한번 필터링 하는 방식입니다.
기존 페이지는 웹서버가 바로 렌더링된 페이지를 보내주지만 SiteMesh에서는 Decorator 페이지를 한번 더 거치게 된다는 것이죠.
다음 그림을 보면 SiteMesh의 방식을 좀 더 자세히 이해할 수 있을 것 같네요.
미리 중간에 있는 이미지와 같이 Decorator를 정의해 둡니다.
상단의 {title}과 우측의 Body-Content만 각각의 파일들은 가지고 있으면 되는 것이죠.
즉, welcome.jsp와 search.cgi와 같은 파일에는 본문에 들어갈 내용만 가지고 있으면 되는 겁니다.
이제 Filter를 통해 decorator를 거치면서 하단과 같이 동일한 상단, 하단, 메뉴를 가지고 있는 페이지로 사용자에게 전송됩니다.
개념은 매우 간단하구요. Java 뿐만 아니라 CGI, PHP, ColdFusion 등에서도 SiteMesh를 활용할 수 있다고 합니다.
3. SiteMesh의 다운로드 및 설치
먼저 SiteMesh를 다운로드해야 하는데요. 현재 SiteMesh3 알파버전이 소개되고 있습니다.
SiteMesh2를 사용하려면 여기를 눌러서 sitemesh-2.4.2.jar 파일을 다운로드 하시면 됩니다.
설치하는 방법은 /web/WEB-INF/lib 폴더에 복사하면 됩니다. (여기에서 /web은 프로젝트의 Web Content 폴더를 의미합니다.)
그리고 /web/ 하위에 SiteMesh의 Decorator를 위한 폴더를 하나 만들고 SiteMesh를 적용할 jsp 파일을 하나 생성하면 됩니다.
/web/decorators/decorator.jsp
여기에서 decorators 폴더명이나 decorator.xml 파일명은 다른 것을 사용하셔도 됩니다.
나중에 SiteMesh 설정에서 맞춰서 지정만 해주면 되니까요.. ^^
실제 decorator.jsp에는 다음과 같은 형태로 지정하면 됩니다.
먼저 tablib를 설정해 주셔야 합니다.
그리고 <decorator:head/> <decorator:body/> 부분이 실제 페이지의 <head>와 <body>의 내용을 넣는 부분이라고 보시면 됩니다.
4. SiteMesh의 설정
이제 마지막으로 SiteMesh의 설정을 해보도록 하겠습니다.
3개의 XML 파일을 처리해 줘야 하는데요. 모두 /web/WEB-INF/ 하위에서 작업하면 됩니다.
1) web.xml
SiteMesh는 Filter 형태로 동작한다고 했으므로 web.xml에 필터 관련 설정을 해줘야 합니다.
특별히 수정할 사항 없이 그대로 지정해 주시면 됩니다.
2) sitemesh.xml
이어서 sitemesh와 관련된 설정을 해줘야 합니다.
이 부분에서도 맨 위의 <property> 부분의 value만 맞춰서 적어주시면 되는데요.
기본적으로 /web/WEB-INF/ 하위에 모든 설정파일을 둘 경우, 그대로 사용하셔도 됩니다.
3) decorator.xml
마지막으로 Decorator를 설정하는 부분을 살펴보도록 하시죠..
여기에서는 SiteMesh를 적용할 곳의 패턴들을 지정할 수 있습니다.
위 예에서는 /en과 /ko 하위의 모든 파일에 sitemesh를 적용하라는 것인데요.
excludes 를 활용해서 특정 파일이나 폴더만 제외할 수도 있습니다.
그리고 여기에서 사용하는 defaultdir 이나 page는 SiteMesh 다운로드 및 설치에서 생성한 폴더와 파일명이라는 것을 기억해 두시기 바랍니다.
SiteMesh를 자주 사용하면서도 한번도 정리한 적이 없었던 것 같아서 작성해봤네요.
처음 사용하시는 분들에게 도움이 되었으면 합니다.
'프로그래밍 > Web' 카테고리의 다른 글
| HTML 색상(Color) 코드표 (0) | 2012/05/03 |
|---|---|
| 웹 페이지 레이아웃을 설정하는 SiteMesh 세팅 및 활용에 대하여~ (0) | 2012/04/27 |
| 웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리 (0) | 2012/03/07 |
| N-Screen을 지원하는 미디어 쿼리에 대하여 (0) | 2012/02/15 |
| Mobile Web에서의 스와이프를 위한 SwipeView 활용 (0) | 2012/02/01 |
| CSS의 Margin, Padding, Border 개념을 명확하게 하자 (0) | 2012/01/20 |
클라우드 컴퓨팅 환경에서 PaaS(Platform as a Service)의 선두주자인 구글 앱 엔진에 대해서 정리해 보려고 합니다.
아래 글에서 설명한 것처럼 일정 용량을 무료로 제공하기 때문에 처음 시작하는데 부담 없이 테스트할 수 있는 것 같네요.
2012/02/06 - [리뷰/도서] - [도서] GAE로 시작하는 클라우드 컴퓨팅 - 구글 앱 엔진 활용하기
특히 자바 버전의 경우, 이클립스에 플러그인으로 제공해서 설치 및 실행 환경이 기존 자바 프로그래머에게 친숙하다는 것도 하나의 장점입니다.
그럼 구글 앱 엔진의 설치부터 하나씩 살펴보도록 하죠~~
1. 이클립스용 구글 플러그인 설치하기
이클립스 플러그인을 설치하는 방법은 많은 곳에서 이야기 하고 있으니 간단하게만 이야기 하도록 하죠.
플러그인을 설치하기 위해서 Help 메뉴에서 "Install New Software"를 선택하면 됩니다.
그리고 Work with: 입력창에 다음과 같이 입력하면 됩니다.
http://dl.google.com/eclipse/plugin/3.7
참고로 마지막 뒷자리의 3.7은 이클립스의 버전을 나타냅니다.
사용하는 이클립스가 Ganymede 버전일 경우 3.4이구요. Galieo 버전은 3.5이고, Helios 버전은 3.6입니다.
저는 Indigo를 사용하고 있어 3.7로 했습니다.
리스트에 나와있는 플러그인 중에서 다음 항목을 설치하면 됩니다.
Google App Engine Java SDK 1.6.4
Google Plugin for Eclipse 3.7
Google Web Toolkit SDK 2.4.0
이제 이클립스를 재시작하면 Google App Engine을 사용할 수 있는 환경세팅이 마무리됩니다. (Welcome to Google App Engine!!)
2. 구글 앱 엔진 프로젝트 생성
구글 앱 엔진의 첫 프로젝트를 생성해 보도록 하겠습니다.
이클립스의 툴 바에 보면 아래 그림과 같은 Google 아이콘이 하나 생긴 것을 확인할 수 있습니다.
해당 아이콘을 누르면 Google App Engine 프로젝트를 관리할 수 있는 메뉴들이 나타납니다.
여기에서 "New Web Application Project..."을 선택해서 새로운 프로젝트를 만들어 보겠습니다.
프로젝트 명은 "Mini"로 패키지는 "kr.co.acronym"으로 설정했습니다.
특히 하단의 Sample Code를 보시면 "Generate project sample code"가 체크되어 있는 것을 볼 수 있습니다.
기본적인 소스가 포함되어 있어 바로 실행해 볼 수 있도록 구성되어 있습니다.
바로 프로젝트를 실행해 보도록 하죠.
3. 구글 앱 엔진 프로젝트 실행
프로젝트 이름("Mini")를 선택한 후, 마우스 오른쪽 버튼을 클릭하고 "Run As"에서 "3 Web Application"을 선택하면 해당 프로젝트가 바로 샐행이 됩니다.
Console 창에 실행되는 내용이 나타나고 실행이 완료되면 Development Mode 창에 다음과 같이 나타납니다.
해당 URL을 더블클릭하면 처음 만든 (아니 클릭만 한) 구글 앱 엔진 어플리케이션이 바로 나타납니다.
처음 실행할때는 오래 걸리거나 실행 여부를 물어볼 수 있으니 차분히 기다려 주시면 됩니다. ^^
텍스트를 입력하고 "Send" 버튼을 클릭하면 다음과 같이 나타납니다.
단지 클릭만 했는데 깔끔하게 생긴 어플리케이션이 하나 만들어졌네요. ^^
4. 구글 앱 엔진 프로젝트 배포
만들어진 Google App Engine 프로젝트를 배포하기 위해서는 구글 계정이 있어야 하고 App Engine에 가입되어 있어야 합니다.
회원 가입은 http://appengine.google.com에서 진행하면 됩니다.
회원 가입 후 Create Application을 통해서 애플리케이션을 하나 생성하도록 되어 있습니다.
이때 Application Identifier는 유일해야 하므로 반드시 "Check Availability"로 확인하셔야 합니다. (저는 xmlmanager로 했네요)
이제 배포를 시작해 보도록 하겠습니다.
이클립스 좌측 하단에 보면 구글 계정을 설정하는 부분이 있습니다.
구글 앱 엔진 예전버전에서는 이 부분이 배포하면서 설정했었는데요. 최근에는 하단에 로그인하는 형태로 변경되었으니 참고하시기 바랍니다.
"Sign in to Google.."을 선택하면 다음과 같은 로그인 화면이 나타납니다.
본인의 구글 계정으로 로그인하면 구글 앱 엔진으로 배포할 수 있습니다.
배포는 프로젝트 생성할 때 사용한 구글 툴바를 활용합니다.
"Deploy to App Engine.."을 클릭해서 배포할 수 있습니다.
다음과 같이 "Browse.."를 눌러 해당 프로젝트를 설정했는데 오류 메시지가 보입니다.
이때는 하단의 "App engine project settings..."를 선택해 프로젝트 세팅을 해줘야 합니다.
다음 그림의 App Engine 세팅에서 Application ID는 구글에서 생성했던 Application Identifier를 적어주면 되구요. 버전은 순차적으로 올려주면 됩니다.
나중에 버전별로 관리툴에서 변경할 수 있어서 버전 관리도 잘 해놓으시면 도움이 될 것 같네요.
이제 OK를 선택하고 Deploy를 시작하면 서버로 업로드가 됩니다.
제 사이트에서도 로컬과 동일한 화면을 볼 수 있네요~
가끔 배포중에 권한이 없다고 나오는 경우가 있습니다. (404 Not Found)
저의 경우에는 계정을 잘못되어서 그런 것이었는데요.
혹시 그런 경우가 나오면 먼저 계정 설정을 확인해 보시구요.
다음 링크( https://appengine.google.com/promo/java_runtime )를 눌러서 자바 런타임을 활성화 해보는 것도 방법일 것 같네요.
다음에는 Google App Engine의 기본 구조를 소스를 중심으로 한번 정리해 보도록 할께요.
'프로그래밍 > Java' 카테고리의 다른 글
| 하둡(Hadoop) 설치부터 테스트까지 정리~ (0) | 2012/05/18 |
|---|---|
| 구글 앱 엔진(Google App Engine) 자바 버전 설치 및 프로젝트 생성/실행/배포 ~ (0) | 2012/04/24 |
| 프로그래밍 주석에 대한 정리 및 몇가지 팁~ (0) | 2012/04/16 |
| float와 double 타입.. (0) | 2011/11/01 |
| javadoc 생성시 한글 깨질때.. (0) | 2011/10/17 |
| URL 기반의 QRCode 생성하는 JSP 소스~ (0) | 2011/10/14 |
주석이 왜 필요한가?
프로그래밍을 배울 때 변수, 제어문 등에 앞서 주석을 지정하는 방법에 대해서 가장 먼저 설명하는 것을 볼 수 있습니다.
특히 예전에는 주석을 잘 활용하는 것이 중요하다는 이야기를 많이 했었는데요.
요즘에는 프레임워크가 발달하면서 상대적으로 주석이 필요 없다는 의견도 많은 것 같습니다.
실제 프로그래밍을 하다보면 6개월에서 1년 정도 지난 후 자신의 소스를 봐도 생소하게 느껴질 것입니다.
이럴 때 초기에 주석을 달아놨더라면.. 하는 생각을 한번쯤은 해 봤을 겁니다.
즉, 주석은 다른 사람이 소스를 봤을 때 빨리 이해할 수 있도록 적는 것이 중요합니다.
가끔 프로그램 소스보다 주석이 많은 경우가 있는데 이는 오히려 가독성을 떨어뜨리는 결과를 가져오기도 합니다.
그래서 꼭 필요한 부분에 간결하게 적는 습관을 들이는 것이 중요하다고 생각하네요.
주석으로 문서화를 ~
또한, Javadoc이나 Doxygen과 같은 툴을 활용하면 주석을 그대로 개발 문서로 변경할 수도 있습니다.
이를 위해 체계적으로 주석을 설정하는 방법도 팀 내부에서는 고민을 해 볼 필요도 있겠지요.
예를 들면, Javadoc을 통해서 컴파일하면 java api와 같은 형태의 HTML 문서를 생성해 주게 됩니다.
이클립스에서 컴파일된 Javadoc을 살펴보면 다음과 같이 나타납니다.
Javadoc에 대해서는 기회가 되면 다시 한번 정리해 보도록 하죠.. ^^
주석 팁 하나~
마지막으로 간단한 주석의 우선 순위를 활용한 팁을 하나 적어볼께요.
90년대에 C언어 프로그래밍 할 때 처음 사용했던 방식인데, Java에서도 역시 잘 되더라구요.
위와 같이 사용하면 윗 부분이 주석이 되고, 맨 위의 주석의 앞부분에 /를 하나 추가하면 윗 부분이 주석이 됩니다.
위와 같은 Test 계정을 잠시 설정할 때 유용하게 활용했었네요~~
'프로그래밍 > Java' 카테고리의 다른 글
| 하둡(Hadoop) 설치부터 테스트까지 정리~ (0) | 2012/05/18 |
|---|---|
| 구글 앱 엔진(Google App Engine) 자바 버전 설치 및 프로젝트 생성/실행/배포 ~ (0) | 2012/04/24 |
| 프로그래밍 주석에 대한 정리 및 몇가지 팁~ (0) | 2012/04/16 |
| float와 double 타입.. (0) | 2011/11/01 |
| javadoc 생성시 한글 깨질때.. (0) | 2011/10/17 |
| URL 기반의 QRCode 생성하는 JSP 소스~ (0) | 2011/10/14 |
아이폰에 비해 안드로이드는 개발에 제한이 많이 없습니다.
아이폰은 Sandbox와 같은 형태로 Application 간의 영역 공유가 제한되어 있지만, 안드로이드에서는 Intent를 통해서 자유롭게 영역을 넘어들 수 있게 됩니다.
그렇다면 음성 처리와 관련되어 안드로이드에서는 어디까지 가능할까요?
관련된 API들을 한번 정리해 봤습니다.
안드로이드에서 음성을 처리하는 가장 기본적인 SDK는 바로 MediaPlayer입니다.
만약 통화 중 녹음과 같은 기능을 구현하고 싶다면 MediaRecorder와 같은 클래스를 활용하면 됩니다.
MediaRecorder의 AudioSource를 활용해서 해당 기능들을 구현할 수 있을 겁니다.
MediaRecorder의 state diagram은 다음 그림과 같네요.
만약 통화 관련 음성들을 처리하고자 할 경우에는 Telephony 클래스를 활용할 수 있습니다.
이중 TelephonyManager를 사용하면 폰상태(getCallxxx), 디바이스정보(getDevicexxx), Sim정보(getSimxxx) 등을 가져올 수 있으며
통화 시작, 종료와 같은 이벤트를 통해 해당 시그널 발생시 원하는 작업을 처리할 수 있을 겁니다.
이외에도 Audio 관련한 API로 AudioCode, AudioEffect, AudioFormat, AudioManager 등 다수 존재하고 있습니다.
추가로 Voice와 관련해서 voicemail과 같은 클래스도 있네요.
실은 이러한 API를 확인해 본 것은 통화중 음성 신호를 가져와 변조해서 다시 통신 시그널로 보낼 수 있을까 해서였습니다.
그러나 현재까지 확인한 바로는 통화중 음성 신호를 녹음 등을 위해 가져올 수는 있었지만 다시 통신 시그널로 보내는 API는 없었습니다.
아마도 퀄컴과 같은 모뎀 칩에서 H/W적으로 통신 시그널, 즉 PCMDATA를 보내기 때문인 것 같습니다.
물론 Software Block으로 구성한 음성 인코딩 기능이 이런 칩셋에 포함되어 있겠지만 외부로는 공개되어 있지 않은 것 같네요.
VOIP의 SIP / RTP 프로토콜을 활용하면 이러한 문제를 어느정도 해결할 수 있겠지만
아무래도 중계기를 거쳐야 하는 제한점이 존재할 것 같네요..
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리 (0) | 2012/04/30 |
|---|---|
| 안드로이드 음성 처리 API에 대한 정리 (0) | 2012/04/01 |
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
요즘 글로벌 홈페이지들을 살펴보면 Korean / English와 같이 언어별로 구분되어 선택할 수 있도록 되어 있습니다.
오늘은 이와 같이 접속자에 따른 홈페이지의 언어별 분류를 어떻게 하는지 정리해 보도록 하겠습니다.
가장 확실한 방법은 역시 쿠키를 활용하는 것입니다.
사용자가 선택한 언어를 쿠키에 저장해 두고 홈페이지가 열릴 때마다 보여주는 방법이죠..
한번 설정한 언어 정보를 기반으로 계속 보여주기 때문에 지속적으로 방문하는 사용자를 위해 일반적으로 많이 사용되는 방법입니다.
그러나 사용자가 선택하기전에 어떤 언어를 먼저 보여줘야 할지를 결정하는 부분이 이슈가 됩니다.
이때 사용하는 것이 접속자의 IP를 기반으로 국가를 파악하고 언어를 설정하는 방식을 사용합니다.
그렇다면 IP를 기반으로 국가 정보를 가져오는 문제를 해결해야 하는데요.
이와 관련해서 MaxMind(http://www.maxmind.com/)에서 API 형태로 서비스를 제공하고 있습니다.
관련 API 중 "GeoIP City"와 "GeoLite City"가 있는데요.
이 중 "GeoIP City" 서비스는 유료로 제공되고 있으며, 사용 형태에 따라서 $20, $50, $370로 구성되어 있네요.
"GeoLite"는 "GeoIP"와 비교해서 정확도 측면에서 약간 떨어지고 업데이트 주기가 월 단위로 이루어진다고되어 있습니다만
제가 테스트 해보니 활용하는데 있어서 큰 문제는 없을 것 같았습니다.
그러면 GeoIP API(http://www.maxmind.com/app/support)를 통해서 IP를 가지고 국가를 가져오는 것을 테스트 해보도록 하겠습니다.
여러 언어를 지원하고 있는데요. 저는 PHP를 가지고 해보도록 하겠습니다.
PHP 관련 파일들을 받으려면 http://www.maxmind.com/app/php로 가서 Pure PHP Module의 download를 누르면 됩니다.
상당히 많은 소스가 있는데요. 저는 먼저 sample.php를 받아봤습니다.
sample.php의 내용은 다음과 같습니다.
소스를 살펴보면 일단 6번째 줄에 "geoip.inc" 파일이 include 한 것을 알 수 있습니다. 위 링크에서 해당 파일을 다운로드 합니다.
그리고 11번째 줄을 보면 GeoIP.dat 파일을 open하는 부분이 있습니다.
이 파일이 매월 업데이트되는 IP와 국가를 매핑한 파일인 것 같습니다. 해당 파일은 다음 경로에서 받을 수 있습니다.
http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
압축을 풀고 서버에 넣은 다음 해당 경로를 11번째 줄에 변경해서 보여주면 됩니다.
위 예제에서는 국가 코드와 국가 명을 보여주고 있습니다.
실질적으로 우리가 필요한 것은 국가 코드만 있으면 되므로 geoip_country_code_by_addr() 메소드만 사용하면 될 것 같습니다.
그럼 위 예제를 수정해서 IP에 따라 언어별 페이지를 보여주는 PHP 소스를 작성해 보겠습니다.
위 소스를 보시면 금방 이해가 될 겁니다.
PHP의 "REMOTE_ADDR"변수를 활용해서 사용자 IP를 가져오고
GeoIP API를 통해 국가 코드를 확인한 다음 header()를 활용해서 리다이렉트하도록 구성했습니다.
최초 IP 접속시에는 이렇게 해서 언어를 확인하고 이후부터는 쿠키를 활용하면 되겠죠..
'프로그래밍 > Web' 카테고리의 다른 글
| HTML 색상(Color) 코드표 (0) | 2012/05/03 |
|---|---|
| 웹 페이지 레이아웃을 설정하는 SiteMesh 세팅 및 활용에 대하여~ (0) | 2012/04/27 |
| 웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리 (0) | 2012/03/07 |
| N-Screen을 지원하는 미디어 쿼리에 대하여 (0) | 2012/02/15 |
| Mobile Web에서의 스와이프를 위한 SwipeView 활용 (0) | 2012/02/01 |
| CSS의 Margin, Padding, Border 개념을 명확하게 하자 (0) | 2012/01/20 |
HTML4와 CSS2에서는 다양한 미디어 타입에 따라 처리할 수 있는 스타일시트를 지원하고 있습니다.
스마트폰, 태블릿, 스마트TV 등 다양한 화면의 크기를 가진 기기들이 배포됨에 따라 관심을 받게 된 것 같습니다.
먼저 미디어 쿼리를 적용한 사이트(http://mediaqueri.es/)를 모아둔 곳을 한번 살펴보시죠.
One-Source Multi-Use 측면이나 모바일 웹 개발이 증가하면서 미디어 쿼리를 적절하게 활용하는 것이 필요할 것 같습니다.
미디어쿼리에 대한 W3C의 문서는 현재 Candidate Recommendation 상태로 거의 현재 상태로 표준이 될 것 같네요.
미디어쿼리는 CSS에 설정을 통해서 화면 크기 등에 따라 다른 형태로 보여줄 수 있도록 구현하는 것입니다.
이를 위해 media 라는 지시자를 통해서 CSS에 설정하게 됩니다.
이런 미디어 쿼리를 지정하는 방법은 크게 세가지가 있습니다.
1. CSS 파일을 나누어서 가져오기
<link rel="stylesheet" media="screen and (max-width:480px)" href="example.css">
2. <style> 태그에 media 속성으로 지정하기
3. CSS 내에 @media 사용하기
@media all and (max-width:480px) { }
이 중에서 일반적으로 CSS 내에 @media 태그를 통해서 적용하는 방법을 많이 사용하는 것 같습니다.
미디어 쿼리에서는 미디어 타입을 지정해서 구분할 수 있습니다.
위 예제에서 screen, all 과 같은 것들을 미디어 타입이라고 하는데요.
여러가지 타입들을 지원하고 있지만 주로 사용하는 것은 다음과 같습니다.
- all - 모든 미디어 타입
- screen - 컴퓨터 스크린을 위한 용도
- print - 인쇄 용도
미디어 타입과 더불어 다양한 조건들을 지정할 수 있습니다. 일부만 살펴보면 다음과 같습니다.
여러 조건들을 결합해서 활용도 가능합니다.
- 가로 너비 - width, min-width, max-width
- 세로 높이 - height, min-height, max-height
- 단말기의 가로 너비 - device-width, min-device-width, max-device-width
- 단말기의 세로 너비 - device-height, min-device-height, max-device-height
- 화면 회전 - orientation
- 화면 비율 - aspect-ratio, min-aspect-ratio, max-aspect-ratio
단, 미디어 쿼리로는 기능상의 분기는 어렵습니다. 이런 경우 기존의 자바 스크립트나 웹 프로그래밍을 통해서 처리해야 할 것 같습니다.
또한 모바일 기기와 PC를 CSS 미디어쿼리로 구분하는 것이 아니라 기존처럼 UserAgent와 같은 값을 통해서 자바스크립트로 확인해야 합니다.
미디어 쿼리는 단지 화면의 크기와 같은 속성을 통해서 처리하게 됩니다.
마찬가지로 orientation과 같은 속성도 모바일 뿐만 아니라 PC에서도 가로와 세로 길이에 따라서 구분하게 됩니다.
미디어 쿼리의 설정에 대한 보다 자세한 사항은 다음 사이트들을 참조하면 됩니다.
http://mydeute.com/txp/article/631
미디어 타입과 조건들을 PC, iPhone, iPad, 스마트폰과 같은 디바이스별로 설정해 놓은 값들은 다음 사이트를 참고하면 도움이 되겠네요.
http://firejune.com/1633
황혜원님이 추가해준 링크도 포함합니다. 참고하시기 바랍니다.
http://html.nhncorp.com/blog/textyle/42284
'프로그래밍 > Web' 카테고리의 다른 글
| 웹 페이지 레이아웃을 설정하는 SiteMesh 세팅 및 활용에 대하여~ (0) | 2012/04/27 |
|---|---|
| 웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리 (0) | 2012/03/07 |
| N-Screen을 지원하는 미디어 쿼리에 대하여 (0) | 2012/02/15 |
| Mobile Web에서의 스와이프를 위한 SwipeView 활용 (0) | 2012/02/01 |
| CSS의 Margin, Padding, Border 개념을 명확하게 하자 (0) | 2012/01/20 |
| GIS 지도 좌표계에 대한 정리~ (0) | 2011/12/14 |
아파치 로그를 분석하는 awstats에 대해서는 지난번에 블로깅을 한 적이 있습니다.
2011/08/20 - [프로그래밍/리눅스] - 웹로그 분석 프로그램 AWStats 활용
그런데 최근 로그 파일을 분석하려고 해보니 2달 정도 쌓이 로그가 6G 정도 되더라구요.
(월별로 쌓도록 구성했어야 했는데.. 설정을 변경해야 겠네요. ㅠㅠ)
awstats가 분석하다가 결국 out of memory라는 말을 남기고 그대로 종료해 버렸습니다.
그래서 로그 파일을 분할하는 프로그램을 찾아봤는데요.
cronolog(http://cronolog.org/)라고 하는 프로그램이 있더군요.
원래는 아파치 로그가 쌓일때 월별, 날짜별로 저장하도록 필터를 쉽게 설정할 수 있는 프로그램이라고 합니다.
그런데 여기 실행파일을 보면 cronosplit 이라는 파일이 있습니다.
바로 이 파일을 활용해서 지정된 형태로 기존 파일을 분할 할 수 있었습니다.
그럼 cronolog의 설치와 사용에 대해서 살펴보도록 하죠.
wget을 이용해서 소스 파일을 받습니다. (아 우분투에서 테스트했습니다.)
> wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
압축을 풀고 소유권을 조정한 후 /usr/local 폴더로 옮겼습니다.
이제 컴파일을 진행했습니다.
컴파일 후 살펴보니 cronosplit 프로그램은 src 폴더에 있었네요.
파일에 실행 권한이 없어서 실행 권한을 부여했습니다.
> cd /etc/usr/local/cronolog-1.6.2/src
자 이제 파일 분할을 시작해 보겠습니다.
template를 통해서 파일 분할해서 저장할 형태를 지정할 수 있는데요.
첫번째는 일별로, 두번째는 월별로 저장하는 겁니다.
> ./cronosplit access_log --template=%Y%m%d_access_log
> ./cronosplit access_log --template=%Y%m_access_log
'프로그래밍 > 리눅스' 카테고리의 다른 글
| 아파치 로그를 쉽게 필터링 할 수 있는 프로그램 cronolog~ (0) | 2012/02/03 |
|---|---|
| 리눅스 JSP활용을 위한 JDK/Tomcat 설치 (0) | 2011/10/03 |
| CentOS Apache 설치 후 init.d에 실행 스크립트로 서비스 등록하기 (자동실행 설정) !! (0) | 2011/09/24 |
| CentOS Tomcat 설치 후 init.d에 실행 스크립트 만들어 서비스 등록하기 (자동실행 설정)~ (0) | 2011/09/21 |
| 아파치 재시작 없이 로그 삭제하기 (0) | 2011/09/09 |
| 웹로그 분석 프로그램 AWStats 활용 (0) | 2011/08/20 |


