Categories
Blog MAC Story

맥에서 구글포토 사진 올리기

스크린샷 2015-06-15 오후 6.12.07

 

구글 포토를 시작한지 일주일 가량 되었다.

많은 분들이 극찬하는 어시스턴스는 그야말로 “추억의 재가공”이었다.

그냥 찍기만 했던 사진들을 스토리를 만들고, 애니메이션을 만들면서 다른 느낌의 추억으로 그것도 자동으로 만들어주니 이 얼마나 편리한 세상인가.

물론 포털 서비스에 내 개인 자료가 올라가고 특정 서비스에 묶인다는 단점이 있으나 아직 구글 포토에 만족을 하고 있다.

https://photos.google.com

 

PC에서 사진 올리기

스마트 폰에서는 간단히 앱만 설치하면 되지만 대부분의 사용자들은 모든 사진을 폰 안에 넣고 다니지는 않을 것이다.

폴더폰, 카메라, 스캔 등 여러가지 방법으로 PC 에 사진이 저장되어있을 텐데 이러한 사진들도 구글 포토에 올려서 “추억의 재가공”을 경험할 수 있다.

 

바탕화면 업로더 설치

아래 링크로 들어가면 “바탕화면 업로드”라는 프로그램을 다운로드 받을 수 있다.

https://photos.google.com/apps

스크린샷 2015-06-15 오후 6.05.55

 

설치 프로그램을 실행하여 좌측 구글포토 로고를 오른쪽 폴더로 그래그앤 드롭하자.

스크린샷 2015-06-15 오후 6.06.31

이제 맥 시작 시 자동으로 실행되고 상태바에 아이콘이 보인다. 클릭해 보면 아래와 같다.

스크린샷 2015-06-16 오전 2.54.26

환경설정에 들어가보자.

스크린샷 2015-06-16 오전 3.09.31

 

백업 소스에 “카메라 및 메모리 카드”를 선택하면 카메라나 외장 메모리 연결 시 백업 여부를 물어본다.

데스크톱 폴더 항목은 해당 폴더 들을 백업 동기화에 포함한다는 내용이다.

 

사진 라이브러리 동기화 설정하기

그러나, 기본 설정만으로는 사진 라이브러리의 사진들이 자동으로 동기화되지 않는다.

순수 이미지 파일로 존재하는 것들만 동기화 지원을 하는 듯하다.

사진 라이브러리 선택이 되는 만큼 동기화도 알아서 해주어야 마땅하다. 이 문제는 조만간 개선되길 기대한다.

사진 라이브러리는 파일처럼 보이나 파인더에서만 그렇게 보일 뿐 사실 특수한 폴더이다.

그림 폴더로 가서 동기화할 라이브러리 파일을 보조클릭해보자.

스크린샷 2015-06-16 오전 2.53.41

 

“패키지 내용 보기”를 선택하면 내부 폴더들이 나오는데 이 중 “Masters” 폴더가 원본을 보관하는 폴더이다.

이 폴더를 사이드바의 즐겨찾기에 넣어주자.

스크린샷 2015-06-16 오전 2.54.07

 

다시 구글 포토백업 ->설정 에서 Masters 폴더를 선택해서 추가하자.

스크린샷 2015-06-16 오전 2.55.31

 

아래와 같이 Masters 폴더가 추가된 것을 볼 수 있다.

스크린샷 2015-06-16 오전 2.55.47

이제 사진 앱에 올리기만하면 구글 포토에서 자동으로 올라간다.

주의!

이미 스마트폰에서 백업한 사진들이 사진앱에 있다면 구글 포토에 2중 복사된다.

업로드 과정에서 사진 중복체크를 해주지 않는다.

필자는 이러한 이유로 PC에서는 수동 업로드만 사용한다.

 

PC에서 수동 업로드하기

동기화는 스마트폰에서만 하고 간헐적으로 PC의 사진을 업로드할 때 유용하다.

웹브라우저에서 https://photos.google.com 로 들어가면

오른쪽 상단에 구름 모양의 아이콘이 있다. 이걸 누르면 “사진 업로드”를 할 수 있다.

스크린샷 2015-06-15 오후 6.02.43

 

 

특정 폴더에 사진을 보관하고 있다면 파일별로 선택해서 업로드하면 된다.

“사진 앱”에 있는 사진을 올리려면 사이드바에서 “미디어->사진”메뉴를 선택하면 된다.

상단에 날짜별 장소별로 분류가 되니 선별해서 올릴 수도 있겠다.

스크린샷 2015-06-15 오후 6.03.07

 

사진 앱 보관함을 여러 개로 나눠서 관리하고 있다면 모든 사진이 목록에 나오지 않는다.

한 번에 한개의 보관함만 불러올 수 있고 다른 보관함을 불러오고자 할 때에는 아래 과정을 거쳐야한다.

1) 사진 앱에서 보관함 전환

2) 설정 -> 일반 -> “시스템 사진 보관함으로 사용” 체크

스크린샷 2015-06-15 오후 6.02.15

보관함을 전환했더라도 “시스템 사진 보관함”으로 설정하지 않으면 업로드 팝업창에 해당 사진이 나오지 않는다.

 

아이포토 보관함인 경우

사진 앱 설치 후에도 아이포토 앱을 사용할 수 있다. 다만 업로드를 위해서 사진앱용 보관함으로 변환해야한다.

사진앱이 최신에다 더 많은 기능을 가지고 있다보니 언젠가는 모두 변환하게될테니 이참에 변환해 두자.

변환하더라도 기존 아이포토 라이브러리 파일은 삭제되지 않는다. (용량이 큰만큼 필요없으면 삭제하자)

스크린샷 2015-06-15 오후 6.05.22

아이포토 라이브러리 파일을 보조클릭->다음으로열기->사진 을 선택하면 변환할지 물어본다.

변환 -> 보관함 전환 -> 시스템 사진 보관함으로 설정 하면 구글 포토 업로드 목록에 나온다.

 

사진 날짜가 잘못 저장되어 올라갈 때

사진을 관리하다보면 날짜 정보가 손상되거나, 현재 날짜 설정이 안된 카메라에서 찍은 사진인 경우 날짜가 잘못될 수 있다.

아이포토와 사진앱에서 특정 사진의 찍은 날짜를 조정할 수 있다.

사진 목록에서 수정할 사진들을 선택한 후 메뉴->이미지->날짜와 시간조절 을 선택하면 아래와 같은 화면이 나온다.

수정 항목에 초단위까지 수정이 가능하다.

스크린샷 2015-06-15 오후 6.00.43

 

참고로 과거에 아이포토에서 날짜를 수정하고 사진앱 보관함 변환 후 구글 포토에 올린 사진 중 날짜가 2년 앞으로 당겨져 올라간 경우가 있었다.

올라간 사진을 다운로드 받아 사진앱에서 날짜를 재보정해서 해결하였다.

간 혹 몇년전 사진이 오늘 날짜로 올라가는 경우도 있었다.

구글 포토 내에서 날짜와 위치를 조정하는 기능이 필요할 것 같다.

구글 포토 스토리의 경우 위치와 시간을 기준으로 만들기 때문에 매우 중요한 정보이기 때문이다.

 

<참고>

https://discussions.apple.com/thread/7063131

http://apple.stackexchange.com/questions/189936/backup-photos-using-google-photo-desktop-uploader

Categories
Development Wordpress

카카오톡 웹 공유를 위한 API 키 발급 받기

스크린샷 2014-12-23 오후 5.27.29

카카오톡 오픈 API 정책으로 2014년 12월부터 구 버전 API가 차단되었다.

최신 API를 사용하려면 “카카오톡 개발자 사이트(Kakao Developer)“에 API 키를 발급받아야 한다. 네이버 오픈 API와 비슷하다고 보면 되겠다.

웹용 API 키 발급 절차

1. 개발자 사이트 접속 – 로그인

2. 앱 생성

3. 도메인 등록

1. 개발자 사이트 접속 – 로그인

카카오톡 개발자 사이트(Kakao Developer)“에 접속하면 우측  상단에 로그인 버튼이 보인다.

로그인 계정은 카톡 가입할 때 사용한 이메일 주소와 비밀번호이다. 카카오톡 PC버전에 접속할 때도 사용한다.

잘 모르겠다면 스마트폰 카톡 앱 설정에서 계정을 확인하면 된다.

스크린샷 2014-12-23 오후 1.05.55

2. 앱 생성

로그인하면 “내 애플리케이션” 화면이 나타난다.

좌측에 “앱 만들기” 버튼을 누른다.

스크린샷 2014-12-23 오후 1.06.23

앱 이름을 하나 지어주자. 아무거나 적되 이왕이면 영어로 띄어쓰기 없이 적자.

스크린샷 2014-12-23 오후 1.06.33

이 포스트에서는 “test1” 이라는 앱을 만들었다.

앱을 만들면 4개의 키를 사용할 수 있다.

스크린샷 2014-12-23 오후 1.07.08

여러 키 중에 웹 페이지에서 사용할 수 있는  javascript 키가 보인다. 나중에 메뉴에서 다시 확인할 수 있다.

3. 도메인 등록

웹용 javascript 키는 도메인을 등록하고 해당 도메인 내에서만 작동이 된다.

이전 화면 하단에 “설정”을 누르면 아래 화면이 나온다.

스크린샷 2014-12-23 오후 1.07.20

하단에 “플렛폼 추가”를 누른다.

웹에서 사용할 예정이므로 “웹”을 선택하고 도메인을 적어준다.

하단 “추가”버튼을 누른다.

스크린샷 2014-12-23 오후 1.07.37

“저장되었습니다”라고 나오면 끝!

스크린샷 2014-12-23 오후 1.07.50

메인도메인을 적더라도 서브도메인 ???.mydomain.com에서 작동되지는 않는 것 같다.

사용할 서브도메인이 있다면 모두 적어주자.

네이버 처럼 *.mydomain.com 으로 모든 서브도메인을 포함하는 지는 모르겠다. 나중에 테스트해봐야겠다.

이제 javascript 키를 가지고 등록된 도메인 내에서 카톡 API를 사용할 수 있게되었다.

앱 키 당 하루 3만 건의 전송 처리만 가능하다. 그 이상은 제휴를 통해서 가능하다고 함.

Categories
MAC Story

VOX 한글 깨짐 문제 해결하기

vox_1

VOX로 음악을 듣다보면 위와 같이 목록에 한글들이 깨져서 나오는 경우가 있다.

한글이 깨지는 원인과 해결 방법을 정리하고자 한다.

 

MP3 파일의 구조

원인을 설명하려면 우선 MP3파일과 같은 음악 파일의 구조를 알아야한다.

mp3를 포함한 여러 미디어 파일들(대부분의 파일들)은 아래와 같이 헤더와 내용으로 구성되어있다.

vox_2

헤더에는 파일의 종류와 상세한 설명(파인더에서 정보가져오기에 나오는 내용) 등 content 영역을 해석하는데 필요한 정보들이 기록되어있다.

vox_3

가령 오디오 체널이 2인 경우 스테레오이므로 2개의 사운드 블럭들이 나열되어있을 것이고, 1이면 모노이므로 1개의 사운드 블럭들이 나열되어있을 것이다. 이러한 정보에 따라 음악 재생기는 한 블럭씩 읽어들일 것인지 두 블럭씩 읽어들일 것인지를 결정한다.

이 곳에 바로 앨범, 제목, 저자 등 음악 재생기에 표시되는 정보가 기록된다.

해당 정보를 기록하는 시점은 주로 음원을 추출하여 mp3파일로 저장하는 단계에서 행해진다.

음원사이트(네이버뮤직,벅스,멜론 등…)에서 내려받는 경우 이미 기록된 파일을 다운로드 받는다.

오디오 CD를 아이튠과 같은 추출기로 음원을 뽑아낸 경우 작업자가 직접 작성해야하는 경우도 있다.

다행히 CDDB(추출기가 참조하는 CD정보 서버)에 해당 음반 기록이 있다면 어느정도 자동으로 입력된다.

아예 추가정보가 비어있는 경우 VOX는 제목,가수 구분없이 파일명을 그대로 표시한다.

 

추가 정보가 깨지는 이유

가장 흔한 원인은 추가 정보 저장 문자의 인코딩(저장 방식) 방식의 차이에서 발생한다.

MS윈도우에서 ASCII 코드로 입력한 제목을 OS X에서 보려고 할 때 UTF 방식으로 읽기 때문에 발생하는 문제이다.

쉽게 설명하면 로마 숫자만 알고있는 사람에게 아라비아 숫자를 보여주는 겪이다.

 

해결 방법

vox_15

아이튠에 한글이 깨지는 mp3파일을 넣으면 잘 보인다. (간혹 기본 언어 설정에 의해 깨지는 경우도 있다.)

vox_16

아마도 아이튠에서 인코딩 방식을 알아차려 해당 방식으로 읽어들이는 것으로 보인다.

이렇게 읽어들였더라도 추가된 파일을 변환하는 것은 아니다. 단지 보여줄 때 그렇게 해 주는 것이다.

삽입된 파일을 선택하고 cmd+i를 눌러보자. 정보 창이 나타난다.

vox_17

여기서 항목들을 편집할 수 있는데, 상세정보에서 깨지는 항목들의 파일명을 조금 수정해보자.

필자는 글자들 뒤에 콤마를 찍었다. 다시 수정했던 항목들을 원상태로 만들고 저장한다.

vox_18

이제 잘 보인다.

아이튠에서 수정을 하지않고 공문자나 엔터키만 치면 정보가 업데이트되지 않았다. 아이툰에서는 정보를 저장할 때 기존 인코딩 방식이 아닌 utf방식으로만 저장되는 것으로 보인다.

아이튠 보관함에 추가된 파일을 다시 가져와서 VOX에서 불러들이거나 아이튠 라이브러리로 가져오면 깨졌던 글자가 잘 보인다.

그러나, 이 방법은 너무나도 번거롭다.

 

더 간편한 해결 방법

이러한 추가 정보를 일괄적으로 관리해 주는 툴이 있다. 아쉽게도 OS X 버전은 아직 찾지 못했다. MS 윈도우용 프로그램이다.

패러럴이 있다면 다행이지만, 이런 작업 때문에 다른 PC를 켜야한다면 이 또한 번거로울 수 있다. 하지만 수백개의 파일을 보관하고 있다면 한 번 쯤 해볼만도 하다.

mp3tag 라는 프로그램이다. 아래 경로에서 다운로드 받을 수 있다.

http://www.mp3tag.de/en/

설치 후 실행하면 아래와 같은 화면이 나온다.

vox_16

수정할 파일들을 탐색기에서 드래그앤드롭으로 추가하자.

vox_21

우측의 태그, 제목, 아티스트 항목을 주목하자.

아예 제목과 아티스트 란이 비어있는 파일도 있다. 아마도 관리 도중 손실되거나 처음 추출 때 누락되었을 것이다.

이 툴에서는 이러한 정보도 일괄적으로 복원할 수 있다.

 

이 툴에서 해야할 일은

1) 제목, 아티스트가 비어있거나, 잘못된 내용을 수정한다.

2) OS X에서 제대로 한글이 인식시키기 위해 태그 종류를 ID3v2.3로 통일해야한다.

 

표 맨 상단의 제목이나 아티스트 글자를 클릭하면 해당 항목으로 정렬되면서 비어있는 파일이 맨 위로 모여진다.

vox_4

비어있는 파일들만 선택하자. 맨 위 파일을 클릭하고 Shift를 누른 채 맨 아래 파일을 누르면 모두 선택된다.

상단 메뉴에서 변환-> 파일명-태그를 선택하자.

이 기능은 파일명(가수명-제목)이 특정 형식을 가지고 있는 경우 파일명의 내용을 상세 정보에 넣어 주는 기능이다.

vox_5

 

선택하면 아래와 같은 창이 나온다.

 

vox_6

 

파일명이 “가수-앨범명-트랙명-제목” 으로 이루어졌다면 “확인”버튼이 활성화 되어있을 것이다.

필자의 파일들은 대부분 “가수-제목”으로만 되어있어 그대로는 처리가 불가능했다.

아래와 같이 %album% – %track% – 부분을 제거하니 “확인”버튼이 활성화 되었다.

vox_7

 

변환이 완료되어 제목과 아티스트 항목이 모두 채워졌다.

태그도 호환가능한 타입으로 저장되었다.

vox_9

 

간혹 변환 포멧 설정단계에서 띄어쓰기 등의 문제로 잘못 저장되는 파일이 있을 수 있다.

해당 파일을 선택하여 좌측의 정보를 수정한 후 ctrl+s를 누르면 저장된다.

 

이제 제목, 아티스트 복원을 하지않은 파일들 중에 한글이 깨지는 파일들을 손볼 차례이다.

그냥 ctrl+a로 모두 선택한 후 ctrl-s를 해주면 태그 정보가 업데이트된다. — 끝!

 

이제 해당 파일들을 VOX에서 불러들여보자.

vox_12

깨지던 글자가 사라졌다 ^^

 

추가 정보

mp3tag에서 파일명이나 상세정보에 한자가 포함된 경우 오류가 발생한다. 이 경우에는 아이튠에서 수정하는 방법을 추천한다.

이외에도 “가사 넣기” 등 여러가지 추가기능들이 있으니 앞으로도 요긴하게 사용할 것 같다.

Categories
MAC Story

맥에서 아파치 + PHP 구동하기

Image2

OSX 업글 후 갑자기 잘되던 아파치가 이상하다. 웹서버 관련 설정이 초기화 되는 듯 하다.

기존에 사용하던 구동 방법으로는 경로를 못찾는다는 메시지가 나타났다.

특히 사용자 웹 경로(localhost/~username) 접근이 제대로 되지 않았는데, 자료를 참고하여 몇 가지 설정을 고쳐서 해결해보았다.

 

! 본 포스트는 엘케피탄, 요세미티 기준으로 작성되었습니다.

 

아파치 데몬 구동

터미널을 실행하여 아래 명령을 실행하다.
$ sudo apachectl start

브라우저를 열어 http://localhost  로 접속해 보자.

스크린샷 2014-10-27 오전 12.05.45

위와 같이 나왔으면 정상적으로 실행된 것이다.

위 웹 경로의 로컬 경로는 아래와 같다.

/Library/WebServer/Documents/

그러나, 위 경로를 사용하려면 루트 권한이 있어야 하고 권한 문제로 작업에 불편을 주므로

일반적으로 사용자 웹 경로(http://localhost/~username)를 이용한다.

 

사용자 웹 경로 설정

스크린샷 2014-10-27 오전 12.11.11

우선 사용자 웹 경로로 사용될 폴더를 만든다.

사용자 홈 경로 아래 “Sites” 폴더를 만들어 준다. 다른 이름을 시도했으나 실패했다.

(필자의 경우 관리 상의 목적으로 다른 곳에 자료를 저장하고 Sites 폴더를 링크를 걸어 사용하고 있다.)

 

터미널에서 사용자 경로 설정 파일을 만든다.

$ sudo vi /etc/apache2/users/사용자명.conf

아래 내용을 입력한다.

<Directory “/Users/사용자명/Sites/”>

AllowOverride All

Options Indexes MultiViews

Options +FollowSymLinks

Require all granted

</Directory>

저장 후 빠져나온다. (:wq! -> 엔터)

설정 파일 권한을 설정한다.

$ sudo chmod 644 /etc/apache2/users/사용자명.conf

 

웹 설정

웹 설정 파일을 수정한다.

$ sudo vi /etc/apache2/httpd.conf

아래 문구들을 찾아 주석(#)을 해제하자.

LoadModule authz_core_module libexec/apache2/mod_authz_core.so

LoadModule authz_host_module libexec/apache2/mod_authz_host.so

LoadModule userdir_module libexec/apache2/mod_userdir.so

LoadModule php5_module libexec/apache2/libphp5.so    <— PHP 를 구동하는 부분임

Include /private/etc/apache2/extra/httpd-userdir.conf

 

사용자 경로 설정 파일을 수정하자.

$ sudo vi /etc/apache2/extra/httpd-userdir.conf

아래 문구를 찾아 주석(#)을 해제하자.

Include /private/etc/apache2/users/*.conf

 

아파치 재구동

수정한 설정내용을 적용하기위해 터미널에서 아파치를 재시작 하자.

$ sudo apachectl restart

웹 브라우저에서 사용자 경로(http://localhost/~사용자명)로 접속해 보자.

아래 그림처럼 폴더 목록이 나오면 성공이다.

스크린샷 2014-10-27 오전 12.26.58

목록을 감추는 등의 설정도 가능하면 추가 설정 자료는 쉽게 찾을 수 있다.

 

MySQL 관련 설치방법은 아래 포스트 참고

맥에서 MySQL + Phpmyadmin 설치하기

참고

http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/

Categories
Development

클라우드 서버 직접 구축하기

스크린샷 2014-08-04 오후 2.30.27

이제는 클라우드 서비스 없이 PC를 논할 수 없는 시대에 왔다. 그런데, 용량은 많은데 클라이언트 SW가 자꾸 튕기고, SW가 안정적인데 용량은 쥐꼬리만하고 속도는 왜이렇게 느린지.. 속도가 빠른데 무료 설치는 단 2대, PC간 동기화 서비스는 중단.

안정적이면서도 용량도 많고 속도도 좀 나오는 그런 클라우드 어디 없나?

그래서 직접 설치하는 방법을 찾아봤다. 이미 활약중인 여러가지 오픈소스 툴들 중에 ownCloud를 선택하였다.

스크린샷 2014-08-04 오후 3.17.14

 

순서

1. ownCloud 서버 설치하기

2. ownCloud 웹 접속

3. ownCloud 클라이언트 설치하기

4. ownCloud 모바일 앱 소개

5. ownCloud 폴더별 동기화

6. 앱 추가로 기능확장하기

7. 정리

 

1. ownCloud 서버 설치하기

http://owncloud.org 에서 다운로드 할 수 있다.

첫 화면 좌측 상단의 “Install”을 누르면 아래와 같이 설치 페이지가 나온다.

스크린샷 2014-07-30 오후 4.36.49

 

ownCloud는 클라우드 서버 + 클라우드 웹 + 클라우드 클랑이언트(PC + Mobile) 로 구성된다. 한마디로 NDrive나 Dropbox를 직접 구축하고 동기화 처리까지 할 수 있다는 것이다.

다운로드 사이트에서 첫 번째 “Install ownCloud Server” 밑에 “Archive File”을 클릭하면 아래 팝업이 나온다.

스크린샷 2014-08-04 오전 9.52.37

 

Unix(Linux), Window 모두 지원한다.

여기서는 Ubuntu 터미널에서 설치하는 과정을 설명한다.

APM (아파치, PHP, MySQL)이 설치되어있다는 가정 하에 진행한다.

 

1) 우선 필요한 라이브러리를 설치한다.

$ sudo apt-get install php5-gd php-xml-parser php5-intl smbclient curl libcurl3 php5-curl

아파치 모듈을 활성화 시키고

$ sudo a2enmod rewrite

$ sudo a2enmod headers

아파치 설정 파일(sites-default)을 열어 접근 권한을 수정한다.

$ sudo vi /etc/apache2/sites-default

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None -> AllowOverride All
Order allow,deny
allow from all
</Directory>

sites-default 파일이 없다면 복사 후 수정한다.

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-default

아파치 재구동
$ sudo service apache2 restart

 

* 위 설정의 경우 웹 주소가 http://도메인명/owncloud 와 같이 폴더로 접근한다.

필자의 경우 가상 호스트로 서브도메인(http://cloud.도메인명)을 설정하였는데 가상 호스트의 경우 파일명만 다르고 구성은 동일하다.

$ sudo vi /etc/apache2/sites-available/도메인명 <– 가상호스트 구성 시 만든 파일명

<VirtualHost *:80>
ServerAdmin test@domain.com
ServerName domain.com
ServerAlias domain.com
DocumentRoot /home/cloud/www

<Directory /home/cloud/www/>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

 

2) ownCloud 서버 설치

wget으로 ownCloud 서버를 다운로드 받자.

$ sudo wget http://download.owncloud.org/community/owncloud-latest.tar.bz2

압축을 해제하고

$ sudo tar -xjf owncloud-latest.tar.bz2

웹 루트로 옮긴다.

$ mv owncloud /var/www

폴더 권한 수정하기

$ sudo chown -R www-data:www-data /var/www/owncloud

 

3) DB 준비

 

mySQL에 접속하여

$ mysql -u root -p

owncloud 라는 이름의 DB를 생성한다. 다른 이름도 가능하다.

mysql> CREATE DATABASE owncloud;

owncloud 계정을 만들어 owncloud DB에 권한을 준다.

mysql> GRANT ALL ON owncloud.* TO ‘owncloud’@’localhost’ IDENTIFIED BY ‘비밀번호’;

 

2. ownCloud 웹 접속

웹 브라우저에서 설치한 웹 경로로 접속해 보자.

위 예제에서는 http://도메인명/owncloud 가 되겠다.

스크린샷 2014-07-30 오후 4.58.49

 

한글이 보인다. 다국어 처리도 꼼꼼히 되어있는 듯 하다.

우선 관리자 계정으로 사용한 ID/PW를 정한다.

데이터 폴더는 위 예제대로라면 /var/www/owncloud/data 이다.

아래 DB 설정도 채워넣은뒤 “설치 완료” 버튼을 누르자.

짜~잔. N드라이브와 비슷한? 화면이 나타났다.

스크린샷 2014-07-30 오후 4.22.23

기본으로 들어있는 예제 폴더, 파일들이 보인다. 삭제해도 무방하다.

상단 “파일”을 클릭해보자.

스크린샷 2014-08-04 오후 2.16.57

파일 : 파일목록보기

활동 : 변경사항 요약보기

문서 : 문서 파일만보기

사진 : 사진 파일만 보기 (이미지 썸네일 지원)

달력 : 자체 달력 서비스

연락처 : 자체 연락처 서비스

앱 : 서비스의 기본 기능의 옵션을 변경할 수 있다. 액티비티 사용/사용안함, 암호화 사용/사용안함 과 같은 항목이다. 앱을 추가하여 기능 확장을 할 수도 있다. 자세한 사항은 후반부에 설명하겠다.

좌측에 “Shared with others” 메뉴가 있는 것으로 보아 구축된 클라우드 서버에 여러 사용자 계정을 만들 수도 있겠다.

“Share by link”는 계정없는 유저에게 메일이나 문자로 해당 파일을 다운로드 받을 수 있는 URL을 만들어 주는 메뉴이다.

 

좌측 하단의 기어 모양의 아이콘을 눌러보자.

WebDAV 라는 것이 나온다.

스크린샷 2014-08-04 오후 1.50.52

WebDAV는 Web-based Distributed Authoring and Versioning(웹기반 분산형 저작 및 버전관리)의 약자로 쉽게말해 “웹에서 파일 관리 하기”라고 보면 되겠다.

보통 WebDAV 주소는 아래와 같다.

http://도메인명/owncloud/remote.php/webdav/

해당 주소를 웹브라우저에 넣어보면 아래와 같이 파일, 폴더 목록이 나온다.

스크린샷 2014-08-04 오후 1.52.56

그리고, OS X의 파인더에서 접속(“서버에 연결” 사용)하면 원격 폴더 처럼 접근할 수 있다.

스크린샷 2014-08-04 오후 1.53.48

 

루트폴더에 있는 pdf 파일을 열어보았다.

스크린샷 2014-07-30 오후 4.59.45

 

페이지 썸네일 표시도 잘되고, 인쇄도 해보았는데 문제가 없었다.

 

3. ownCloud 클라이언트 설치하기

이제 PC간 동기화를 해보자.

(필자는 OS X 10.9.4 (메버릭스)의 아이맥과 맥북으로 동기화 테스트를 해보았다.)

설치 페이지( http://owncloud.org/install ) 2번째 항목 “Install Desktop Client”에서 PC의 OS에 맞는 클라이언트를 다운로드 받아 설치한다.

설치 후 첫 실행화면이다. 서버 주소를 입력하자. 주소는 “http://도메인명/owncloud” 처럼 ownCloud 루트 폴더까지 입력해야한다. 전용 또는 서브도메인인 경우 도메인만 입력하면된다.

스크린샷 2014-07-30 오후 5.01.56

ID/PW를 입력한다.

참고로 owncloud.com 에서 클라우드 서비스를 하고 있으니 서버 구축이 어려우면 해당 서비스를 받을 수도 있겠다.

스크린샷 2014-07-30 오후 5.02.22

서버와 계정에 문제가 없다면 아래처럼 동기화 폴더를 구성하는화면이 나온다.

dropbox 처럼 클라우드 데이터 전체를 PC에 동기화 시키는 방식이다.

스크린샷 2014-07-30 오후 5.02.33

 

Connect를 누르면 아래와 같이 설치 완료 화면이 나온다. Finish를 누르자.

 

스크린샷 2014-07-30 오후 4.22.09

 

상태바에 ownCloud 아이콘이 생겼다.

스크린샷 2014-08-04 오전 11.58.15

 

클릭하면 메뉴가 나온다.

스크린샷 2014-08-04 오전 11.59.04

서버 전체 용량 중 사용량이 보인다.

Recent Changes 최근 변경된 사항을 확인하는 메뉴이다. Settings->Activity 에서도 확인할 수 있다.

스크린샷 2014-07-30 오후 4.29.02

 

 

Settings를 클릭해 보자.

스크린샷 2014-08-04 오후 12.05.00

동기화 폴더 설정화면이 나온다.

최초 서버에 기본으로 탑재된 파일들이 PC로 다운로드 되었을 것이다.

동기화 폴더에 파일을 넣으면 상태바의 아이콘이 아래와 같이 바뀌면서 동기화를 시작한다.

update_icon

 

4. ownCloud 모바일 앱 소개

ownCloud 스마트폰용 앱에서도 구축된 서버에 접속할 수 있다. 현재 $0.99에 판매되고 있다.

애플 앱스토어

https://itunes.apple.com/us/app/owncloud/id543672169?ls=1&mt=8

구글 플레이 스토어

https://play.google.com/store/apps/details?id=com.owncloud.android

스크린샷 2014-08-04 오후 1.08.27

파일을 보거나 다운로드하여 보관하는 등 기능상 다른 포털 클라우드 서비스와 유사했다.

단, 음악파일을 바로 재생(스트리밍)하지 않고, 파일을 폰으로 다운로드 받은 후 재생할 수 있었다.

 

5. ownCloud 폴더별 동기화

여러 PC를 사용하는 환경에서 특히, 회사, 집, 노트북 등 다른 목적으로 PC를 사용한다면 동기화 해야할 자료가 다를 수도 있다.

필자의 경우 집에서는 회사 관련자료 + 음악파일, 회사 PC에서는 회사 관련 자료, 노트북에는 음악파일만 동기화가 필요하다.

ownCloud도 Dropbox 처럼 일부 동기화를 지원한다. 추가로 로컬 상의 Dropbox 폴더 뿐만아니라 어떤 폴더에도 연결할 수 있다.

이 것은 본인의 PC 폴더 관리 규칙을 바꾸지 않아도 됨을 뜻한다.

폴더별 동기화를 하려면 우선 기존에 전체 동기화 설정을 삭제한다.

Image2

Add Folder을 클릭한다.

Choose를 눌러 동기화 시킬 폴더를 선택하고, Continue 버튼을 클릭한다.

스크린샷 2014-08-04 오후 1.40.48

 

로컬 동기화 폴더를 선택했으면, 이제 서버 동기화 폴더를 선택할 차례이다.

서버 상의 특정 폴더 또는 우측 “Add Folder”을 눌러 새롭게 폴더를 만들어준다.

선택 후 하단의 “Add Folder”를 누른다.

스크린샷 2014-08-04 오후 1.41.00

폴더를 추가하면 바로 동기화를 시작한다.

Image1

위 이미지 처럼 여러개의 폴더를 각각 동기화 설정함으로써 PC마다 다른 동기화 설정이 가능하다.

 

6. 앱 추가로 기능 확장하기

최 상단 메뉴 하단에 “앱”이라는 메뉴가 보인다. 모바일 어플리케이션이 아닌 “응용기능”의 의미이다.

스크린샷 2014-08-04 오후 2.16.57

 

클릭하고 들어가면 아래와 같은 화면이 나온다.

스크린샷 2014-08-04 오후 2.59.52

진한 회색 부분은 현재 작동중인 앱이고, 하단에 밝은 회색의 앱 중지된 앱이다.

각 앱을 클릭하여 바로 설정을 수정할 수도 있다.

스크린샷 2014-08-04 오후 3.00.09

 

맨 아래 “더 많은 앱”을 눌러보자.

http://apps.owncloud.com 사이트가 나온다.

스크린샷 2014-08-04 오후 3.08.32

이 사이트를 통해 ownCloud의 확장 앱을 구해서 설치할 수 있다.

대충 목록을 보면, roundcube는 웹메일 프로그램이고, Files Tree는 파일 목록을 트리형태로 보여주는 앱이다.

필자는 웹 상에서 음악을 바로 재생해 주는 “music” 앱을 설치해 보았다.

다운로드 받은 앱 파일은 서버의 아래 경로에 붙여넣으면 된다.

owncloud 폴더/apps

업로드 후 최상위 메뉴를 클릭해보자.

스크린샷 2014-08-04 오후 3.13.03

전에 없던 “음악”이라는 메뉴가 생겼다. 클릭해보자.

스크린샷 2014-08-04 오후 2.55.49

일부 한글이 깨지기는 하지만 앨범과 음악들이 나온다.

음악을 클릭해보니 재생이 잘 된다. 같은 앨범 내의 음악은 이어서 재생해 준다. 전체 이어서 재생 기능은 아직 개발되지 않은 듯 하다. 아마추어의 작품이니 이정도는 눈감아 줘야한다. 필요하면 직접 만들어 쓰지뭐~^^

이런게 오픈 소스의 힘!이 아니겠는가.

 

 7. 정리

다수의 유저가 사용하는 포털 클라우드 서비스들과 ownCloud를 그대로 비교하는 것은 문제가 있다.

그러나, 서버를 어느정도 다룰 수 있는 파워유저 이상의 능력자라면 단연 ownCloud를 추천한다.

필자가 중요하게 체크한 부분은 서버/클라이언트 프로그램의 안전성과 작동의 편의성이다.

용량은 서버 스펙에 영향은 받는 요소이지만, 월 5천원만 투자해도 20G짜리 가상 서버를 마련할 수 있으니, 이 또한 저렴하다고 할 수 있다.

일부 서비스가 갑자기 중지되거나, 개인정보 유출의 우려도 걱정할 필요가 없다.

직접 cloud 서버를 구축함으로써 포털 클라우드들의 단점을 해결할 수 있다면 한 번 해볼만 하지 않은가.

Categories
Development

Dropbox를 이용한 git 저장소 동기화

dropbox_git

 

요즘 git의 도움으로 코딩 작업이 한결 수월해 졌다.

특히 별도의 압축->백업 관리의 잔업이 없어졌고

웹작업 시 coda2에서 localhost로 미리보기까지 해주어 편하게 작업하고 있다.

(coda2에서 publish 전에 http://localhost/~ID 에서 미리보기 하면서 디버깅한다.)

한가지 아쉬운 점이 있는데, 상황에 따라 데스트탑, 노트북을 번갈아가면서 작업하다 보니,

작업 PC를 바꾸기 전에 반드시! git commit  후 원격저장소에 push -> 옮겨갈 PC 에서 pull 해야만 작업을 이어갈 수 있다.

간혹 실수로 push 하지않고 작업을 하다가 다시 이전 PC에서 push하고 mergy 하는 해프닝이 발생하기도 한다.

또한 이렇게 작업을 하다보면 commit가 무수히 많아져 history를 지저분하게 한다.

Cloud 를 이용하여 PC가 git 로컬저장소를 동기화 할 수 있다면 이런 불편함이 없어지지 않을까? 하여 시도해 보았다.

 

작업 환경

OS : OS X 메버릭 10.9.4

웹서버 : 아파치 (OS X 기본제공)

 

Cloud 서비스 선택

필자는 UCloud의 빠른 속도에 반해 2년여 동안 사용하다가 최근 PC간 동기화 서비스가 중단되어 NDrive로 갈아탔다.

그러나, NDrive로 숨김폴더인 .git 폴더 파일들을 동기화 할 때 오류가 발생했다.

속도는 좀 느리지만 Dropbox는 이러한 오류가 발생하지 않았다.

Dropbox : git 저장소 동기화 가능

NDrive :  git 저장소 동기화 오류 발생

UCloud : PC간 동기화 안됨

dropbox-logo1

 

동기화 폴더 설정

Dropbox의 동기화 루트 폴더명은 반드시 “Dropbox”로 해야한다.

웹 개발 시 로컬 파일의 미리보기 시도 시 보통 “http://localhost/~ID” URL로 본다.

그런데, Dropbox 폴더 또는 그 하위 폴더를 해당 도큐먼트 루트로 설정하면 403 에러가 발생하게된다.

일반적으로 /USers/ID/Sites 폴더를 웹 루트로 사용하는데 /Users/ID/Dropbox로 변경하면 호출이 안된다.

Sites 폴더명 이외의 것을 사용하는 것이 문제인 듯 한데,

이 문제로 서치 해 본 결과 여러가지 트릭들이 있는데 그 중에서 아래 방법이 가장 간편해 보였다.

 

$ rm -r /Users/계정명/Sites <– 기존 웹 루트 폴더를 삭제한다.

$ ln -s /Users/계정명/Dropbox /Users/Sites

 

git 로컬 저장소 동기화의 문제점

PC2대에서 동시에 git 저장소 관리툴(Sourcetree)를 실행해보니 index, FETCH_HEAD 파일이 계속 수정되면서 Dropbox 동기화가 발생하였다.

아마도 .git 폴더 내에 해당 PC에 국한된 정보가 있는게 아닌가 생각된다. 그러나, 작업 시 특별한 문제는 발생하지 않았다.

단, 무한 동기화를 방지하려면 동시에 여러 PC에서 해당 git 프로젝트 작업을 하지 않는 것이 좋겠다.

 

Categories
Development

애플 Swift 메뉴얼 번역본 – A Swift Tour # 1

스크린샷 2014-07-04 오전 10.29.25

Swift 매뉴얼의 기본 섹션만 번역하고자 한다.

원문은 iBooks에서 무료로 볼 수 있다.

https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11

필자는 영어 전공자가 아니므로 다소 번역이 서툴더라도 양해바랍니다.

 

 

A Swift Tour

 

Tradition suggests that the first program in a new language should print the words “Hello, world” on the screen. In Swift, this can be done in a single line:

새로운 언어의 첫번째 프로그램은 화면에 “Hello, world”를 출력하는 것이 전통이다. Swift에서는 이것을 한 라인으로 수행할 수 있다.

 

println(“Hello, world”)

 

If you have written code in C or Objective-C, this syntax looks familiar to you—in Swift, this line of code is a complete program. You don’t need to import a separate library for functionality like input/output or string handling. Code written at global scope is used as the entry point for the program, so you don’t need a main function. You also don’t need to write semicolons at the end of every statement.

C 혹은 Object-C를 이용해 본 경험이 있다면 이 문법은 익숙할 것이다. Swift에서 이 코드 라인은 완성된 프로그램이다. 별도로 입출력이나 문자열 처리와 같은 별도의 라이브러리를 참조할 필요가 없다. 전역으로 작성된 코드는 프로그램의 진입점으로 사용되기 때문에 main 함수가 필요없다. 또한 문장의 끝마다 세미콜론을 입력할 필요가 없다.

 

This tour gives you enough information to start writing code in Swift by showing you how to accomplish a variety of programming tasks. Don’t worry if you don’t understand something—everything introduced in this tour is explained in detail in the rest of this book.

이 투어는 프로그래밍 작업의 다양한 방법으로 Swift 코드 작성을 시작하는데 충분한 정보를 제공한다. 일부 이해가 되지않더라고 걱정하지 말라. 모든 내용이 이 책의 나머지 부분에 자세히 설명되어 있다.

 

NOTE

For the best experience, open this chapter as a playground in Xcode. Playgrounds allow you to edit the code listings and see the result immediately.

최고의 경험을 위해 Xcode의 놀이터로서 본 챕터를 시작한다. 놀이터에서는 코드 목록을 편집하고 바로 결과를 확인할 수 있다.

 

‌Simple Values

Use let to make a constant and var to make a variable. The value of a constant doesn’t need to be known at compile time, but you must assign it a value exactly once. This means you can use constants to name a value that you determine once but use in many places.

상수를 만드는 “let”와 변수를 만드는 “var”을 사용한다. 상수 값은 컴파일 시점에 확인할 필요가 없지만 정확히 한 번에 값을 할당해야한다. 이는 한 번 선언하지만 해당 이름을 많은 곳에서 사용할 수 있다는 것을 의미한다.

 

 

var myVariable = 42

myVariable = 50

let myConstant = 42

 

 

A constant or variable must have the same type as the value you want to assign to it. However, you don’t always have to write the type explicitly. Providing a value when you create a constant or variable lets the compiler infer its type. In the example above, the compiler infers that myVariable is an integer because its initial value is a integer.’

상수와 변수는 할당할 값에 해당하는 타입이어야 한다. 그러나, 항상 유형을 명시할 필요는 없다.컴파일 단계에서 상수나 변수의 형식을 유추하여 제공한다. 위 예제에서 초기값이 정수이므로 컴파일러는 myVariable을 정수로 간주한다.

 

If the initial value doesn’t provide enough information (or if there is no initial value), specify the type by writing it after the variable, separated by a colon.

초기 값이 충분한 정보를 제공하지 못하면(또는 초기 값을 지정하지 않은 경우), 변수 뒤에 콜론으로 구분하여 명시하라.

 

 

let implicitInteger = 70

let implicitDouble = 70.0

let explicitDouble: Double = 70

 

 

EXPERIMENT

Create a constant with an explicit type of Float and a value of 4.

실수형이고 4 값을 가진 상수를 만드시오.

 

 

Values are never implicitly converted to another type. If you need to convert a value to a different type, explicitly make an instance of the desired type.

값은 암묵적으로 다른 타입으로 절대 변하지 않는다. 다른 타입으로 변환이 필요한 경우, 명시적으로 변환할 형식의 인스턴스를 만든다.

 

 

let label = “The width is “

let width = 94

let widthLabel = label + String(width)

 

 

EXPERIMENT

Try removing the conversion to String from the last line. What error do you get?

위 예제 마지막 줄에서 String 변환을 제거하여 실행하라. 어떤 에러가 발생했는가?

 

There’s an even simpler way to include values in strings: Write the value in parentheses, and write a backslash (\) before the parentheses. For example:

문자열을 연결하는 더 간단한 방법 : 괄호 안에 값을 적고 앞에 역슬레시(\)를 붙인다. 예를들면:

 

let apples = 3

let oranges = 5

let appleSummary = “I have \(apples) apples.”

let fruitSummary = “I have \(apples + oranges) pieces of fruit.”

 

 

EXPERIMENT

Use \() to include a floating-point calculation in a string and to include someone’s name in a greeting.

문자열에 실수 계산이 포함된 \()을 사용하여 인사말에 있는 사람의 이름을 포함할 수 있다.

 

Create arrays and dictionaries using brackets ([]), and access their elements by writing the index or key in brackets.

대괄호([])를 사용하여 배열과 dictionary를 만들고, 괄호 안에 인덱스나 키를 적어 요소에 접근할 수 있다.

 

 

var shoppingList = [“catfish”, “water”, “tulips”, “blue paint”]

shoppingList[1] = “bottle of water”

 

var occupations = [

“Malcolm”: “Captain”,

“Kaylee”: “Mechanic”,

]

 

occupations[“Jayne”] = “Public Relations”

 

 

To create an empty array or dictionary, use the initializer syntax.

배열이나 dictionary 를 생성을 위해 초기화 문법을 사용하라.

 

 

let emptyArray = String[]()

let emptyDictionary = Dictionary<String, Float>()

 

 

If type information can be inferred, you can write an empty array as [] and an empty dictionary as [:]—for example, when you set a new value for a variable or pass an argument to a function.

타입이 유추가능하면 [:] 처럼 빈 배열과 빈 dictionary 를 만들 수 있다. — 예를들면, 변수의 새 값을 배정하거나 함수에 인자를 전달한다.

 

shoppingList = []   // Went shopping and bought everything.

Categories
Development

애플 Swift 사용법

swift

최근 발표된 애플의 새 프로그래밍 언어 “Swift”의 시작 방법과 초급 단계의 문법을 알아보고자 한다.

아래 순서로 진행하고자 한다.

 

1. Xcode 6 설치

2. Playground 로 시작

3. Xcode 프로젝트로 시작

4. 메뉴얼 번역본 (Swift Tour 부분)

 

1. Xcode 6 설치

Swift는 Xcode 6 부터 사용할 수 있는데 현재 베타2 버전을 설치할 수 있다.

개발자 계정이 있다면 아래 링크에서 다운로드 할 수 있다.

https://developer.apple.com/devcenter/ios/index.action

스크린샷 2014-07-04 오전 10.13.19

혹시 기존 Xcode 5 가 삭제-업그레이드 되지 않을까 걱정하고 있다면,

별도 앱으로 설치되니 걱정하지 않아도 된다.

스크린샷 2014-07-04 오전 10.13.40

 

2. Playground 로 시작

Xcode6를 실행하면 기존 버전과 유사한 시작 윈도우가 나온다.

 

스크린샷 2014-07-04 오전 10.14.16

 

Get started with a playground : 놀이터? 로 시작하기. swift 연습 모드 정도로 보면 된다.

Create a new Xcode project :  기존 Xcode 프로젝트 생성과 동일함. swift 언어를 선택할 수 있는 단계가 나온다.

Check out an existing project : SVN, git 과 같은 SCM 저장소에서 프로젝트를 가져와 작업하기 위한 메뉴이다. 협업 개발에 주로 사용.

 

“Get started with a playground”를 클릭하면 프로젝트명을 입력하라고 나온다.

스크린샷 2014-07-04 오전 10.14.52

Create를 누르면 샘플 코드가 나온다,

 

스크린샷 2014-07-04 오전 10.15.05

좌측 흰 바탕이 소스코드 영역이고, 우측 회색 영역은 결과 창이다.

연습모드인 만큼 각 라인별로 결과 값을 우측에 알려준다.

생성된 프로젝트 파일은 아래와 같이 playground 확장자 명으로 생성된다.

 

 

스크린샷 2014-07-04 오전 10.15.26

 

대부분의 맥 파일들이 그렇듯이 파일처럼 처리되나 디렉토리다.

패키지 내용을 보면 3개의 파일이 나온다.

contents.xcplayground : 프로젝트 정보

result.playgrounddata : 실행 결과 정보

section-1.swift : 소스코드

스크린샷 2014-07-04 오전 10.50.36

 

 

3. Xcode 프로젝트로 시작

 

간단한 프로젝트를 위해 Command Line Tool 로 생성해 보자.

스크린샷 2014-07-04 오전 10.16.04

 

프로젝트 명을 지정하고,

Language 부분에서 Swift를 선택하자.

스크린샷 2014-07-04 오전 10.16.15

좌우 사이드 영역은 기존 Object-C 프로젝트 화면과 유사하다.

 

스크린샷 2014-07-04 오전 10.17.10

 

 

4. 메뉴얼 번역본 (Swift Tour 부분)

 

스크린샷 2014-07-04 오전 10.29.25

iBooks의 “The Swift Programming Language” 중 첫 섹션인 “Swift Tour” 부분만 번역해 보았다.

필자도 영어가 능숙지 못해 처음에는 소스코드만 눈에 들어왔고, 이를 단순히 내가 알고있는 기존 언어를 기준으로 유추해 나갔었다.

그러나, 번역을 해보니 잘못 유추한 부분이 너무 많았다. 그리고 훨씬 더 확실히 이해가 되었다.

Swift Tour 부분은 아주 기본적인 문법에 대한 설명이지만 새 언어를 시작하는데 무리가 없다.

Swift가 어느정도 활성화되면 전체 한글 번역본이나 관련 서적이 등장할 것이다.

 

포스팅이 길어져 별도의 포스트로 분리하였습니다.

애플 Swift 메뉴얼 – A Swift Tour #1

 

Categories
Development

Redmine + git 기반 통합 개발환경 구축

스크린샷 2014-06-13 오후 12.24.45

 

이전에는 워드, 엑셀, 파워포인트, 한글, 구글문서, 블로그 문서 등 난립하고 흩어진 문서들로 프로젝트를 관리하곤 했다.

프로젝트 규모가 조금씩 커질수록 한계와 관리의 피로감이 더해져 효율적인 관리방법을 찾는 중이다.

 

그리하여… 오픈소스 기반으로 통합 개발환경 구축을 시도하고 있다.

현재 팀 내에 적용하여 시행착오를 거치는 중이다.

구축 보다 더 중요한 것이 운영이다. 구축된 시스템을 어떻게 활용하느냐에 따라 목표인 개발 결과물 획득의 질과 개발의 효율성이 결정된다.

위 구성의 목표

프로젝트관리,협업 개발, 업무 공유, 히스토리 추적, 문서화, 이슈 관리, 소스코드 버전관리, 백업, 원격개발, 커뮤니티… 등이다.

 

위 이미지의 5개의 툴을 간략히 설명한다.

 

Redmine

스크린샷 2014-06-13 오후 12.34.39

웹 기반 프로젝트 관리도구이다.

형상관리, 간트차트, 게시판, SCM 등 여러 복합적인 기능들이 어우러져 있다.

스크린샷 2014-06-13 오후 1.10.40

MS Project, Open Proj 등 로컬 기반 관리툴 보다 성능은 다소 미흡하나 웹 기반에 실시간 업데이트를 생각하면 꽤 쓸만하다.

모바일 앱도 여럿 있는 듯..

 

Sourcetree

스크린샷 2014-06-13 오후 12.34.33

 

git 기반 프로젝트를 관리하는데 최적화된 UI를 자랑한다.

일반적인 텍스트 기반 프로젝트에 그대로 사용할 수 있다. bitbucket 운영사에서 개발한 듯..

참고로, github도 편리하지만 private 저장소가 유료인데 반해 bitbucket은 어느정도까지 무료로 private 저장소를 만들 수 있다.

스크린샷 2014-06-13 오후 1.01.51

 

Coda 2

스크린샷 2014-06-13 오후 12.34.46

 

FTP + Editor + SCM 으로 보면 될듯..

Filezilla와 UltraEdit를 사용하다가 Coda로 넘어왔는데 너무 편함.

최소한 웹 프로젝트에서는 publish 기능으로 업데이트 편리함.

iCloud로 PC간 서버 계정 관리가 한방에 되서 너무 좋음.

SCM 지원은 되나 Publish와 별개로 작동하여 2% 부족한 느낌..

 

Eclipse

스크린샷 2014-06-13 오후 12.34.53

대표 개발툴 답게 여러 보조도구들이 있다.

git 저장소 관리를 위해 egit 설치하여 협업 개발에 활용중.

처음 프로젝트 셋팅할 때 gitignore로 일부 폴더 push를 막아 둘 것…

그렇지 않으면 매일 수많은 에러에 질리게 됨.

 

Xcode

스크린샷 2014-06-13 오후 12.35.00

 

아이폰, 맥 앱을 만드는 기본 툴.

git을 알고나서 xcode의 위대함을 보았다.

실행 첫 화면에 new project와 SCM Checkout 선택 메뉴가 나온다. 예전엔 SCM이 먼지 몰라 클릭해볼 생각도 안했었다.

스크린샷 2014-06-13 오후 12.57.56

일단 eclipse 처럼 gitignore가 필요없다. xcode가 알아서 해준다.

xcode를 git과 함께 사용할 때는 다른 git Client GUI에서 절대 push하지 말것….

그리고 히스토리에서 소스코드 비교 기능이 뛰어나다. 한눈에 보인다.

스크린샷 2014-06-13 오후 1.08.08

 

계획

초입에서도 언급했듯이 구축보다 운영이 더 중요하다.

현재 외부 문서(오피스, 한글, 구글 드라이브 등)의 도움 없이 위 구성 안에서 모든 것을 해결하려 한다.

Redmine에서 작성하는 문서는 MCE(워드프레스)처럼 화려한 웹 문서 작성을 지원하지는 않는다.

여러 플러그인들 특히 CK Editor 을 적용해 보려한다.

구글 드라이브의 문서 작성기능만 어느정도 지원되면좋겠다… 특히 표 작성!  (어렵겠지?)

뭣도 모르고 들었던 “프로젝트 관리” 강의 자료를 다시 뒤져봐야겠다.

 

스크린샷 2014-06-13 오후 12.24.45

Categories
Development

Redmine + git 서버 연동하기

redmine

프로젝트 관리 도구로서 Redmine을 설치하고 git 저장소를 연결해 보고자 한다.

 

설치 환경은 UBUNTU Server 12.04 이고, 가상호스트를 구성하였다.

 

순서

1. Redmine  설치

2. Redmine 설정

3. git 서버 설치

4. redmine git 저장소 등록

5. git push

 

1. Redmine  설치

우선 기본적인 APM 환경을 조성한다.

$ sudo apt-get install apache2

$ sudo apt-get install php5 php5-gd php5-mysql

$ sudo apt-get install mysql-server mysql-client

 

Redmine은 rails 기반이므로 passenger를 설치한다.

$ sudo apt-get install libapache2-mod-passenger

 

최신 redmine을 설치해보자.

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ondrej/redmine
$ sudo apt-get update
$ sudo apt-get install redmine redmine-mysql

 

Redmine은 웹 기반이므로 상황에 따라 웹 경로하에 링크를 두자.

일반적인 경우
$ sudo ln -s /usr/share/redmine/public /var/www/red-mine

가상 호스트를 구성할 경우 관리계정하에 폴더를 두자.
$ sudo ln -s /usr/share/redmine/public /home/your_id/redmine

 

passenger가 웹 실행권한( www-data)으로 작동하게 하자.
$ vi /etc/apache2/mods-available/passenger.conf
아래 내용 추가
PassengerDefaultUser www-data

 

호스트 설정 1 (일반적인 경우)
$ sudo vi /etc/apache2/sites-available/default

<Directory /var/www/redmine>
RailsBaseURI /redmine
PassengerResolveSymlinksInDocumentRoot on
</Directory>

 

호스트 설정 2 (가상 호스트인 경우)
서브 도메인을 project.domain.com로 설정해 보자.

$ vi /etc/apache2/sites-available/yourdomain.com

<VirtualHost *:80>
ServerName project.domain.com
ServerAdmin id@domain.com
DocumentRoot /home/your_id/redmine
<Directory “/home/your_id/redmine”>
RailsBaseURI /redmine
PassengerResolveSymlinksInDocumentRoot on
Options Indexes ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AllowOverride all
</Directory>
</VirtualHost>

 

passenger 모듈을 활성화 하자.
$ a2enmod passenger

 

마지막으로 아파치를 재시작하고
$ sudo service apache2 restart

 

브라우저에서 redmine에 접속해 보자.

http://yourdomain.com/redmine

또는

http://project.yourdomain.com

 

우측 상단의 “login” 또는 “로그인”을 클릭하고 기본 관리자 계정(admin)과 기본 패스워드(admin)을 입력하고 로그인해보자.

rd3

2. Redmine 설정

로그인 후 상단메뉴에서 “관리->설정->표시방식”으로 들어가보자.

기본 표시방식들을 설정해주자. 보통 처음엔 영어로 되어있다.

안해줘도되지만 새로 참여하는 유저들이 매번 같은 설정을 해주는 불편함을 감수해야한다.

스크린샷 2014-06-10 오전 3.28.15

메일 알림 설정으로 들어가보자.

다른 설정을 안했다면 “SMTP가 어쩌구 저쩌구…” 나올것이다.

환경설정파일 편집을 해보자.

최초 환경설정 파일이 없으므로 샘플 환경파일을 가져와서 수정한다.

$ sudo cp /usr/share/redmine/config/configuration.yml.example /etc/redmine/default/configuration.yml

$ sudo vi /etc/redmine/default/configuration.yml

 

“default:” 항목을 찾아보자.

따로 SMTP가 구성되어있으면 해당 정보를 입력하고,

아니면, 아래 처럼 그냥 gmail을 활용하자.

# default configuration options for all environments
default:
# Outgoing emails configuration (see examples above)
email_delivery:
delivery_method: :smtp
smtp_settings:
address: smtp.gmail.com
port: 587
domain: smtp.gmail.com
authentication: :plain
user_name: “yourid@gmail.com”
password: “yourpassword”

 

redmine에서 다시 로그인 하자.

이제 메일 알람 설정을 할 수 있다.

스크린샷 2014-06-10 오전 3.26.44

 

 

3. git 서버 설치

아래 포스트를 참고하여 git 서버를 설치하자.

coda2 + git 서버 연동하기

 

Redmine에 git 경로를 설정해 주자.

$ sudo vi /etc/redmine/default/configuration.yml

아래 라인의 주석을 풀고 git 경로를 지정해주자.

scm_git_command:        /usr/bin/git                        # (default: git)

 

git 설치가 완료되었으면 저장소 설정으로 들어가보자.

스크린샷 2014-06-10 오전 3.27.30

여러 SCM을 지원한다.

redmine에서 git 설정이 정상이면 위 그림과 같이 git 항목 우측에 녹색 체크 표시가 된다.

중간 박스에 WS, API키 등은 원격 git 저장소 구성에 사용되는 듯 하다.

본 포스트에서는 동일 서버내에 redmine과 git 서버가 설치되는 환경이므로 별도의 구성은 하지 않겠다.

 

4. redmine git 저장소 등록

프로젝트를 하나 만들고 “설정->저장소”로 들어가보자.

rd1

형상관리시스템을 “git”으로 설정하고,

저장소 경로에 새로 만든 저장소 로컬 주소를 입력하고 “저장”을 누른다.

 

5. git push

git client 툴에서 push까지 완료한 후 “저장소”로 들어가보자.

스크린샷 2014-06-10 오전 4.29.00

 

commit된 내용이 나타났다.

하단에 개정판을 클릭하면 상세정보와 파일 변경 내용 비교까지 할 수 있다.

Categories
Development

coda2 + git 서버 연동하기

Image2

 

coda2의 프로젝트 관리능력을 체험하고 버전관리기능까지 테스트해 보았다.

웹프로젝트에 활용할 때 깔끔한 publish 기능과 버전관리를 위한 svn과 git까지 전천후 개발툴로 손색이 없는 듯 하다.

직접 git 서버를 구축하여 coda에 연결함으로써 협업 개발 환경 구축을 하고자 한다.

git 관련 유틸리티들로 저장소를 관리하고 웹에서 접근할 수도 있으나 coda2를 비롯한 좋은 gui툴들만으로도 충분하다.

아래 순서로 진행됨.

 

1. git 서버 설치 (우분투)

2. git repository 생성

3. coda2 git 서버 설정

4. coda2 git push

 

1. git 서버 설치 (우분투)

아래 명령어로 간단히 설치할 수 있다.

$ sudo apt-get install git

보통 git 관리를 위해 보안상의 이유로 별도의 계정을 둔다.

$ sudo adduser git

ssh로 git 저장소에 접속해야하므로 ssh 접속이 가능하게 해야한다.

만일 특정 계정만 접속하게 되어있다면 아래 과정을 실행하자.

$ sudo vi /etc/ssh/sshd_config

# 아래 항목이 있으면 맨 끝에 git 관리용 계정을 추가해주자.
# AllowUsers가 없다면 안만드는 것이 좋다. git만 접속되고 나머지 계정은 차단된다.
AllowUsers 아이디, 아이디, …. , git

$ service ssh restart
이제 git 계정으로 ssh 접속이 될 것이다.

 

2. git repository 생성

저장소를 만들기 위해 폴더를 하나 만든다.

경로는 짧을 수록 좋으므로 필자는 보통 루트 경로에 git이 접근할 수 있는 폴더를 만들어준다.

아래 부분은 root 또는 sudo 권한이 있는 계정으로 실행할 수 있다.

$ cd /

$ sudo mkdir repos

git 에게 폴더 접근 권한을 주자.

$ sudo chown git /repos

이제부터 git 계정으로 작업한다.

$ su – git

$ cd /repos

repos 폴더 안에 여러 개의 git 저장소를 만들어 작업을 구분해 주는 개념이다.

$ mkdir hello_world.git

$ cd hello_world.git

저장소를 초기화 해주자.

$ git init –bare –shared

Initialized empty shared Git repository in /repos/hellow_world.git/

저장소를 초기화하면 아래와 같이 기본 파일과 폴더들이 만들어진다.

$ ls

HEAD  branches  config  description  hooks  info  objects  refs

 

3. coda2 git 서버 설정

coda2에서 add site로 사이트 생성화면을 띄웠다.

스크린샷 2014-06-05 오전 9.56.16

Nicname을 정하고,

Local Root 경로를 지정해 주자. 필자는 도큐먼트에 “hellow_world”폴더를 만들어 사용하였다.

나머지 항목은 본 글과 직접적인 연관이 없으므로 생략한다.

상단 메뉴에 Source 로 들어가보자.

스크린샷 2014-06-05 오전 9.58.18

1번째 Clone Git… 은 원격 또는 로컬상의 이미 생성된 저장소와 연동하겠다는 것이다.

2번째 Initialize … 는 빈 저장소를 만들겠다는 것인데 로컬에 생성된다.

3번째는 svn 연동 메뉴이다.

원격 git 서버 연동이 목적이므로 첫번째 버튼을 누른다.

스크린샷 2014-06-05 오전 9.59.16

경로와 비번을 입력하라고 나온다.

앞서 git 계정이 ssh 접근이 되도록 설정했으므로 URL은 아래와 같이 지정하면된다.

ssh://git@yourdomain.com/repos/hellow_world.git

비번 입력 후 “Clone”를 누르자.

스크린샷 2014-06-05 오전 10.00.21

 

버전 문제인지 모르겠으나 간혹 위 그림처럼 멍텅구리 상태가 되기도 한다.

정상인 경우 펼침목록에는 “local”, “origin” 항목이 나와야한다.

저장소 설정을 복구하는 방법이 여러가지 있겠으나,

필자는 다른 SCM툴(“source tree” 등)로 clone한 뒤 최소 1회 commit-push 한 뒤

clone한 폴더를 coda2의 로컬 경로로 설정하여 해결하였다. 빈 저장소를 clone 하면 발생하는 듯 하다.

더 간단한 방법이 있으면 알려주세요~^^;

정상적인 경우라면 아래와 같이 나온다. “Local”로 선택된 항목을 “origin”으로 변경하면 git 원격 저장소 정보가 나온다.

처음 설정한다면 비어있는 Password 항목에 git 원격 저장소 계정의 암호를 입력한다.

스크린샷 2014-06-05 오전 10.19.36

save로 저장한다.

 

4. coda2 git push

coda2에서 hellow_world 프로젝트를 열고 파일을 하나 생성해보자.

bbb.txt파일을 하나 생성한 후 우측 상단 집모양 아이콘을 눌러보자.

스크린샷 2014-06-05 오전 10.23.09

 

SCM항목에 1이라고 표시되어있다. 버전관리툴에 업데이트해줄 항목이 생겼다는 것이다.

SCM을 눌러보자.

스크린샷 2014-06-05 오전 10.23.24

 

변화된 항목이 있다. 변경사항(파일생성) 항목 저장을 위한  “Add”버튼이 보인다.

Add를 누르면 잠시 후 commit 버튼으로 바뀐다.

commit 를 누르면 메모할 수 있는 창이 나오는데 설명을 간단히 적고 commit 해주자.

스크린샷 2014-06-05 오전 10.28.02

commit하면 아래와 같이 잠깐 Activity 박스가 나왔다가 사라진다.

스크린샷 2014-06-05 오전 10.28.08

로컬 저장소는 업데이트 되었고 원격 저장소로 push 해주자.

스크린샷 2014-06-05 오전 11.36.18

우측 상단의 숫자5는 push할 변경사항이 5개 존재한다는 뜻이다.

이제 다른 PC에서 같은 방법으로 pull하여 프로젝트를 구성해보자.

협업 환경이 준비되었으니 이제 코딩~~^^

Categories
Blog Development

오픈 API로 구글 트랜드 따라잡기

스크린샷 2014-05-12 오후 3.20.52

 

구글 트랜드는 심플하고 세련되게 검색어들을 나열하여 현재 네티즌들이 어떤 것에 관심이 있는지 알려준다.

화면 보호기로도 사용할 수 있어 활용도가 높다.

그런데, 국내에서는 구글 검색엔진을 많이 사용하지 않아서인지 가만히 보다보면 오래된 내용이 올라오기도 한다.

우선 구현에 앞서 구글 트랜드의 불편한 점들을 나열해 보았다.

 

1) 국내 유저가 적어 국내 트랜드를 읽어낼 수 없다. -> 네이버로 바꾸면 되겠군

2) 검색어만 보다가 보면 저 말이 왜 올라왔는지 무지무지 궁금하다. 상세내용을 보고 싶다.

3) 사진이 나와주면 더 좋겠다. 보통 검색할 때 사진을 많이들 참조하니..

4) 이왕이면 사진, 뉴스, 블로그 모두 요약해서 보여주면 좋겠다.

 

가능성 알아보기

네이버에서도 오픈API를 지원하니 어디까지 지원되는지 보자.

네이버 개발자 센터(http://developer.naver.com) 상단 메뉴에 오픈API 메뉴가 있다.

스크린샷 2014-05-12 오후 3.41.50

 

검색을 할 것이니 “검색 API”로 들어왔다. 여러가지 검색옵션들이 보이는데..

처리한도가 25,000건이란다. 아껴써야겠다.

블로그, 뉴스, 이미지 모두 검색할 수 있고, “실시간 급상승어” 항목도 있었는데 내가 못찾는건지 메뉴에는 안나와있다.

참고로 실시간 급상승어 URL은 아래와 같다.

http://openapi.naver.com/search?key=키&query=nexearch&target=rank

오픈API를 사용하려면 키를 발급받아 사용해야 한다. 키 발급은 우측 상단에 “키발급/관리”에서 할 수 있다.

 

구현 계획

우선 10개의 “실시간 급상승어” 목록을 가져온 다음 각 “검색어”를 가지고 이미지, 뉴스, 블로그의 내용(제목)을 가져와 출력한다.

내용이 많을 수 있으므로 화면에는 10개의 결과를 돌아가면서 출력할 것이다.

1번 쿼리하는데, 모든 쿼리를 합하면 25건 가량된다. 1분에 1번 쿼리한다면 하루 36,000건을 소진해야하므로 부족하다.

5분 정도로 하면 7200건이면 되지만, 나혼자 사용한다면 상관없지만 지인들이나 사이트 방문자들에게도 서비스하려면 하루 25,000개의 쿼리로는 부족하다.

결과를 공유하는 방법을 사용하기로 했다.

누군가 접속해서 쿼리를 소진하면 그 쿼리 결과를 웹서버에 저장해 뒀다가 5분 이상 경과했을 때만 저장된 것을 업데이트 하자.

그러면 여러명이 접속해도 “최대 7200건“이 된다.

 

구현

구현에는 php와 javascript를 이용하였다.

1. 실시간 급상승어 가져오기 (search_save.php)

<?php

$strRes = HttpRequest(“openapi.naver.com”, “/search?key=”.$strKey.”&query=nexearch&target=rank”);

if( $strRes == “” ){ return; }

$parser = new XMLParser($strRes);
$parser->Parse();
$arRank[0] = $parser->document->item[0]->r1[0]->k[0]->tagData;
$arRank[1] = $parser->document->item[0]->r2[0]->k[0]->tagData;

$arRank[9] = $parser->document->item[0]->r10[0]->k[0]->tagData;

?>

2. 실시간 급상승어로 상세 검색결과 얻기 (search_save.php)

// 오류 방지를 위해 공문자를 제거하자. (URL코드 변환 방법도 좋다.)

$strWord = str_replace(” “, “”, $arRank[$i]);

//////////////////////// Image ////////////////////////

$strUrl = “/search?key=”.$strKey.”&query=”.$strWord.”&target=image&start=1&display=5″;
$strNewRes = HttpRequest(“openapi.naver.com”, $strUrl);
$parser2 = new XMLParser($strNewRes);
$parser2->Parse();

$strNewsDetail .= ‘<div class=”image_detail”>’;
for($j=0 ; $j<5 ; $j++)
{
$strImageURL = $parser2->document->channel[0]->item[$j]->link[0]->tagData;
$strNewsDetail .= “<div style=\”background-image:url(‘”.$strImageURL.”‘);\” class=\”image_detail_src\”></div>”;
}
$strNewsDetail .= ‘</div>’;

//////////////////////// News ////////////////////////
$strUrl = “/search?key=”.$strKey.”&query=”.$strWord.”&target=blog&sort=sim&start=1&display=5″;
$strNewRes = HttpRequest(“openapi.naver.com”, $strUrl);
$parser2 = new XMLParser($strNewRes);
$parser2->Parse();

$strNewsDetail .= ‘<div class=”news_detail”>’;
$strNewsDetail .= ‘<div class=”news_detail_title”>NEWS</div>’;
for($j=0 ; $j<5 ; $j++)
{
$strTitle = $parser2->document->channel[0]->item[$j]->title[0]->tagData;
$strLink = $parser2->document->channel[0]->item[$j]->link[0]->tagData;
$strNewsDetail .= ‘<div class=”news_detail_item”><a href=”‘.$strLink.'” target=”_blank”>’.$strTitle.'</a></div>’;
}
$strNewsDetail .= ‘</div>’;

//////////////////////// Blog ////////////////////////
$strUrl = “/search?key=”.$strKey.”&query=”.$strWord.”&target=news&start=1&display=5″;
$strNewRes = HttpRequest(“openapi.naver.com”, $strUrl);
$parser2 = new XMLParser($strNewRes);
$parser2->Parse();

$strNewsDetail .= ‘<div class=”blog_detail”>’;
$strNewsDetail .= ‘<div class=”blog_detail_title”>BLOG</div>’;
for($j=0 ; $j<5 ; $j++)
{
$strTitle = $parser2->document->channel[0]->item[$j]->title[0]->tagData;
$strLink = $parser2->document->channel[0]->item[$j]->link[0]->tagData;
$strNewsDetail .= ‘<div class=”blog_detail_item”><a href=”‘.$strLink.'” target=”_blank”>’.$strTitle.'</a></div>’;
}

3. 검색 결과 파일로 저장하기 (search_save.php)

// 함수를 따로 만들어 주었다.

function SetSavedNews($strValue)
{
$fp = fopen(“news_save.txt”,”w”);
fwrite($fp, $strValue);
fclose($fp);
}

// 저장된 내용을 가져올 때에는

function GetSavedNews()
{
$fp = fopen(“news_save.txt”,”r”);
if( $fp == null ){ return “”; }

while(!feof($fp)){
$data .= fgets($fp);
}

fclose($fp);

return $data;
}

4. 5분 경과시에만 새로 쿼리하기 (search_save.php)

<?

// 현재시간 확인
$strNowTime = GetNowTime();

// 최종 업데이트 시간 확인
$strOldTime = GetUpdateTime();

if( GetTimeGap($strOldTime, $strNowTime) > 4 )
{
// 새 뉴스 가져오기
$strNews = GetNews();

// 파일로 덮어쓰기기
SetSavedNews( $strNews );

// 업데이트 시간 갱신
SetUpdateTime($strNowTime);
}
else{
// 저장 뉴스 가져오기
$strNews = GetSavedNews();
}

// 출력
echo $strNews;

?>

 

5. 브라우저에서 주기적으로 쿼리 확인하기 (index.php)

function UpdateNews()
{
clearTimeout(g_hDetailUpdateTimer);

$.ajax({//Make the Ajax Request
type: “GET”,
url: “http://domain.com/search_save.php”,
data: “”,
beforeSend: function() {
},
contentType: “application/x-www-form-urlencoded; charset=utf-8”,
success: function(html){
$(“#data_request”).html(html);
}
});

var d = new Date();
g_nUpdateTimeH = d.getHours();
g_nUpdateTimeM = d.getMinutes();

g_nItemPos = -1;

// 상세 결과 돌아가면서 보여주기
g_hDetailUpdateTimer = setInterval(“ShowNextDetail()”, 5000);

return false;
}

 

function ShowNextDetail()
{
nItemPos = g_nItemPos + 1;

// 10개 모두 돌아가면서 보여주었으면
if( nItemPos > 9 )
{
nItemPos = 0;
var d = new Date();

// 최종 쿼리 시간과 현재 시간의 차이를 구해서
var nTimeGapM = GetTimeGap(g_nUpdateTimeH, g_nUpdateTimeM, d.getHours(), d.getMinutes());

// 4분 초과(5분)이 되었으면
if( nTimeGapM > 4 )
{

// 서버에서 쿼리를 다시 가져올 것
UpdateNews();
return;
}
}

ShowDetail(nItemPos);

return false;
}

 

실행

http://trend.icansoft.com

스크린샷 2014-05-12 오후 4.50.42

화려한 애니메이션을 주려다가 간단히 fadein 만 넣었다.

화면 한켠에 띄워두고 웹써핑이나 해볼까~

 

 

 

Categories
Blog Development

HADOOP – Fully distributed Mode

스크린샷 2014-05-08 오후 5.54.25

하둡으로 삽질한지 거의 한달이 되었다.

일주일 정도 작업해서 싱글로 워드카운트 예제 성공한 후 분산모드를 위해

서버도 32비트에서 64비트 최신으로 업데이트했으나 연이은 실패…

한달여만에 2대로 분산처리에 성공하였다.

인터넷 자료가 많은 도움이 되었으나 구 버전 설명을 그대로 이용하다가 여러번 시행착오를 겪기도 했다.

본 글에서는 하둡 2.3.0 버전을 사용하였다.

 

구성

서버 : 듀얼코드, RAM 4G – 2대

OS : 우분투 데스트탑 12.10 i386

Hadoop 2.3.0

우분투 i386에서 싱글로 성공한 뒤 amd64로 갈아업었지만

이번엔 엄청난 실행 오류를 맞이했었다.

서칭해보니 하둡사이트에는 32비트용으로 올라가있고 64bit에서 실행하려면

리빌드해야한단다. 설치도 겨우하고있던터라 포기하고 다시 32비트로 깔았다.

우분투만 10번 설치한것 같다.

편의상 2대의 아이피는 아래와 같이 기재하였다.

xxx.xxx.xxx.1 hmaster
xxx.xxx.xxx.2 hslave

 

OS 준비

(리눅스가 처음인 분들을 위해 상세히 적었습니다. 양해부탁드려요^^;)

우분투 설치 시 편의상 계정을 hadoop로 하고 호스트명을 각각 hmaster, hslave로 정하였다.
atp-get으로 기본 프로그램들을 설치한다.

$ sudo apt-get install ssh //ssh 설치

$ sudo apt-get install vsftpd // ftp 설치

$ sudo vi /etc/vsftpd.conf // ftp 환경파일 수

// 아래 항목만 수정하면됩니다. 주석으로 된 부분 주석 제거
anonymous_enable=no
local_enable=Yes
write_enable=Yes
local_unmask=022

$ sudo service vsftpd restart // ftp 재시작

// jdk 설치 (하둡은 java기반이므로..)
$ sudo apt-get -y install openjdk-7-jdk

 

하둡 설치

http://hadoop.apache.org 에서 하둡 프로그램 파일을 다운로드 받아 ftp로 업로드한다.

계정 홈에서 압축해제한다.

$ sudo tar xvf hadoop-2.3.0.tar

압축해제한 폴더를 usr/local로 옮겨 준다.

$ sudo cp -r hadoop-2.3.0 /usr/local/hadoop

hadoop 게정에 위 디렉토리 권한이 없는 경우 아래 명령으로 해결한다.

$ sudo chown -R hadoop:hadoop /usr/local/hadoop

 

* 하둡 계정을 별도로 생성해서 관리하고자 할 경우

아래와 같이 계정 생성해준다.
$ sudo addgroup hadoop
$ sudo adduser –ingroup hadoop hadoop

// 프로파일 수정

$ vi ~/.profile

# JDK 7.0

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/jre

# hadoop home

export HADOOP_HOME=/usr/local/hadoop

# hadoop bin

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

// 프로파일 재로딩
$ source ~/.profile

// 변수 확인
$ echo $JAVA_HOME  –  $HADOOP_HOME
// 아래 내용이 출력되어야 함
/usr/lib/jvm/java-7-openjdk-i386/jre – /usr/local/hadoop

// ssh자동로그인을 위한 rsa키 만들기
$ ssh-keygen -t rsa -P “”

생성후 인증키 복사 ~/.ssh/authorized_keys 가 존재 할지도 모르니 cat >> 이용

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 755 ~/.ssh/authorized_keys

// 비번없이 접속테스트
$ ssh hadoop@localhost

하둡 셋팅

$ vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
// 아래 내용 수정
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
// site.xml 수정

vi /usr/local/hadoop/etc/hadoop/core-site.xml

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hmaster:9000</value>
  </property>
</configuration>

 

vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>

  <property>
    <name>dfs.name.dir</name>
    <value>/usr/local/hadoop/dfs/name</value>
  </property>

  <property>
    <name>dfs.data.dir</name>
    <value>/usr/local/hadoop/dfs/data</value>
  </property>
</configuration>
$ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.tem* /usr/local/hadoop/etc/hadoop/mapred-site.xml
$ vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>hmaster:9001</value>
  </property>
</configuration>
$  vi /usr/local/hadoop/etc/hadoop/mapred-env.sh

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

호스트 설정

$ sudo vi /etc/hosts

127.0.0.1 localhost
#127.0.1.1 hmaster
xxx.xxx.xxx.1 hmaster
xxx.xxx.xxx.2 hslave

여기까지 2대 모두 동일하게 셋팅한다 .

 

ssh 공개키 공유 

// hmaster에서
$ scp ~/.ssh/id_rsa.pub hadoop@hslave:~/hmaster_key

// hslave에서
$ scp ~/.ssh/id_rsa.pub hadoop@hmaster:~/hslave_key

// hmaster에서
$ cat ~/hslave_key >> ~/.ssh/authorized_keys

// hslave에서
$ cat ~/hmaster_key >> ~/.ssh/authorized_keys

하둡 실행

여기서 부터는 hmaster에서 실행합니다.
// namenode 포멧
$ /usr/local/hadoop/bin/hadoop namenode -format

// 하둡 실행
$ /usr/local/hadoop/sbin/start-all.sh

// 제대로 실행되었는지 데몬 확인하기
hadoop@hmaster:~$ jps
429 ResourceManager
2298 Jps
32477 NameNode
32746 SecondaryNameNode

hadoop@hslave:~$ jps
19787 DataNode
20270 Jps

// 웹브라우저에서 모니터링하기
http://xxx.xxx.xxx.1:50070  으로 접속해 보자.
하둡 데몬이 실행중이면 아래와 같은 화면이 나온다.

데쉬보드 메뉴를 클릭해보자.
hslave 항목이 들어있다.


datanode 에 아무것도 없으면 데이터 입출력을 할 수 없다.

예제 실행

인터넷에 돌아다니는 wordcount 예제 파일을 사용하였다.
계정 홈에 jar 파일과 분석할 입력파일(텍스트)을 업로드한다.
~/in/* 에 입력파일들이 있다고 가정하고

// dfs 디렉토리 준비

hadoop@hmaster:~$ hadoop dfs -mkdir /input

// dfs로 입력파일 전달
hadoop@hmaster:~$ hadoop dfs -put ./in/* /input/*
// 예제 실행

hadoop@hmaster:~$ hadoop jar wordcount.jar kr.bigmark.wordcount.WordCount /input /output

처리결과 확인

hadoop dfs -cat /output/*00000

의미없는 로그파일을 넣었더니 위와같이 나왔다.

왼쪽이 단어, 오른쪽이 단어 개수이다.

 

예제를 다시 실행하려면 output을 날려주어야한다.

$ hadoop dfs -rmr /output

 

참고

http://sidcode.tistory.com/213

http://mymailcool.tistory.com/entry/hadoop-Fully-distributed-Mode-구축

http://jy86.tistory.com/entry/ㅇ-1

http://ragon.tistory.com/entry/하둡-완전-분산-설치4개의-노드로-1대는-마스터-3대는-계산노드로-사용

 

Categories
Blog Development

우분투 웹메일서버 구축하기

스크린샷 2014-04-27 오후 6.58.23

 

우분투에 메일 서버를 설치한 후 외부 메일 프로그램이나 포털 등에서 메일을 불러와서 확인해야 했다.

외부의 도움 없이 서버 안에서 웹메일을 구축하여 독립할 방법을 찾아보았다.

quirrelMail, Roundcube를 많이 사용하는 듯한데 최근 자료에는 Roundcube가 많이 등장하는 듯 하다.

roundcube.net에 들어가보니 마침 이번달에 1.0 정식 버전이 올라와 있었다.

따로 다운로드 받아 설치하려다 혹시나 해서 apt-get으로 두드려보니 있었다.

Roundcube 설치전 준비사항

웹메일서버 작동을 위해 기본적으로 sendmail과 같은 메일 서버가 설치되어 있어야 한다.

필자는 postfix 메일서버로 설치한 상태이다. roundcube 설치과정에서 php, sendmail 라이브러리가 자동으로 업데이트 되는 것으로보아 메일서버도 함께 설치되는지도 모르겠다.

함께 설치되더라도 메일 서버 설정은 직접해줘야 할것이다.

메일서버 설치는 아래 링크를 참조바람.

http://blog.icansoft.com/?p=841

 

Roundcube 설치

apt-get install roundcube roundcube-plugins roundcube-plugins-extra

설치 단계에서 몇 가지 설정단계가 나온다. 일단 잘 모르겠으면 예 를 선택하자.

 

스크린샷 2014-04-27 오후 6.44.11

 

 

 

 

 

 

 

roundcube는 DB기반인데 MySQL 과 postgres 중 선택할 수 있다. root 계정을 알려주면 알아서 roundcube용 DB가 준비된다.

스크린샷 2014-04-27 오후 6.47.27

추가로 roundcube 전용 DB계정에 대한 패스워드 설정단계가 있다.

 

roundcube 설정

vi /var/lib/roundcube/config/main.inc.php

위와같이 환경설정 파일을 열면 아래 변수가 비어있을 것이다. localhost로 설정한다.

$rcmail_config[‘default_host’] = ‘localhost‘;

 

웹에서 접속할 수 있게 roundcube 경로를 웹 경로에 링크시킨다.

ln -s /var/lib/roundcube /var/www/roundcube

 

필자의 서버에서는 가상호스트로 webmail.도메인.com 를 추가하고, 아래와 같이 roundcube 메인 경로를 링크하였다.

ln -s /var/lib/roundcube /home/***/webmail

 

roundcube 접속

웹브라우저에서 웹 경로(webmail.도메인.com)로 접속해보자.

정상적으로 설정을 마쳤다면 아래와 같이 로그인 화면이 나온다. 한글도 잘 출력된다.

 

스크린샷 2014-04-27 오후 6.55.17

메일 계정은 미리 생성된 계정으로 접속해 보았다.

스크린샷 2014-04-27 오후 6.55.05

 

외부 메일 응용프로그램과 포털의 외부 메일 가져오기도 잘 작동됨을 확인하였다.

기존의 설정된 메일서버 기능을 훼손하지는 않는 것 같다.

 

참고

http://roundcube.net
https://www.exratione.com/2013/07/installing-roundcube-on-ubuntu-1204/
Categories
Blog Development

우분투 메일서버 구축

Postfix-logo

많이들 설치하고있는 postfix를 이용하여 메일서버를 구축하고자한다.

편의상 sudo는 생략한다.

postfix 설치

apt-get install postfix
설치 과정에서 설정 UI가 나오는데
대부분 그냥 확인을 선택해 넘어가고,
시스템 메일이름, 관리자 메일 주소는 직접 입력한다.
필자의 경우 “인터넷 프로토콜” 단계에서 모두(ipv6 + ipv4)를 선택했더니
서버가 ipv6 지원이 안되는 상태라 오류가 발생했다.
이런 경우 ipv4만 선택하면되겠다.
procmail은 사용안함으로 설정할 것

설치 과정에 나온 설정을 다시 하고싶다면 아래 명령어를 입력한다.
dpkg-reconfigure postfix

메일폴더 설정

postconf -e ‘home_mailbox = Maildir/’
기본 메일 경로는 /var/mail/유저아이디 인데 이 경로는 외부에서 일반 계정으로 접근이 안되는 경로이다.
위와같이 메일 경로를 해당 계정 하위에 두어 해당 계정 아이디/비번으로 들어와 메일을 가져갈 수 있게 해야한다.

SMTP인증 설정

postconf -e ‘smtpd_sasl_local_domain =’
postconf -e ‘smtpd_sasl_auth_enable = yes’
postconf -e ‘smtpd_sasl_security_options = noanonymous’
postconf -e ‘broken_sasl_auth_clients = yes’
postconf -e ‘smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination’
postconf -e ‘inet_interfaces = all’

vi /etc/postfix/sasl/smtpd.conf
아래 내용 추가
pwcheck_method: saslauthd
mech_list: plain login

TLS인증서 준비

openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
mv smtpd.key /etc/ssl/private/
mv smtpd.crt /etc/ssl/certs/
mv cakey.pem /etc/ssl/private/
mv cacert.pem /etc/ssl/certs/

TLS 관련 postfix 설정

postconf -e ‘smtpd_tls_auth_only = no’
postconf -e ‘smtp_use_tls = yes’
postconf -e ‘smtpd_use_tls = yes’
postconf -e ‘smtp_tls_note_starttls_offer = yes’
postconf -e ‘smtpd_tls_key_file = /etc/ssl/private/smtpd.key’
postconf -e ‘smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt’
postconf -e ‘smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem’
postconf -e ‘smtpd_tls_loglevel = 1’
postconf -e ‘smtpd_tls_received_header = yes’
postconf -e ‘smtpd_tls_session_cache_timeout = 3600s’
postconf -e ‘tls_random_source = dev:/dev/urandom’
postconf -e ‘myhostname = server1.example.com’

sasl2 설치

외부에서 이 서버로 메일을 보내는데 필요함.
apt-get install libsasl2 libsasl2-modules sasl2-bin

필자의 경우 libsasl2가 없고 libsasl2_2로 대체 설치되었다. 버전업 된듯하다.

saslauthd 설정

vi /etc/default/saslauthd
아래 항목 수정
START=yes
PWDIR=”/var/spool/postfix/var/run/saslauthd”
PARAMS=”-m ${PWDIR}”
PIDFILE=”${PWDIR}/saslauthd.pid”
OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd”

dpkg 업데이트

dpkg-statoverride –force –update –add root sasl 755 /var/spool/postfix/var/run/saslauthd

saslauthd 실행
/etc/init.d/saslauthd start

POP3 및 IMAP 설치

아웃룩 처럼 외부에서 메일을 가져가기 위하 필요함.
POP3도 좋지만 여러 단말기에서 메일을 확인한다면 IMAP가 편리할 수도 있다.
필요한 것으로 설치한다. 필자는 둘 다 설치했다.
sudo apt-get install courier-pop
sudo apt-get install courier-imap

메일 경로 설정

maildirmake /etc/skel/Maildir
maildirmake /etc/skel/Maildir/.Drafts
maildirmake /etc/skel/Maildir/.Sent
maildirmake /etc/skel/Maildir/.Trash
maildirmake /etc/skel/Maildir/.Templates

새로 생성되는 유저는 메일 경로가 자동으로 만들어지지만
이미 생성된 유저는 메일 경로를 일일이 만들어 주어야한다.

cp -r /etc/skel/Maildir /home/myuser/
chown -R myuser:usergroup /home/myuser/Maildir
chmod -R 700 /home/myuser/Maildir

메일 유저 생성

터미널을 사용할 경우 아래와 같이 생성한다.
sudo useradd -m -s /bin/bash 계정아이디
sudo passwd 계정아이디

메일만 사용하는 계정인 경우 굳이 터미널 권한을 주지 않아도 된다.
sudo useradd -m -s /sbin/nologin 계정아이디
sudo passwd 계정아이디

메일 주고 받기 테스트

테스트는 아래 사이트 참고…
참고사이트

https://help.ubuntu.com/community/Postfix
http://kairess.net/5771
http://justin.kr/?p=123

Categories
MAC Story

맥 2대를 1대처럼 사용하기

Image1

아이맥 27인치와 21인치를 보유하고있는데

한대처럼 이용하고 싶어 여러가지 방법들을 시도해보았는데 시행착오 및 연결 과정을 공유하고자 합니다.

아래 순서로 정리하였습니다.

1. 인터넷 공유

2. 파일 공유

3. 키보드 마우스 공유

4. 기타 보조 수단

 

1. 인터넷 공유

동일 네트워크 상에서 파일 공유를 통해 쉽게 데이터를 주고 받을 수 있습니다.  에어드롭도 있지만 양쪽의 승인 절차가 귀찮으므로 파일 공유 방법을 택하였습니다.

단순 파일공유도 좋지만 하는 김에 가장 빠르게 파일을 주고받는 방법을 찾아보았는데 “썬더볼트”로 1:1 링크를 거는 방법입니다. 썬더볼트 케이블을 아래와 같이 생겼습니다. 정품은 57000원 쯤 하더군요… (매우 비싼듯…)

스크린샷 2014-04-08 오전 10.32.59

주로 사용하는 27인치 아이맥을 “A”, 21인치 아이맥을 “B”로 두고,

A에서 인터넷을 공유하고 B에서는 썬더볼트로 A를 통해 인터넷에 접속합니다. 이 때 B에서 썬더볼트를 제외한 모든 인터넷 연결을 차단해야 합니다.

썬더볼트로만 파일을 주고받아야 최상의 스피드가 보장되기 때문입니다.

체감 속도는 대략

유선 인터넷 파일공유 : 썬더볼트 파일 공유 =  1  :  2

정도 입니다. 단순히 파일 복사로 테스트했으므로 다른 상황은 다르게 나올 수 있습니다.

 

썬더볼트 설정하기

우선 썬더볼트 케이블을 A, B에 서로 연결합니다.

네트워크 설정에 들어가면 둘다 “썬더볼트 브리지” 라는 항목이 추가되었습니다.

인터넷이 연결된 A 맥에서는 별도의 네트워크 설정이 불피요합니다. 아이피를 강제로 부여했더니 B에서 인터넷이 안되더군요.

스크린샷 2014-04-08 오전 10.23.20

B에는 DNS만 잡아줬는데 안잡아도 되는지는 모르겠네요. 일반 가정의 인터넷 공유기 환경이라면 더 쉬울 수도 있습니다.

참고로 제 환경은 DHCP 서버가 없는 공인 고정 IP 환경입니다.

스크린샷 2014-04-08 오전 10.23.33

B에서 인터넷을 할 수 있게 A에서 인터넷 공유를 해주세요.

스크린샷 2014-04-08 오전 10.22.51

 

A,B 모두 인터넷이 되는지 확인해보세요.

제 경우 여러가지 옵션을 건드리는 과정에서 이유없이 둘다 인터넷이 안되는 경우가 있었습니다. A에서 아이피를 업데이트하거나 DHCP 임대 갱신을 하면 다시 인터넷이 잘 되는 경우가 있으니 참고하세요.

 

2 파일 공유

위 상태에서 일반적으로 폴더 공유하는 방식을 사용하면 됩니다.

A에서 환경설정->공유 에서 파일공유 켜줍니다. (위 이미지 참고)

B의 파인더에서 A의 아이피로 접속합니다.

스크린샷 2014-04-08 오전 10.24.07

 

A의 계정 암호를 입력하면 연결가능한 폴더들이 나옵니다.

저의 경우 루트에 DATA라는 공유 폴더를 별도로 만들어 사용하고 있습니다.

스크린샷 2014-04-08 오전 10.29.32

DATA 폴더를 드래그 하여 즐겨찾기에 넣었습니다.

A, B가 동일한 파인더 환경이 되었습니다.

Image2

 

3. 키보드, 마우스 공유

키보드 마우스는 많이 알려진 텔레포트 라는 앱을 사용하였습니다.

스크린샷 2014-04-08 오전 10.46.38

아래 프로그램 사이트에서 무료로 내려받을 수 있습니다.

http://abyssoft.com/software/teleport/

우선 B에 텔레포트를 설치하고 아래와 같이 설정합니다.

B는 어차피 외부에서 접속(해킹)이 불가능하므로 연결되면 승인절차 없이 바로 공유 수락하도록 설정합니다.

스크린샷 2014-04-08 오전 10.25.18

 

A에서는 Share this Mac 체크는 필요없습니다.

스크린샷 2014-04-08 오전 10.25.01

A의 텔레포트 설정에서 B 맥이 뜨면 A의 모니터 우측에 (환경에 맞게 상하좌우 가능) B 맥을 드래그앤 드롭 합니다.

스크린샷 2014-04-08 오전 10.25.34

 

이제 A의 마우스 커서가 B로 넘어가고 마치 한대의 맥을 쓰는 착각을 불러일으킵니다.

IMG_0200

사실 텔레포트에서 A-B간 파일 드래그앤 드롭이 가능하므로 공유폴더 설정을 안해도 쓸만합니다.

제 경우 B에 페러럴즈를 설치하고 윈도우 위주의 작업을 B로 몰아넣고

B에서 작업한 결과물을 (A에 저장) 클라우드 동기화를 하고 있어 폴더 공유를 활용하고 있습니다.

 

4. 기타 보조 수단

많이들 아시다시피

썬더볼트 케이블을 연결하면 아이맥을 디스플레이로 활용할 수 있습니다.

B의 키보드 Cmd+F2를 누르면 B는 A의 보조 모니터로 바뀝니다.

단점 때문에 저는 이 방법을 안쓰고 있습니다.

1) 매번 완전히 부팅 후 B에서 키보드를 눌러야한다.

2) B의 디스플레이를 제외한 나머지 하드웨어를 활용하지 못한다.

 

어떤 분은 썬더볼트 케이블로 연결 후 A에서 수행하는 프로세스를 B와 분산처리까지 하신 분도 계시더군요.

맥 장비가 늘어날 수록 손이 점점 많이 가네요 ^^

Categories
MAC Story

인터넷 속도 측정 유무선 비교

인터넷이 좀 느리다고 생각될 때

1) 우리집 인터넷(사업자)은 왜이렇게 느려!

2) 혹시 선이 잘못되었나?

라고 생각한 적이 있다.

회사에서는 가끔 유선을 뽑고 무선(Wifi)으로 접속해 보기도 하지만 체감 상 ‘좀 빨라졌나? 잘 모르겠는걸’ 라고 하고 넘어갔을 뿐

실질적인 수치상의 비교를 해 보지는 않았다.

Image2

유선과 무선의 속도에 영향을 주는 요인

물론 아래와 같은 여러 환경의 차이로 유선과 무선 중 더 유리한 것이 달라질 수도 있겠다.

1) 유선 인터넷 선의 상태 – 노후, 접지 상태 등

2) 유선 인터넷 선 길이

3)  Access Point(Wifi 공유기) 까지의 거리

4)  무선 접속 시  Access Point 사이의 장애물 – 벽, 가구 등

5) 공유기 노후 상태, 공유기 성능 (가격), Wifi  안테나 데시벨, 안테가 개수 등

일반적인 견해이오니 추가 요인이라고 생각되시면 답변 부탁드려요 ^^;

 

상식적으로 유선이 무선보다 빠른게 정상이 아니야?

유선은 손실율(지연시간) 등이 Wifi에 비해 적을 수 밖에 없고,

이로 인해 전체적인 전송 성능이 커질 것으로 예상된다.

회사에서의 경험은

유선이 있으나 스위치까지의 거리가 30미터 정도되고, 벽에 설치된 선이 10년이 넘었다.

Wifi 공유기는 스위치에 가깝게 (선길이 30센티미터) 설치하였다.

위 상황이다보니 유선도 별로 빠르지 않았다. 결과적으로 비슷하게 나왔다.

중간 결론 : 상황에 따라 달라질 수 있다.

고로 상황에 따라 편차가 크므로 측정 후 유리한 것을 선택하면 되겠다.

물론 유선과 무선의 선택이 가능한 상황에서 말이다.

 

집에서 인터넷 측정

1. 집의 상황은

유선 거리 15미터, 벽 선 설치 4년됨 (그나마 신축건물)

무선 거리 6미터, 콘크리트 벽 1개 있음.

인터넷 서비스 : 엘지광랜

유무선 공유기 종류 : ip time N704

OS : Apple OSX 10.9

측정 도구 : 인터넷 진흥원 http://speed.nia.or.kr/

 

2. Wifi 속도 측정 결과

무제

 

3. 유선 속도 측 정 결과

스크린샷 2013-11-10 오전 5.40.31

 

4. 비교

대충 봐도 2.5배 가량 유선이 빠르다.

집에서는 가급적 유선을 써야겠군 ^^

 

보~너스 : 우리집 인터넷 빠르게 만들기

상식으로 많이 알고들 계실거예염

1) 유선이든 무선이든 거리는 최대한 짧고 가까이! – 유선이라면 여유 선을 최고만 남기고 잘라내세요.

2) 집이 넓을 수록 Wifi 지점을 가운데에 설치하세요. 너무 멀면 끊김. 대궐같은 집이라면 Wifi 2~3개 설치해야할 수도..

3) Wifi 접속 암호를 반드시 만드세요. 옆집에서 영화 다운받으면 우리집 인터넷 먹통되염

Categories
Wordpress

워드프레스 글편집기 TinyMCE 설치하기

t1

TinyMCE ?

워드프레스에 적용된 글편집기 입니다. 브라우저 호환성과 완성도가 뛰어난 웹용 위지윅 편집기 입니다.

워드프레스 글편집기 툴바에 ? 물음표를 클릭하면 아래와 같은 팝업창이 나옵니다.

t1-1

TinyMCE 라는 이름이 나오는데 Moxicode Systems AB 라는 회사 이름이 나오네요.

워드프레스에는 3.5.8 버전이 적용되었는데, 현재 4.0 버전이 올라와 있습니다. 아래 사이트에서 확인할 수 있습니다.

http://www.tinymce.com

TinyMCE를 설치하고 웹페이지를 만들어 편집기를 띄워보는 것까지 진행하겠습니다.

 

설치하기

아래 페이지에서 최신 버전을 다운로드 받으세요.

http://www.tinymce.com/download/download.php

압축을 풀어보면 아래와 같은 구조로 되어있습니다.

t1-2

FTP로 웹 루트에 압축을 풀어놓습니다.

 

웹 페이지에 적용하기

간단히 웹페이지를 만들고 아래 소스를 넣으세요.

<html>
<head>
<script type=”text/javascript” src=”/tinymce/js/tinymce/tinymce.min.js“></script>
</head>
<body>

<script type=”text/javascript”>
tinymce.init({
selector: “textarea”
});
</script>

<form method=”post”>
<textarea></textarea>
</form>

</body>
</html>

head 부분에서 tinymce.min.js 파일을 링크 걸었습니다.

아래 tinymce.init으로 초기화하는데 selector 부분에”textarea”가 있습니다.

textarea를 tinyMCE 스타일로 만들어 주겠다는 것입니다.

웹페이지에서 확인하면 아래와 같이 짜~잔 하고 나옵니다.

최신 버전이라 현재 워드프레스 화면과는 차이가 납니다.

t1-3

 

한글 언어팩 설치하기

상단 메뉴를 한글로 바꾸려면 언어팩이 필요합니다. 아래 페이지에서 한글 언어팩을 다운로드 받으세요.

http://www.tinymce.com/i18n/index.php

아래와 같이 “Korean” 항목이 있습니다.

t2

 

다운로드 후 압축을 풀면 ko_KR.js 라는 파일이 있습니다.

이 파일을 /tinymce/js/tinymce/langs/ 폴더에 넣으세요.

아래와 같이 초기화 스크립트에 언어 정보를 넣으세요.

<script type=”text/javascript”>
tinymce.init({
selector: “textarea”,
language : ‘ko_KR’
});
</script>

 

웹페이지에서 보면 상단 메뉴가 한글로 바뀐 것을 확인하실 수 있습니다.

t3

 

글 내용 수정 기능 구현하기

PHP를 예제로 작성하면 아래와 같습니다.

<form action=”update.php” method=”post”>
<textarea id=”contents”><?php echo $contents; ?></textarea>
<input type=”button” value=”submit”>
</form>

폼 작성 방법은 자료가 많으니 생략합니다.

 

정리

여러 사이트에서 글을 남길 때 복사-붙여넣기가 잘 안되거나 내가 원하는 방식으로 보여지지 않을 때마다 워드프레스 글편집기가 생각났는데 이렇게 쉽게 가져다 쓸 수 있는 오픈소스인지 몰랐습니다.
이 외에도 알려진 여러 편집기가 있으나 tinyMCE 가 성능, 안전성, 비용? 면에서 우수한 것 같습니다. 워드프레스를 사용하지 않고 글 작성 기능을 구현할 때 유용할 것 같습니다.

Categories
Wordpress

아마존 EC2에 워드프레스 설치하기

az_title

이전글 : 아마존 EC2 서비스 구축하기

 

이전글에 이어 아마존 EC2 상에 APM을 설치하고, 워드프레스 셋팅하는 과정을 정리하였습니다.

여러 자료들을 보니 yum 유틸로 설치하는 방법들이 나와있었으나 ubuntu를 설치해서인가? 아니면 툴이 바뀌었는지 리눅스에 대해서는 초보라 헤매다가 외국 사이트에서 apt-get으로 설치하는걸 따라했습니다.

 

1. APM설치하기

우선 sudo su로 root 계정 획득합니다. 이 후 아래 명령어로 기본 유틸을 설치합니다.

sudo apt-get install
sudo apt-get update

아래 명령어로 설치할 항목을 고릅니다. (캡처를 안해뒀네요… ^^;)

sudo tasksel

목록이 나오면 방향키로 APM에 커서를 두고 스페이스 바를 누릅니다.

모두 설치되고 프롬프트가 나오면 자동으로 웹서버가 가동됩니다.

브라우저에 주소를 넣어서 확인하세요.

연결이 안되면 EC2 설정에서 포트 설정을 확인해 보세요. 80포트가 열려있어야 합니다.

az3

 2. phpMyAdmin 설치하기

그 다음 phpMyAdmin을 설치합니다.

sudo apt-get install phpmyadmin

az1

브라우저에서 아래 주소를 입력하여 phpMyAdmin이 제대로 뜨는지 확인합니다.

http://아이피주소/phpmyadmin

아이디는  root를 입력하고, 비밀번호는 phpMyAdmin 설치 도중에 입력했던 것을 넣으세요.

az4

Database 하나를 추가합니다. 저는 ” wordpress”라는 DB를 만들었습니다.

 

3. 워드프레스 설치하기

FTP로 워드프레스 파일을 올립니다.

그런데, 웹루트는 var/www 인데 여긴 root 계정으로 접근해야 하더군요.

그래서 웹루트는 /home/ubuntu/www 로 수정해 보았습니다.

웹 환경파일을 vi에디터로 불러옵니다.

sudo vi /etc/apache2/sites-enabled/000-default

var/www로 된 두 경로를 아래와 같이 수정합니다.

az9

 

w!로 저장 후 빠져나온 후 아파치를 재구동합니다.

sudo /etc/init.d/apache2 restart

 

이 후 작업은 다른 자료가 많으니 간단히 설명하겠습니다.

생성된 DB명과 계정 정보 wp-config.php 수정합니다.

az2

 

웹브라우저에서 아래 주소를 입력합니다.

http://아이피주소/wp-admin

az5

설치가 완료되면 웹브라우저로 사이트에 접속해 봅니다.

http://아이피주소/

az7

 

참고자료

http://www.robotmedia.net/2011/04/how-to-create-an-amazon-ec2-instance-with-apache-php-and-mysql-lamp/

Categories
Blog

앱 마케팅에서 흔히 저지르는 실수 5가지

앱 개발 및 오픈을 처음 진행해 보고 마케팅 준비에 소홀했다는 것을 깨달았습니다.

아무리 좋은 물건이라도 주인을 만나지 않으면 쓸모가 없는 법이지요. 5가지 핵심 키워드를 정리합니다.

appmarketing

 

 

1. 지나치게 복잡한 앱을 만든다.

복잡한 앱은 사람들이 피한다. 기능이 많은 것보다 직관적이고 쉽게 사용할 수 있는 앱을 만들어야 사람들이 많이 구입한다.

 

2. 콘텐츠는 괜찮은데 왠지 아이폰, 아이패드에 어울리지 않는다.

아이폰이나 아이패드에서 사용된다는 점을 인식해야한다. 기기에 어울리는 디자인을 최대한 고려해야 한다. 예산이 허용하는 한에서 디자인에 투자하라.

 

3. 사용자 모니터링을 하지 않는다.

앱의 다운로드 수, 랭킹, 수익, 그리고 중요한 매일의 변화를 모니터링한다. 앱을 다운로드 하게 만드는 경우의 수는 무엇이고, 그렇지 않게 만드는 수는 무엇인가?

 

4. 기존 고객 명단을 잊는다.

새 술은 새 부대에 담는다? 마케팅에서 가장 빠르게 고객으로 전환될 잠재고객은 우리 제품을 경험해본 고객들이라는 것을 잊지 말자. 자신이 갖고 있는 모바일, 이메일, SNS 지인들을 통해 최대한 홍보하라.

 

5. 앱 먼저 만들고 그 다음 마케팅?

앱을 다 만들어 놓은 후 마케팅 플랜을 짜기 시작한다. 그럴 경우 앱을 크게 수정해야 할 수도 있다 .처음부터 마케팅을 생각해야 한다. 자체적으로 해결할 수 없다면 마케터의 도움을 받아야 한다.

 

 

참고자료

http://www.slideshare.net/makiind/25-9364639