images

[Node.js] Application Stack

웹어플리케이션이란 무엇인가요?

– 사용자가 웹브라우저로 웹어플리케이션을 이용할수 있다.
– 사용자가 http://domain/start를 요청하면 파일 업로드 폼이 들어있는 웰컴페이지를 볼 수 있어야 한다.
– 업로드할 이미지 파일을 선택해서 폼으로 전송하면, 해당 이미지는 http://domain/upload로 업로드 되어야 하며, 업로드가 끝나면 해당 페이지에 표시된다.

위의 케이스를 만족시키기 위해서 구현해야하는 부분은 어떤걸까요?

– 우리는 웹페이지를 제공해야 한다. 따라서 HTTP 서버가 필요하다.
– 우리는 서버는 어떤 URL 요청(request)을 받았는지에 따라 다르게 응답해야 한다. 따라서, 요청과 요청을 처리할 핸들러들을 연결짓기 위한 라우터(router) 같은 것이 필요하다.
– 서버로 도착한 요청들, 그리고 라우터를 이용해서 라우팅된 요청들을 만족시키기 위해서 실제적인 요청 핸들러(request handlers)가 필요하다.
– 라우터는 아마도 들어오는 어떠한 POST 데이터들도 다룰 수 있어야 한다. 그리고 해당 데이터를 다루기 편한 형태로 만들어 request handler 들에게 넘겨야 한다. 따라서 요청 데이터 핸들링(request data handling)이 필요하다.
– URL에 대한 요청을 다루는 것뿐 아니라 URL이 요청되었을 때 내용을 표시할 필요도 있다. 이 말은 즉, request handler 들이 사용자 브라우저로 콘텐트를 보내기 위해 사용할 수 있는 뷰 로직(view logic)이 필요하다는 이야기다.
– 마지막이지만 중요한 것으로는, 사용자가 이미지들을 업로드 할 수 있어야 하니까, 세부 사항을 다루는 업로드 핸들링(upload handling)이 필요할 것이다.

“웹페이지를 제공하고 Http요청을 받을수 있어야한다”는 요구의 전체를 PHP만으로는 이룰수가 없습니다. PHP를 이용하여 이러한 요구사항을 만족시키기 위해서는 Apache Http서버를 설치해야합니다.

하지만 node의 경우는 어플리케이션뿐 아니라 Http서버를 통으로 구현할수 있습니다. 따지고보면 웹어플리케이션과 웹서버는 기본적으로 동일합니다. 그러면 이제 Http서버구현을 시작해봅시다!.

6(50)

Hadoop의 기본포트(Port)

하둡은 내부데몬(NameNode, SecondaryNameNode, DataNode, JobTracker, TaskTracker)간의 통신을 위해 다양한 포트를 사용합니다. 하둡에서 사용하는 포트가 방화벽등에 의해 막혀있다면 정상적으로 작동하지않을수 있습니다.

파라미터  기본값  용도  설정 파일
 dfs.secondary.http.address  50090 SecondaryNameNode 웹 서버 주소 및 포트  hdfs-site.xml
 dfs.datanode.address  50010 DataNode 주소 및 포트  hdfs-site.xml
 dfs.datanode.http.address  50075 DataNode 웹 서버 용 주소 및 포  hdfs-site.xml
 dfs.datanode.ipc.address  50020 DataNode ipc 서버용 주소 및 포트  hdfs-site.xml
 dfs.http.address  50070 NameNode 웹 어드민용 주소 및 포트  hdfs-site.xml
 mapred.job.tracker.http.address  50030 JobTracker 웹 서버용 주소 및 포트 mapred-site.xml
 mapred.task.tracker.http.address  50060 TaskTracker 웹 서버용 웹 주소 및 포트  mapred-site.xml

위와 같은 하둡의 포트를 열어줘야합니다.

개발을 위해 모든 포트를 개방하시려면 iptables설정을 해제하시는게 빠를수 있겠습니다.
$ su -root
$ service iptables stop
$ chkconfig iptables off

6(50)

Install Hadoop on MacOSX

MySQL에 이어 Hadoop 설치방법을 포스팅합니다.

역시 HomeBrew를 이용해서 설치를 진행하려하는데요.
$ ruby -e “$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)”
(기존에 포스팅했던 내용이라 간단히..)

* Step 1. Hadoop 설치하기

2014.1.5 기준으로 Hadoop 1.2.1 을 설치합니다. 2.x버전도 있지만 Alpha버전이므로 1.2.1을 추천합니다.

MacOSX 에 현재 설치된 Java버전을 미리 확인하시기 바랍니다.

Java 1.7버전에서는 Hadoop 실행시에
“Unable to load realm info from SCDynamicStore” 이러한 오류를 발생시킬수 있습니다.
Java 1.6버전으로 설정하셔야합니다.

 

* Step 2. Hadoop 설정하기

설정해야할 파일이 몇개 있습니다.
먼저 brew를 통해 설치된 Hadoop폴더로 이동합니다.
폴더명은 “/usr/local/Cellar/hadoop/1.2.1/libexec” 입니다.

– conf/core-site.xml
– conf/mapred-site.xml
– conf/hdfs-site.xml

3개의 파일을 수정합니다.

== conf/core-site.xml ==

== conf/mapred-site.xml ==

== conf/core-hdfs.xml ==

* Step3. Format Hadoop FileSystem & Start Hadoop
위와 같이 설정을 하시고 터미널에 Command를 입력하면 됩니다.

* bin/start-all.sh 할때 오류발생시 대처방안
Unable to load realm info from SCDynamicStore put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/travis/input/conf. Name node is in safe mode.

conf/hadoop-env.sh 파일을 수정합니다.

Java7에서는 여전히 문제가 있는것 같습니다. 1.6으로 설정하시길 바랍니다. (다운로드 : http://support.apple.com/kb/DL1572)

참고URL : http://stackoverflow.com/questions/7134723/hadoop-on-osx-unable-to-load-realm-info-from-scdynamicstore

* Step4. Hadoop Processes are running

# Run a Hadoop example :

Hadoop logs: /usr/local/Cellar/hadoop/1.2.1/libexec/logs/
Web interface for Hadoop NameNode: http://localhost:50070/
Web interface for Hadoop JobTracker: http://localhost:50030/

homebrew-mysql-tutorial-featured-img

MacOSX에서 Homebrew사용해서 MySQL설치하기

# HomeBrew 설치방법은 이전 포스팅(http://blog.marines.co.kr/archives/989) 을 참고하면 됩니다.

Brew가 설치된 상태에서 Git설치를 하고

Homebrew update를 합니다.

 

* 이제부터 MySQL설치방법입니다.
Terminal을 사용해서 install을 합니다.

자동으로 설치가 진행되지만 바로 사용하기엔 Root권한 암호설정도 안되어 있어서 별도의 작업이 필요합니다.

MySQL서버를 시작합니다.

## MySQL에서 Root암호 설정
mysqladmin을 이용하여 root 암호 설정

MySQL을 처음 설치하면 root 암호가 설정되어 있지 않기 때문에 반드시 설치 후 바로 root 암호를 먼저 설정해주세요.%%% root 암호를 설정하기 위해서는

이러한 명령을 실행하면 됩니다. 실행하면 패스워드를 입력하라고 하는데 처음 root의 패스워드는 없으므로 그냥 엔터를 치시면 root 패스워드가 변경됩니다.

* update문을 이용하여 root 암호 설정

마지막으로 패스워드가 재대로 변경되었는지 테스트를 합니다.

* 사용권한 설정하기
‘GRANT’ 명령을 이용하면 쉽게 사용자 추가 및 권한 설정이 가능합니다. (MySQL Manual 4.3.5)

일반 사용자 추가

특정 이름의 데이터베이스에 대한 모든 권한을 가지는 사용자 추가

‘dbuser_’으로 시작되는 데이터베이스에 대한 모든 권한을 가지는 ‘dbuser’ 사용자 계정 추가%%% 이런식으로 계정을 만들면 새로운 사용자에 대한 개별적인 데이터베이스 권한 설정을 생략할 수 있습니다.

모든 권한을 준다면 아래와 같은 방법을 하는것이 더욱 편리힙니다.

첫번째 localhost?로컬 호스트 (DB가 자기컴퓨터에 깔려 있는경우..에만 접속을 허용하겠다는 뜻입니다.

두번째 문장은 로컬 호스트를 제외하고는 모든 ip에서 접근을 시키겠다는 내용입니다.

세번째는 c클래스만 허용하겠다는 의미 입니다. xxx.xxx.%.% 면 B클래스 xxx.%.%.%면 A클래스로 제한을 할수 있습니다.

그리고 변경된 내용을 메모리에 반영하기 위해 다음 명령을 실행합니다.

이렇게 MySQL을 설정해 놓으면 사용자가 다른 호스트에서도 접속할 수 있고 테이블 추가 삭제 등도 할 수 있습니다.

:: Reference Post ::
http://benjsicam.me/blog/how-to-install-mysql-on-mac-os-x-using-homebrew-tutorial/
http://blog.saltfactory.net/121
http://gpgstudy.com/gpgiki/MySQL%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%99%80%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0

CentOS_64-bit-2013-05-25-19-46-59 (1)

Linux (CentOS 6.4) 설치

A.      OS 다운로드

  1. http://ftp.daum.net/centos/
  2. 6.4 / Minimal / 64bit 버전 설치 – http://ftp.daum.net/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso

 

B.      OS 설치

CentOS_64-bit-2013-05-25-19-46-59 (1)
디스크 부팅 첫 화면 – GUI 설치는 두 번째 선택. (vm에서는 첫번째로 해야 GUI모드로 설치됨)

CentOS_64-bit-2013-05-25-19-47-47
설치 디스크 검사 여부 선택.

CentOS_64-bit-2013-05-25-19-50-18
GUI 설치 모드로 진입.

CentOS_64-bit-2013-05-25-19-50-58
한국어 선택

CentOS_64-bit-2013-05-25-19-51-03
키보드 선택

CentOS_64-bit-2013-05-25-19-51-11
기본 저장 장치 선택

CentOS_64-bit-2013-05-25-19-51-21
모든 데이터 삭제 선택

CentOS_64-bit-2013-05-25-19-51-43

컴퓨터 이름 설정 / 네트워크 설정 클릭

CentOS_64-bit-2013-05-25-19-52-39
장착 된 네트워크 어댑터 목록, 어댑터를 선택 후 변경하기 클릭.

CentOS_64-bit-2013-05-25-19-55-32
자동으로 연결 체크 / IPv4 설정 탭 선택 / 네트워크 정보 입력 후 적용.

CentOS_64-bit-2013-05-25-19-55-50
시스템 시간대 선택

CentOS_64-bit-2013-05-25-19-56-04
root 계정 암호 설정

CentOS_64-bit-2013-05-25-19-56-19
설치 방식 선택 – 파티션 수동 구성을 위해 [사용자 레이아웃 만들기] 선택

CentOS_64-bit-2013-05-25-20-18-55
장착되어 있는 하드 디스크 목록이 나온다. 그림은 20GB 디스크 3개가 잡혀있는 상태.

CentOS_64-bit-2013-05-25-20-19-28
시스템 드라이브로 사용할 디스크를 선택 후 만들기 클릭.

CentOS_64-bit-2013-05-25-20-20-11
파일시스템 구성 – root 파티션 선택 후 첫 번째 파티션으로 만듦에 체크.

CentOS_64-bit-2013-05-25-20-20-37
기타 파티션 설정.

CentOS_64-bit-2013-05-25-20-20-53 CentOS_64-bit-2013-05-25-20-21-59 CentOS_64-bit-2013-05-25-20-22-15
첫 번째 디스크 파티션 분할 완료. 나머지 데이터 저장소로 사용 할 2개의 디스크는 LVM으로 구성. 만들기 클릭.

CentOS_64-bit-2013-05-25-20-22-23
LVM 물리 볼륨 선택. 생성 클릭.

CentOS_64-bit-2013-05-25-20-22-41
해당 디스크만 체크한 후 최대 용량으로 선택. 확인. 세 번째 디스크도 같은 방식으로 처리.

CentOS_64-bit-2013-05-25-20-23-09
2개의 디스크가 LVM 물리 볼륨으로 지정이 되었음. 다시 만들기를 클릭한 후 LVM볼륨 그룹을 생성. 생성 클릭.

CentOS_64-bit-2013-05-25-20-23-26
볼륨 그룹 명은 적당히 지어준 후 확인 클릭.

CentOS_64-bit-2013-05-25-20-23-34
40GB 의 LVM 볼륨 그룹이 생성된 모습. LVM 논리 볼륨을 생성하기 위해 만들기 클릭.

CentOS_64-bit-2013-05-25-20-24-00
LVM 논리 볼륨 체크. 앞서 만든 그룹 선택 후 생성 클릭.

CentOS_64-bit-2013-05-25-20-24-11
마운트 지점을 /data 로 설정 후 확인 클릭.

CentOS_64-bit-2013-05-25-20-24-18
파티션 구성 완료. 다음 클릭.

CentOS_64-bit-2013-05-25-20-24-41
경고 메시지. 포맷 클릭.

CentOS_64-bit-2013-05-25-20-24-49
경고 메시지. 기록 클릭.

CentOS_64-bit-2013-05-25-20-27-43
부트로더 설정. 기본으로 둔 채 다음 선택하면 설치가 진행됨.

CentOS_64-bit-2013-05-25-20-27-55
설치 화면

CentOS_64-bit-2013-05-25-20-28-00CentOS_64-bit-2013-05-25-20-28-44CentOS_64-bit-2013-05-25-20-30-34
설치 완료. 재부팅 클릭.

CentOS_64-bit-2013-05-25-20-31-34
정상적으로 설치가 완료 된 후 재부팅 된 모습.

CentOS_64-bit-2013-05-25-20-38-48
Root 계정 입력 후 로그인.

CentOS_64-bit-2013-05-25-20-38-59
네트워크 정상 연결 확인. # ping 168.126.63.1

20131231_001123

Apache Mahout

20131231_001123

Mahout 이란?

– 힌두어로 “코끼리를 모는 사람”이라는 뜻. Hadoop(하둡)의 로고가 코끼리인 것을 이용.
– Apache Lucene 프로젝트의 하위프로젝트로 시작되었다가, Open Source기반 협업 필터링 프로젝트 Taste를 흡수하면서 Apache Mahout으로 발전.
– 하둡을 기반으로 맵리듀스(Map Reduce)를 이용해 클러스터링, 분류, 분석 작업을 수행할수 있음.
– 대용량 데이터분석이 가능하며 확장성을 제공하는 기계학습 라이브러리.

 

제공되는 분석 기능들

– 협업 필터링
– 분류 : 특정 아이템이 어떤 분류에 속하는지 예측
– 클러스터링 : 비슷한 아이템들끼리 그룹핑
– 패턴 마이닝 : 빈번하게 발생하는 패턴을 찾음
– 그외에 회귀분석, 진화알고리즘, 벡터유사도 등 다양한 분석기능 제공

20131231_000054

추천시스템이란?

추천시스템은 정보 필터링(IF)기술의 일종으로, 특정 사용자가 관심을 가질만한 정보(영화,음악,책,뉴스,이미지,웹페이지 등)를 추천하는 것이다.

[추천시스템이 사용되는 곳] – Amazon 상품추천
– Netflix 영화추천
– Facebook 친구추천
– 휴대폰 벤더 : 다른통신사로 이탈확률 높은 고객예측

[추천효과]
– Netflix : 대여되는 영화의 2/3가 추천으로부터 발생
– Google News : 38%이상의 조회가 추천에 의해 발생
– Amazon : 판매의 35%가 추천으로부터 발생
– Netflix Prize (~2009) : Netflix에서 주관하는 경연대회로 영화선호도를 가장 잘 예측하는 협업필터링 알고리즘에 수상 (USD $1,000,000)

 

이러한 추천시스템중 대표적인 방식으로 “협업필터링” 방식이 있다.

많은 사용자들로부터 누적된 대규모의 데이터를 활용하여 이를 분류하고, 분류된 데이터의 기준을 기반으로 개로운 데이터에 대입하여 분류하는 방법.
사용자들의 과거 경향이 미래에도 그대로 유지될것이라는 전제를 바탕으로 함.

[사용자기반 협업필터링]
– 비슷한 선호도를 가지는 다른 고객들의 상품에 대한 평가에 근거하여 추천.
– 우선 비슷한 성향을 가진 이웃을 찾고, 그 이웃의 선호도를 이용함.
– 이웃을 선정하는 기법에는 클러스터링, K-최대근접이웃(K-mins), 베이지안 네트워크 등이 있다.
– 두 고객이 모두 평가를 한 상품이 있어야 하고, 오직 두 고객사이에서만 상관관계를 구할수 있는 제약이 있다.
– SNS의 친구 추천등에서 사용

20131231_000054

[아이템 기반 협업필터링]
– 사람들이 과거에 좋아했던 상품과 비슷한 상품을 좋아하는 경향이 있는 것을 기반으로 함.
– 고객이 선호도를 입력한 기존 상품들과 예측하고자 하는 상품과의 유사도를 계산하여 선호도를 측정.
– 고객들의 선호도만을 이용하기 때문에 고객간의 유사도는 고려되지않음.
– 아마존,넷플릭스의 상품추천 등에서 사용
20131231_000117

 

[출처 : http://www.slideshare.net/pitzcarraldo/mahout-cook-book (SlideShare) ]

[Android] Hardware세팅에 GPS on/off 여부 확인하기

간단하게 LocationManager를 사용하여 GPS활성화 여부를 체크하는 방법입니다.
LocationManager의 isProviderEnabled 함수를 사용하여 Boolean 값을 리턴 받습니다.
비활성화되어있을 경우 세팅메뉴로 바로 보내도록 예제를 만들어봤습니다.

[Android] Telephony.SmsManager로 SMS발송하기

Reference Link : http://developer.android.com/reference/android/telephony/SmsManager.html

Android 앱에서 직접 문자를 발송하는 기능을 알아봅니다.
해당앱 사용자들의 핸드폰에서 직접 문자를 발송하도록 하는 기능을 설명하려 합니다.

기존 API Level4에서 “android.telephony.gsm.SmsManager” 등과 같이 gsm, cdma 하위 클래스로 있던 SmsManager는 Deprecated되었으니 유의하시기 바랍니다.
2개의 클래스를 하나로 합친것이 “android.telephony.SmsManager” 인데, 사용법은 동일합니다.

이렇게 간단하게 문자를 전송할수 있습니다.