뭔가 이상하다 했더니 버그였던것인가...ssh쪽 버그는 아직도 수정이 안된건가...ㅠ 아님 내가 뭘 잘못한건가... 암튼 오늘의 삽질 히스토리를 공개!

작업버전은 Eclipse 3.7 + Eclipse EGit 1.1.0

1. 이클립스 실행 및 EGit 플러그인, Git 설치

이클립스
http://www.eclipse.org/downloads/ 

EGit플러그인은 Help -> Install New Software -> Work with에서 Indigo선택하시면 아래 Collaboration에서 Eclipse EGit를 설치
그리고 Default repository folder를 바꿔줍시다. 안그러면 Git설치 후 Git Bash 홈폴더를 이상하게 홈폴더/git로 인식합니다...홈폴더/git만 아니면 됩니다. 저는 C:\Users\mudchobo\gitrepository요기로 바꿈 ㅇㅇ

Git설치
http://code.google.com/p/msysgit/downloads/list?can=3
1.7.7.1버전의 주의사항은 Windows7에서 삭제가 안됩니다. 삭제하려면 그 전버전을 설치하고 지우면 지워져요. 암튼 다음 신공으로 설치.
사실 플러그인 깔면 Git는 안깔아도 되긴 하는데, 깔아야하는 이유가 ssh를 써야해서...
그리고 이클립스에서만 쓸 게 아니여서^^ 


2. ssh 인증키 생성

이미 있으신 분들도 passphrase값 넣으셨다면 안돼요. 다시 만드세요~! EGit가 그지같이 비번확인창을 못 띄우는 것 같아요.
window -> Preferences -> General -> Necwork Connections -> SSH2에서 key management탭에서 Generate RSA Key 생성 후 Save Private Key 클릭!

그리고 가장 중요한 게 이거 해줘야합니다. 안그러면 이클립스에서 Transport Error Cannot get remote respository refs. 하면서 Are you sure you want to continue connecting? 이 부분을 그냥 에러로 띄워버립니다. 얘는 물어보는건데...-_- 그래서 미리 해줘야합니다.

git를 설치했다면 Git Bash를 실행.

mudchobo@MUDCHOBO-PC ~

$ cd .ssh


mudchobo@MUDCHOBO-PC ~/.ssh

$ ssh -t git@github.com

The authenticity of host 'github.com (207.97.227.239)' can't be established.

RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of know

n hosts.

Hi mudchobo! You've successfully authenticated, but GitHub does not provide shel

l access.

Connection to github.com closed.


mudchobo@MUDCHOBO-PC ~/.ssh

$




3. GitHub 가입 및 Repository 생성 및 인증키 추가

가입하세요-_-
https://github.com/

Repository생성
New Repository -> 아무이름 입력하고 Create Respository하면 바로 생성됩니다.

인증키 추가
우측상단 Account Settings에서 SSH Public Keys선택 Add another public key선택
title은 아무거나 하시고, key는 위에서 이클립스에서 생성한 내용입니다. 홈폴더/.ssh/id_rsa.pub의 내용을 가져다가 붙이시면 됩니다.


4. 프로젝트 생성 및 push

프로젝트 아무거나 하나 생성하고, 프로젝트명에 대고 오른쪽마우스버튼 후 Team -> Share Project -> Git선택 -> Repository선택(없으면 Create) -> 아래체크 후 finish

일단 프로젝트 내용을 Team -> commit을 통해 커밋

Team -> Remote -> Push선택
여기서 GitHub은 ssh와 https 두가지 방식을 제공합니다.
ssh로 하면 여기 위에 있는 모든 과정을 다 해야하고(ssh키 만들고, github에 등록하고 known_hosts파일 생성 등), https방식은 그냥 user와 password를 그대로 github계정을 쓰면 됩니다. 
즉, 편하게 하려면 https로만 하면 되는거임 ㅇㅇ
github프로젝트에 uri가 나와있습니다. 근데 젠장 처음에 생성할 때에는 https를 못찾아서 ssh방식으로만 삽질했던....
uri는 예를 들어 아래와 같습니다.
ssh는 git@github.com:mudchobo/test.git
https는 https://mudchobo@github.com/mudchobo/test.git 이런 형태입니다.
Add All Branches Spec을 선택하셔서 Finish때리면 push가 됩니다!

이쁘게 잘 생성되었네요!
https://github.com/mudchobo/test


PS. 후.....뭔가 길어졌는데, 결론은 github쓰려면 쓸데없이 ssh2 키만들고 개고생 하지 마시고 https로 쓰세요-_- 근데 확실히 https가 더 느린 듯한 느낌을 받았네요.


참고문서
egit가이드 http://wiki.eclipse.org/EGit/User_Guide



 
Posted by 머드초보
,
 
아...간만에 글을 쓰네... 너무 게을러진 것 같네...

다음에서도 NHN에서 DEVIEW 행사를 하듯이 DevOn이라는 행사를 올해 최초로 진행했습니다. 올해 반응이 좋으면 내년에도 계속 이어나갈 수 있는 컨퍼런스로 만들겠다라는 취지로 한번 해본 것이라고 하는데요. 앞으로 계속 이어나갈 수 있었으면 좋겠네요.

공식사이트 http://devon.daum.net/2011/ 
뒤에 "개발자 창의성", "개발자의 미래" 부분은 녹화된 것을 볼 수 있습니다.

디큐브시티에서 진행했는데, 여기 완전 크다고 들어서 가서 헤맬까 봐 걱정했는데, 다행히 주차장에서 내리자마자 안내표지판이 절 안내했습니다!
 
휴... 근데, 너무 일찍 도착했습니다. 9시 좀 안되어서 도착해버렸는데, 시간예측을 잘못 했네요. 그래도 저보다 일찍 오신 몇몇 분들이 더 계셨어요~ 부지런하신 분들!
그래서 아무도 없는 커뮤니티부스를 찰칵! 나중에 이 부스들은 경품을 받기 위해 엄청나게 붐비는 부스로 변신!

 
공식행사는  10시30분부터 진행되었는데, 다른 컨퍼런스와는 드물게 가수분들의 초빙으로 시작되었습니다. 제이레빗이라는 분들이 오셨는데, 여자분의 목소리가 참 맑고 좋네요.
 
노래로 뭔가 오신 분들에게 시작하기 전에 지루함을 없애줬던 것 같아서 매우 좋네요~


1.  개발자가 아름다운 이유 (김국현, 이택경, 김학규)
 
 음... 이런 토크쇼 대본이 좀 없이 진행된 것 같은 느낌이 들 정도로 집중이 안되었는데요(내가 집중력이 없거나...ㅠㅠ). 그 마지막에 트위터로 질문에 개발자가 아름다운 이유를 이제 말해달라고 올릴 정도로 뭔가 주제와 좀 벗어난 토크이긴 했던 것 같아요^^. 하지만, 90년대 창업스토리의 대박을 일궈낸 두 분의 얘기를 들을 수 있었어서 좋았네요. 


가장 맘에 들었던 얘기는 대박에 너무 집착하지 말고, 꾸준하게 지속적인 퀄리티높은 서비스가 중요하다!와 어떤 개발을 해도 열심히만 했다면 망해도 절대 잃은 것이 없고, 오히려 망한 것에서 얻을 수 있는 것이 더 많은 것! 
그리고 국내 하청구조에 대해서 역시 꼬집었는데, 저도 얼른 개선되었으면 좋겠네요. 자꾸 단가 낮아짐ㅠ 
그리고 90년대 성공하신 분들 대다수들이 PC통신 모임에서 만나신 것 같아요. 나도 초딩 중딩 때 머드게임이나 하지말고 PC통신으로 컴퓨터 공부나 모임에 좀 더 신경에 쓸 걸 아쉽네요. 제 생애 가장 재미있게 한 악튜러스가 엄청난 헝그리정신으로 인해 탄생한 비화도 살짝 들을 수 있었고!

김학규님께서는 전원기획, 전원개발, 마케팅없는 회사를 꿈꾸고 계시고, 기획 개발이 나뉜 것은 죽은 개발이라고 얘기를 하셨습니다. 그리고 마케팅비용을 컨텐츠의 질을 높이는 데 더욱 투자하라 라는 말을 하셨는데, 뭔가 저는 이 이론에 대해서는 좀 반대적인... 저는 개발자인데, 전문적으로 기획을 하시는 분들을 보면 좀 특이한 기획을 많이 하시는 분들을 봐왔는데, 개발자들은 개발 틀에 갇힌 기획을 많이 하는 것을 봐왔습니다. 
그래서 이택경님께서 말하는 내용에 더욱 공감가는 게 기획자는 개발을 알아야하고, 개발자는 커뮤니케이션 능력을 길러야한다는 것! 저도 기획자분들에게 내 입장인 개발자입장에서 설명하니 커뮤니케이션 장애가 발생하는 것 같아요. 반성하는 좋은 계기가 되었어요!

파밍 헌팅에 대한 얘기를 열혈적으로 얘기를 하신 것도 인상 깊었구요. 뭔가 저에게 큰 자극이 되었던 것 같아요. 항상 예측가능한 일만 해왔던 것 같아요. 새로운 도전을 하게 만든 좋은 계기가 되었던 것 같아요. 


2. Daum 개방전략 (김지현, 윤석찬)

다음은 커뮤니티적인 행사를 많이 하는 회사고, 다양한 오픈소스도 지원을 많이 하는 회사라는 것을 얘기하는 자리였던 것 같습니다. 다양한 유명한 오픈소스의 ftp서버를 지원하며, 많은 Open API를 제공한다는 것. 
이번에 새롭게 공개되는 것이 모바일 웹을 위한 HTML5 MapAPI와 모바일앱용 Map SDK를 지원하게 되는 것이랍니다. HTML5 MapAPI는 Canvas를 사용하게 되어서 모바일에서 빠르게 로딩될 수 있는 장점이 있겠네요. 다음이 확실히 NHN보단 이런 건 좀 더 발 빠른 듯.

후....점심시간!
 

완전 괜춘함! 스테이크도 있고(칼이 없어서 원시인처럼 뜯어먹었...), 새우도 있고! 회도 있고! 짱짱~!(사진은 완전 맛없게 나왔네...)


다음은 커뮤니티세션인데, 저는 사실 이런 컨퍼런스에 오면 개발자의 미래나 이런 것보다 신기술에 대한 소개를 듣고, 기술 동향을 알아보는 것에 관심을 가지고 가는 게 대부분인데 오늘은 커뮤니티세션이 발표가 20분이라는 게 너무 충격적이였네요... 좀 더 길게 했었으면 좋았을걸...


3. GitHub를 통한 소셜 개발(허광남)

저는 GitHub를 그냥 Repository개념으로만 썼었는데, 잼있는 것 많이 듣고 가네요. jQuery도 여기서 관리되고, GitHub에는 트위터처럼 팔로우, 팔로잉 개념이 있어서, 특정인을 팔로우하면 그 분이 소스를 수정하고 그러면 그것에 대해 알림을 받을 수 있다고 하네요. 

여기에 이슈관리도 있고, wiki도 할 수 있고~! 메뉴얼 부분도 잘되어 있고! 
그래서 대부분의 소스포지와 구글코드 프로젝트들이 GitHub으로 많이 이동되는 추세랍니다. 오늘 좀 저도 자세히 봐야겠네요. 어쩐지 어디서 오픈소스들을 구글링해서 받으려고 하면 GitHub으로 많이 가더라!
https://github.com/


4. 스프링 소셜을 이용한 빠른 소셜앱 만들기(박용권)

우리 회사에서도 소셜연동하는 부분이 좀 있어서 트위터, 미투데이, 구글, 페이스북 등을 연동하기 위해서 제가 개발을 했었는데, 이게 다 인증방식이 다 틀려서 다 각각 분석하고 구현하고 그랬던 기억이 나는데요. 게다가 뭔가 안되면 대체 뭐가 문제인지 찾다가 하루가 다 갔던 기억이 나네요. 근데 이 스프링소셜은 미리 잘 만들어놓은 컴포넌트를 통해 손쉽게 쓸 수 있는 제품인데요. 설명이 좀 짧았는데, 설명을 들어보니 내가 진심으로 개삽질을 했구나 라고 느낄 수 있었습니다. 그냥 손쉽게 다 처리할 수 있는 듯...
미투데이나 요즘도 국내 사용자들이 만들어 놓은 게 있다고 하더라구요.
http://www.springsource.org/spring-social
 


5.  GNOME3와 기반기술(허준회)

리눅스쪽은 완전 무지해서 그놈3가 그냥 Desktop UI같은 걸로 생각했는데 맞나요? ㄷㄷ
위에 이미지에 있는 것처럼 Ubuntu에도 있는 것이면 그게 그놈인가보군요. 우분투는 테스트용으로 VMWare로 깔아놓고 쓰고 있어서^^
그놈3에 대해서 설명하는 데, 굉장히 재미있고 신기한 기능이 많네요. 메신저도 통합되어있고, 트위터앱도 그냥 통합되어 있고, 비디오채팅, 스트리밍, 웹킷브라우저(음...브라우저는 그래도 크롬이 진리...!) 등의 기능을 소개시켜줬네요. 근데 리눅스 데스크탑은 쓰지 않아서...ㅠ
한국공동체(http://www.gnome.or.kr/)도 있네요. irc채팅방도 있답니다~ irc하면 예전에 채팅하면서 파일을 받았던 기억이 새록새록~!
 http://www.gnome.org 


6. Improve Your JavaScript(최성락)

자바스크립트... 답 없는 놈..ㅠ
암튼 최신 버전 웹브라우저에서는 JIT 컴파일러를 통해 컴파일되어서 실행해서 매우 빨라지긴 했는데, 그래도 코드튜닝으로 어느정도 개선은 해야겠죠!

저는 DOM을 그리고, 돔이 Width, Height를 계산핳는 reflow작업 등이 이렇게 오래걸리는 줄 몰랐습니다. 결국 빠르게 하기 위해선 dom접근을 최소화하고, dom을 변화시키는 값에 대해서는 미리 정의해놓은 css클래스를 이용해서 하고 뭐 그런 내용이네요. 
자세한 내용은 아래 두 책에 잘 나와있답니다!^^
Professional JavaScript for Web Developers
http://book.naver.com/bookdb/book_detail.nhn?bid=1711995 
High Performence JavaScript
http://book.naver.com/bookdb/book_detail.nhn?bid=6361938 

근데 아직도 번역이 된 책이 없나봐요. 자바스크립트 아직도 무시당하는 건가... 웹사이트의 필수요소는 자바스크립트고, 이제 자바스크립트로 데탑앱과 모바일앱도 만드는 시대인데!ㅠ 


7. 웹접근성 베스트프렉티스(조규태) 

웹접근성에 대해서 전혀 몰랐는데, Daum같은 경우에는 완전 잘 적용해놨네요. 게다가 접근성관련 CS문의도 저렇게 온 다는 것이 참 신기하군요. 우리 사이트는 스크린리더로 읽으면 스크린리더가 아씨X 뭐이딴 사이트가 다있어 라는 말을 뱉을 듯...
iOS도 접근성에 대해서 엄청나게 많은 기능이 있다는 것을 알게 되었구요. 뭐 거의 켜지 않아서...ㅠ 몰랐는데, osx와 windows에도 다 있다고 하네요... 반성해야겠습니다...ㅠ
그리고, 2012년까지 모든 웹사이트에 적용해야한다는 법이 있다고 하네요. 수정하려면 엄청 오래걸리겠네요ㅠ


또 다시 공연!
"일단은 준석이들"의 공연인데, 굉장히 재미있으신 분들이네요^^
이 위에 분 남자랍니다...-_- 
노래도 매우 괜춘했음~ 재미있게 공연도 잘 하시고~ 노래를 음악사이트에서 들어봤는데 매우 좋네요~^^


8. 창의적인 리더들의 7가지 초능력(정재승)

창의적인 리더들은 초능력이 있었군... 초능력은 어디서 배울 수 있는거지...
내용은 잘 기억이 안나지만, 인상 깊었던 내용 중 하나는 스마트폰이 창의력을 떨어뜨린다는거...ㅠ 그래 내가 게을러지게 된 계기는 스마트폰이였어...가 아니라 핑계일 뿐이지ㅠ
그래서 회의 50분하고 10분 쉬는 시간을 바꿔서 10분회의하고 50분 얘기했더니 더 좋은 얘기가 많이 나왔다는 얘기가 인상 깊었네요. 회의를 마라톤으로 해버리면 산으로 가는 이유가 여기 뇌공학에 있었어요! 참 좋은 정보였어요! 노는 게 정말 중요하다는 걸 알려준...
저에게 역효과가 나서 계속 놀지 않았으면 좋겠네요...ㅠ 


9. 개발자의 미래(이재웅, 허진호, 김택진)


우와~ 게스트가 진짜 빵빵해요. 이 분들도 90년대 창업성공신화를 이룩하신 분들이라 매우 좋은 기회가 되었습니다. 
 
처음부터 이 분들이 창업해서 성공하게 된 얘기를 들을 수 있어서 좋았네요.
이 분들은 기회를 잘 잡았다고 하셨지만, 현재와 미래를 보면 오히려 현재가 더욱 기회가 많아졌고, 앞으로 더욱 기회가 많아질 것이니 기회를 잘 잡아야한다고 말했습니다. 이런 기회를 저도 얼른 잡아야할텐데요...ㅠㅠ 

이번 토크쇼도 듣다보니 개발자의 미래는 산으로 가고 있...아....집중력이 떨어져서 무슨 내용을 얘기했는지 잘 기억이 안나네요.

인상깊은 거 몇 개 얘기해보면 허진호님은 페이스북의 마크주커버그 같은 사람도 좋지만 페이스북의 CTO인 브렛테일러 같은 테크능력으로 우수한 사람이 많이 나왔으면 한다는 얘기를 했습니다. 확실히 페이스북의 OpenGraph프로젝트는 기획자들이 기획을 할 수 없는 부분이 맞습니다. 거의다 개발적인 얘기이고, 해당 프로젝트를 사용하는 사용자도 개발자이기 때문에 그것을 기획자가 기획을 하려면 개발에 대해서 100%알아야하기 때문이죠. 이 말에 대해서도 좀 공감을 느낀 게 우리나라는 테크능력을 키우기 위한 구조가 전혀 아니죠. 항상 SI에 의존해서 다른 사람들이 잘 만들어놓은 Library로 항상 개발하게 되어서 이런 것을 개발하게 되는 구조가 될 수 없는 구조입니다. 구조개선이 필요하지만... 앞으로 몇십년에 개발혁명을 일으키지 않는 이상 불가능하지 않을까요... 혁명을 일으켜야....ㅠㅠ

김택진님도 김학규님처럼 기획과 개발을 분리해서 생각하지 않으셨는데요. 지금 현재 사내에서는 모든 업무처리를 프로그래밍언어로 처리를 하는 것을 목표로 하고 있으시다네요. NCSoft에 가 있는 비개발자분들 공부열심히 하셔야할 듯! 개발은 시작이 어렵지, 시작만 하면 어렵지 않아요! 시작이 중요함! 이 때 잘 이끌어줄 멘토 한명과 자신의 개발에 대한 열정만 있으면 입문은 그냥 오케이죠. 

개발자 컨퍼런스라서 그런지 개발자 위주의 토크내용이 많았던 것 같습니다^^ 위에토크 하신 분들도 다 개발자 출신들이시구요. 그래도 앞으로 개발에 대한 희망적인 얘기를 많이 해주셔서 개발자인 저는 참 기쁘네요!


후기 

후...글을 쓰다보니 길어졌네요... 컨퍼런스는 왜 항상 시간을 초과한다... 이걸 느꼈구요... 조금 아쉬웠던 건 아까도 얘기한 기술적인 얘기가 너무 없었다는 것이 좀 아쉬웠네요. 그래도 NHN Deview처럼 자사제품 홍보하는 세션보다 좀 더 포괄적인 개발적 내용이 많아서
더 좋았던 것 같네요.

PS. 경품이 이것저것 많이 줘서 좋았네요^^ 
 
Posted by 머드초보
,
 
Cloud9IDE는 말그대로 클라우드 IDE입니다. 웹에서 개발하고 테스트를 도와주는 웹기반 개발환경입니다. 벌써 이런 시대가 오다니 너무 멋지네요. 근데, 제한적인 것이 Node.js만 현재 웹에서 실행하고 테스트할 수 있고, php 등 다른 언어는 아직 실행은 할 수 없고 편집만 할 수 있는 듯 합니다.

그래도 Node.js는 제대로 쓸 수 있으니 완전 좋네요. 기존 git에 있는 것을 clone해서도 사용할 수 있는 듯 합니다. 일단 제가 git는 잘 모르니 새로 만드는 방법으로.....

Cloud9IDE 사이트입니다. 가입하세요~!
http://cloud9ide.com/


1. 프로젝트 생성 및 개발하기

일단 가입하고 dashboard로 들어갑니다.
거기서 좌측메뉴에서 My Projects에서 +버튼 눌러서 Create a new project를 합니다. 프로젝트 이름을 아무거나 만들고, START EDITING을 눌러서 편집을 합니다.
딱 보이는 화면이 영락없는 개발 툴 같습니다. 완전 좋네요!


이제 초간단 채팅예제를 작성할겁니다.
express와 socket.io를 이용한 예제여서 두개가 설치가 되어야 합니다. 다행히 cloud9ide에서는 npm를 지원합니다. 저기 콘솔에 입력해서 설치합니다.
npm install express
npm install socket.io

그리고 메인 javascript를 만듭니다.
app.js
var app = require("express").createServer(),
    io = require("socket.io").listen(app);

// 실제 heroku에서는 PORT를 사용. 현재 Cloud9ide에선 C9_PORT사용
var port = process.env.C9_PORT;
if (!port){
    port = process.env.PORT;
}

app.listen(port);

app.get("/", function(req, res){
    res.sendfile(__dirname + "/index.html");
});

io.sockets.on("connection", function(socket){
    socket.on("chat", function(data){
        console.log("receivedata = " + data);
        socket.broadcast.emit("chat", data);
    });
});

초간단 채팅예제입니다. 보면 socket연결이 chat으로 들어오면 바로 다른 연결된 socket에게 메세지를 그냥 전달하는 예제입니다.

index.html
<!DOCTYPE HTML>
<html>
    <head>
        <title>초간단 채팅</title>
        <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket = io.connect();
           
            $(document).ready(function(){
                socket.on("chat", function(data){
                    $("ul").prepend("<li>" + data + "</li>");
                });
               
                // 보내기 엔터이벤트
                $("#inputMessage").keyup(function(e){
                    if (e.keyCode == 13){
                        var val = $("#inputMessage").val();
                        if (val.length <= 0){
                            return;
                        }
                        send(val);
                        $("#inputMessage").val("");
                    }
                });
            });
           
            function send(message){
                socket.emit("chat", message);
                $("ul").prepend("<li>" + message + "</li>");
            }
        </script>
    </head>
    <body>
        <input type="text" id="inputMessage" name="inputMessage"/>
        <ul></ul>
    </body>
</html>

클라이언트 index.html은 그냥 메세지를 보내고 메세지가 들어오면 ul에 그려주는 내용이 다 입니다. 나 진짜 초간단 시리즈 잘 만드는 듯!

이제 run을 눌러서 실행해봅시다. 신기한 것은! 디버깅도 됩니다! 완전 짱! 그러면 아래 임시 url로 실행되는 것을 확인할 수 있습니다. "프로젝트명.cloude9ide아이디.cloud9ide.com"의 url로 확인할 수 있습니다.


2. Heroku에 배포하기

이제 잘 돌아가는 것을 확인했으면 Heroku에 배포해봅시다.
http://cloud9ide.posterous.com/introducing-heroku-support 저도 이 동영상 을 보고 따라했습니다. 두 개 다 완전 맘에 드는 서비스인데, 이렇게 합쳐질 수 있다는 것에 또 한번 감동하네요ㅠㅠ

편집 왼쪽에 Deploy라는 메뉴가 있습니다. 선택하고, +버튼을 눌러서 Choose type을 Heroku.com으로 바꿉니다. 로그인 해서  인증을 한 뒤에 Create new를 통해 프로젝트를 만듭니다. 원하는 이름으로 만들어서 ADD를 선택합니다.

일단 배포를 누르면 배포가 안될겁니다. 왜냐하면 Heroku에 배포하기 위해서 package.json파일과 Procfile이 필요하기 때문입니다.

package.json
{
    "name": "node-example",
    "version": "0.0.1",
    "dependencies": {
        "express": "2.2.0",
        "socket.io": "0.8.2"
    }
}

Procfile
web: node app.js

여기서 제가 헤맨부분이 있는데, Heroku에 배포하기 위해서는 Heroku에 key가 등록되어야 합니다. 근데, 이건 Cloud9ide에서 배포하는 것이라 Cloud9ide에서 키가 있어야 합니다. 친절하게 이것까지 고려했더라구요.
대시보드로 다시가면 "Show your SSH key"라는 부분이 있습니다. 보시면 공개키가 있습니다. 이걸 등록해줘야하는데, Heroku가 설치되어있는 PC에서 해야합니다.
Heroku설치는 여기에서...

그럼 cmd에서 C:\Users\자신아이디\.ssh\id_rsa.pub파일을 생성합니다. 기존 것은 백업해두시는 게 좋습니다. 그리고 아까 SSH key내용을 붙여넣어서 파일을 저장합니다.
그런 다음에 Heroku에 key를 등록합니다.
//이건 Cloude9ide에서 하는 것이 아니라 heroku가 깔린 자신의 PC에서 합니다.
heroku keys:add

그럼 이제 git를 통해 해당 내용을 커밋 후에 push를 하면 끝납니다.
git init
git add .
git commit -m "init"

한 뒤에, Deploy에서 생성한 곳을 선택한 뒤, deploy버튼을 눌러주면 배포됩니다.
참 쉽죠!
위에 내용을 배포한 url입니다.
http://socketiochat.herokuapp.com/

PS. 이제 로컬에서 개발하지 않아도 되는 환경이 점점 구축되어가네요! 웹 개발툴인데, 꽤 쓸만해요! 구글닥스가 쓸만하듯이요!
 
Posted by 머드초보
,
 
Heroku는 호스팅 서비스입니다. 
http://www.heroku.com/

요즘은 호스팅 서비스가 참 많이 있는데요. 지원하는 방법도 틀리고, 지원 범위도 매우 다양합니다.
구글 앱엔진 같은 경우, Java와 Python을 통해 앱을 개발하고 구글 앱엔진서버에 올려서 서비스하는 방식이죠. 대신에 FTP 같은 것을 지원하지 않고, 한번에 배포를 하는 방식이며, Database는 우리가 일반적으로 쓰는 SQL형태(MySQL, Oracle 등)과는 다르게 BigTable이라는 접근제한(?)적인 DB를 제공합니다.
국내에서 서비스 하는 Cafe24 같은 경우는 그냥 ftp를 지원하고, Mysql계정을 주며, 직접 안에서 개발을 하고, Java같은 경우 개별 톰캣을 줘서 시작하고 끌 수 있는 형태로 호스팅을 하고 있죠.

Heroku도 구글앱엔진과 비슷한 형태로 서비스를 하고 있는데요. Heroku는 git를 이용해서 로컬에서 개발해놓은 것을 Heroku에 올립니다. 이 때 Procfile이라는 것을 같이 올리는데, 여기에 서비스 시작 명령어 같은 것이 있습니다. 그러면 올리자마자 해당 서비스가 돌아가게 됩니다.
Node.js에 대해서 검색해보다가 Node.js를 호스팅해주는 서비스라고 해서 알아봤는데, Java도 되고, 루비도 되고, 좋은 것 같네요. 근데, 용량을 늘리거나 다른 기능을 쓰려면 돈을 내야합니다. 하지만, 일부는 무료인 것 같습니다.

제가 Windows를 쓰고 있어서 이걸로 설명을......

공식사이트에 나와있는 Windows에서 시작하기 및 Node.js 시작하기 문서를 참조했습니다. 뭐 참조해서 했다기보다 그냥 그거 보고 따라한거에요~ 제 글보다 영어가 편하시면 이 아래의 글을 읽는 게 더편할 듯!
windows에서 시작하기 : http://devcenter.heroku.com/articles/windows 
node.js시작하기 : http://devcenter.heroku.com/articles/node-js


1. Heroku 설치

일단 Heroku 사이트에 가입하시구요. 공식사이트에서는 http://railsinstaller.org 에서 한번에 git와 ruby를 설치하는 것을 설명해놨네요.

Heroku설치는 gem을 이용해서 설치하면 됩니다.

gem install heroku



2. ssh key셋팅

git를 제가 잘 몰라서 제가 일단 이해한대로 작성을.....-_-
git에 접근하기 위해서는 그 해당 git에 권한이 있어야 하는데, 해당 git에 등록된 ssh key만이 접근이 가능합니다. 그래서 heroku에 공개키를 업로드해서 얘는 여기에 등록된 사용자 라는 것을 판단하는 것 같습니다.

일단 키를 생성해야 합니다.
git 설치하면 Git Bash프로그램이 생깁니다. 그걸 실행.
아래와 같이 명령어를 치면

ssh-keygen -t rsa



홈폴더/.ssh/id_rsa과 id_rsa.pub파일이 만들어집니다. 그럼 이제 이 pc에서는 git로 이 키가 등록된 곳은 clone이 가능하겠죠. 키를 추가하는 방법은 아래 명령어로 추가합니다.

heroku keys:add

 
키가 추가됐는지 보려면 그냥 heroku keys 치면 되고, 키를 지우려면 heroku remove mudchobo@MUDCHOBO-VAIO 이렇게 치면 되고, 뒤에 인제 없이 remove만 하면 다 날라가더라구요-_-


3. Node.js 코딩

보니까 socket.io와 expres framework를 지원하는 것 같더라구요. 둘 다 사용하는 예제로 한번 올려보겠습니다.
app.js, index.html, Procfile, package.json 파일을 만들어서 올립니다.
app.js파일은 실제 node.js코드파일이고, index.html은 node.js에서 내려주는 클라이언트 파일이며 Procfile은 heroku에서 사용하는 앱 실행명령어가 있는 파일이며, package.json은 현재 프로젝트에 대한 요약 및 어떤 버전에 의존하고 있는지 명세하고 있는 파일입니다.

app.js
var app = require('express').createServer()
,io = require('socket.io').listen(app);

// 여기서 포트는 지정할 수 없고 하나만 쓸 수 있음. 미리정해진 상수.
app.listen(process.env.PORT);
console.log("port = " + process.env.PORT);

app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});


index.html
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
  });
</script>


package.json 
{
"name": "node-example",
"version": "0.0.1",
"dependencies": {
"express": "2.2.0",
"socket.io": "0.8.2"
}
}


Procfile
web: node app.js


4. git로 커밋과 remote쪽인 heroku로 push

이제 이 폴더를 git로 새로 생성해서 커밋을 합니다.

git init
git add .
git commit -m "init" 

 
그리고 heroku의 새로운 프로젝트를 생성해야 합니다.
Heroku에서 얘기하는 Cedar stack이 아직도 뭔지 모르겠습니다. 근데, Java나 Ruby On Rails, Node.js를 사용하려면 이걸로 프로젝트를 생성해야하는 것 같습니다. 

heroku create --stack cedar helloworldnodejs(원하는 이름)

이거 하면 해당 git에 remote로 heroku라는 이름으로 추가가 됩니다. 저기 원하는 이름을 쓰지 않으면 랜덤으로 이름을 생성해서 만듭니다. 그리고 현재 heroku에서 존재하는 이름으로 생성해도 Name is already taken이라는 에러메세지가 뜹니다. 유니크하게 적어주면 됩니다.

이제 push하면 됩니다.
git push heroku master

현재 프로세스가 돌아가는지 보려면
heroku ps
또는 정확하게 앱을 찍어서
heroku ps --app helloworldnodejs(앱 명칭)


5. 앱이 잘 돌아가는지 확인

heroku의 앱 url은 앱이름.herokuapp.com 입니다.
http://helloworldnodejs.herokuapp.com/
여기 접속해서 console로 helloworld가 뜬다면 된 것이겠죠. 서버쪽 로그도 확인할 수 있는데, 서버로그는 ps명령어와 동일합니다.
heroku logs --app helloworldnodejs(앱 명칭)


PS. play! framework도 꽤 관심있었는데, 여기서 호스팅까지 해준다니 이번 기회에 한번 봐야겠네요. node.js를 이용해서 초간단 html5게임이나 한번 만들어봐야겠네요~!
 
Posted by 머드초보
,
 
phpmyadmin을 많이 써와서 그런지 웹용 GUI툴이 익숙하고 좋네요.

공식사이트
http://code.google.com/p/rock-php/

두가지 버전이 있네요. 하나는 압축풀고, 초간단하게 자체적으로 nginx서버를 구동해서 그냥 실행으로 하는 방법과 현재 자신의 서버에 php파일을 복사해서 실행하는 방법이 있네요.

일단 두번째 방법으로 하려면 자신의 apache폴더에 압축 푼 파일들을 복사해서 넣으면 그냥 동작합니다. 일단 안전하게 쓰기 위해서는 MongoDB에 인증을 추가하고, RockMongo에 인증설정을 해야 합니다. MongoDB실행 시에도 --auth 옵션을 붙여야 합니다.
mongod --auth


1. MongoDB에 인증추가하기

공식사이트에 잘 나와있습니다(MongoDB사이트는 공식사이트의 메뉴얼이 너무 잘 나와있네요.)
http://www.mongodb.org/display/DOCS/Security+and+Authentication

각각 Database별로 user를 추가할 수도 있고, admin계정에 추가할 수도 있습니다.
일단, 최초로 admin db에 user를 한번 추가할 수 있습니다. 그 뒤로는 인증을 거치지 않으면 인증에러가 뜹니다.

최초실행 시
MongoDB shell version: 1.8.2
connecting to: test
> use admin
switched to db admin
> db.addUser("mudchobo", "1234")
{
        "user" : "mudchobo",
        "readOnly" : false,
        "pwd" : "df18a34cc2758142674a9b20f847dcd1"
}
>

두 번째 실행 시
> db.addUser("mudchobo1", "1234")
Mon Jun 27 00:33:22 uncaught exception: error {
        "$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
        "code" : 10057
}
>

인증을 할 때에는 db.auth("id", "비번") 해주면 됩니다.
admin 계정 인증 후에는 addUser를 할 수 있습니다.
> db.auth("mudchobo", "1234")
1
> db.addUser("mudchobo1", "1234")
{
        "user" : "mudchobo1",
        "readOnly" : false,
        "pwd" : "2ae2c2bae794bc3e66e883379393d4db"
}
>


2. RockMongo 환경설정

환경설정할 것이 거의 없네요. php설치 폴더에 config.php파일이 있는데, 열어서 인증부분만 true로 바꾸면 됨.
$MONGO["servers"][$i]["mongo_auth"] = true;


3. url로 접근

설치 url로 접근하면 UserName과 Password 치라고 나오는데, addUser를 통해 추가한 아이디와 비번을 치면 접근이 됩니다. auth를 쓰지 않고, db별 인증을 한 사용자도 접속을 할 수 있게 해두었습니다.


4. RockMongo 화면

phpmyadmin과 매우 흡사합니다. 맨 왼쪽에 database목록이 나오고, 하위 목록에는 table(Collection)들이 나옵니다.


간단한 수정 및 Field 추가, 데이터추가, 데이터삭제 등등 기본적인 기능을 다 갖추고 있습니다. 좋네요.


 
Posted by 머드초보
,