node.js 를 이용해서 개발한지가 몇개월 지났습니다. 그동안 언어 배우느라 (자바스크립트를 할 줄 몰랐음) - 사실 언어 자체는 어려울게 하나도 없더군요. - 개발 환경에 익숙해 져야 해서 좀 더 나에게 맞는 편리한 환경을 만들 여력이 없었으나 이제는 어느정도 익숙해 져서 개발 환경쪽에 신경이 쓰이더군요. (사실은 웹일을 하기 싫어서 딴 짓을 하고 있..)

제가 설명드리는 기준은 OSX 입니다. (우분투를 사랑하지만 제 개발 환경은 OSX 라..)

avascript 개발하는데 있어서는 완전 필수입니다. 문법 체크까지 해서 이상한 거는 빨간 밑줄을 그어주더군요. (빨간펜 선생님?!!) 

설치법 입니다. 

$ svn checkout http://js2-mode.googlecode.com/svn/trunk/ js2-mode
$ cd js2-mode
$ emacs --batch -f batch-byte-compile js2-mode.el
$ cp js2-mode.elc ~/.emacs.d/


이러면 설치 끝입니다. 일단 설치만 하고 나중에 설정을 하기로 합니다. 

yasnippet 

TextMate 의 함수 템플릿 기능을 보고 만든 Minor 모드 입니다. 이런 것이 이맥스의 가장 큰 장점입니다. 필요하면 만들면 된다!! 
이것의 사용법은 쉽습니다. 예를 들면 자바스크립트 코딩할 때 함수 선언할 일이 필요하다면 

fun 입력하고 TAB 을 누르면 함수의 템플릿이 자동으로 생성됩니다. 

/**  */
function my_function( args ){
  
}


이런식으로 그러면 함수 설명과 my_function 과 args 부분을 적어주기만 하면 됩니다. 
https://github.com/capitaomorte/yasnippet 여기에 잘 정리가 되어 있습니다. 설치법도 있지만 퍼 와서 보자면 

$ cd ~/.emacs.d/plugins
$ git clone https://github.com/capitaomorte/yasnippet



.emacs 파일의 한 구석에 

(add-to-list 'load-path
              "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
;; (yas-global-mode 1)    


(yas-global-mode 1) 는 필요할 때만 쓰게 일단은 커멘트 처리 해 둡니다. 


js2-mode 인덴테이션(indentation) 수정 

js2-mode 를 쓰거나 아니면 이클립스에서 개발을 하거나, 가장 문제가 되는 것이 바로 이 인덴테이션이더군요. 정말 그지 같은 인덴테이션 아닌가요? 탭 (tab) 한번 누르면 화면의 1/3 정도 지나쳐서 커서가 위치하는 것을 보면 한숨이 나오더군요. 그런데 역시 세상에는 같은 고민을 가지고 있으면 해결할려고 하는 사람도 있는 법입니다. 


바로 여기 입니다. 여기에 보면 수정하는 방법이 잘 정리가 되어 있습니다. js2-mode 는 이미 설치를 했기 때문에 중간에서 설명하고 있는 에스프레소(espresso) 를 설치해줍니다. (java 가 커피라 그런지 에스프레소 등등의 네이밍들이 요즘 눈에 띄는군요 ㅎㅎ) 


여기서 받아주면 됩니다. 이 모드를 설치해 주는 이유는 인덴테이션이 좋기 때문이라고 글쓴이가 설명하고 있더군요. 참고로 저는 저 파일을 ~/.emacs.d/ 밑에 복사해 뒀습니다. 역시 설치만 하고 설정은 나중에 하는 걸로 합니다. 여기까지 설치가 됐으면 이제 글쓴이가 만든 함수 부분이 기니까 한꺼번에 설정하겠습니다. 

~/.emacs.d/ 에 파일 한개를 만들어 줍니다. (제 경우에는 cr-js.el 이였습니다) 
그러면 cr-js.el 이라고 가정을 하고 다음 과 같은 내용을 추가 해 줍니다. 그리고 다음과 같이 파일은 만들어 줍니다. 



그리고 .emacs 파일에 

(require 'cr-js)


한줄만 추가해 주면 됩니다. 
내친김에 다른 것도 손을 좀 볼까요? 
node.js 에서 웹을 개발할 때 쓰는 view 엔진이 여러개가 있습니다. (정확히는 express) 기본적으로 jade 가 쓰이고요. 디자이너들과 공동 작업을 할 때는 ejs 가 많이 쓰인다고 합니다. ejs 를 쓸때 마땅한 모드가 없더군요. 그런데 ruby on rails 에서 사용하는 rhtml 이 문법이 거의 비슷하더군요. 그래서 rhtml-mode 를 설치해 주기로 합니다. 


요게 다른 모드랑 연계해서 동작하지 않고 독자적으로 rhtml 을 처리하더군요. 맘에 들어서 설치해줬습니다. 

$ cd ~/.emacs.d
$ git clone git://github.com/eschulte/rhtml.git 


그리고 .emacs 에 

(add-to-list 'load-path "~/.emacs.d/rhtml")
(require 'rhtml-mode)

(add-to-list 'auto-mode-alist '("\\.ejs$" . rhtml-mode))
(add-hook 'rhtml-mode-hook
          (lambda ()
            (yas-global-mode 1)))


이렇게 추가해 주면 됩니다. 한가지 이상한 점이 있지요? rhtml 도 yas 모드가 있는지 궁금하실 것입니다. (설정에 보면 있는 것처럼 하는데) 그래서 설치해 주기로 합니다. 


rails 용 snippet 을 모아둔 것들입니다. 당장은 rails 개발을 안할꺼기 때문에 rhtml 용만 떼어 오기로 합니다. 

$ cd ~/
$ mkdir temp
$ cd temp
$ git clone git://github.com/eschulte/yasnippets-rails.git
$ cd yasnippet-rails 
$ cd rails-snippets
$ cp -r rhtml-mode ~/.emacs.d/plugins/yasnippet/snippets/


이렇게 해주면 snippet 이 설치가 됩니다. 이제 편하게 코딩을 하시면 됩니다. 

ps.

js2-mode 용 snippet 도 설치를 하셨다면 node.js 에서 자주 쓰이는 prototype method 선언하는 템플릿을 만들어 두면 편합니다. 제가 만들어 쓰는 것을 공개합니다. 

# -*- mode: snippet -*-
# name: protf
# contributor: Wolfgang crazia <crazia@gmail.com>
# --
/** $1 */
${2:my_class}.prototype.${3:method_name} = function ( ${4:args} ){
    $0
}


이 파일 이름을 (확장자 없이) protf 로 만들고 

~/.emacs.d/plugins/yasnippet/snippets/js2-mode/protf 


로 저장하면 나중에 자바스크립트 파일 편집중에 protf 라고 입력하고 탭 (tab)키를 누르시면 자동으로 템플릿이 완성됩니다. 



    - 초간단 요약 -
    기존의 자바 서비스하고 있던 부분의 일부를 node.js 로 포팅해서 두개를 벤치마크 해 봄. 자바는 멀티코어 환경에서 테스트하고 node.js 는 cluster 를 안쓰고 단일 코어에서 (아무것도 안하면 단일코어에서 도니 ㅎㅎ) 동작시켜봄 결과는 아래와 같음 



    씨피유와 메모리는 적게 쓰지만 (훨씬 적게..) 성능은 그리 낫지 않음. 이거저거 바꿔가며 테스트를 하던중 ORM 을 지원하는 Sequelizer 가 느리다는 것을 알아냄, node-mysql 로 바꾸고 나니 바뀐 내용입니다.



단일 코어를 씀에도 불구하고 자바와 비슷하게 성능이 나오고 있습니다. 같은 하드웨어라 가정하면 node.js 에 클러스터 (cluster)를 적용한다고 한다면 자바의 거의 5배에 해당하는 효율을 보일 것으로 예상됩니다. 

   글쓴이가 올린 다음 글을 보면 , node.js 는 성능이 워낙 뛰어나고, 여러사람들이 참여하기 때문에 무섭게 성장하는 개발환경이 될것이기 때문에 주의깊게 보고 있기는 하나, 기업용으로 쓰기에는 아직 치명적인 약점이 있다고 합니다. 바로 node.js 자체의 개발 주기가 너무 짧기 때문에 오랜 기간을 개발해야 하는 기업용 환경에서는 좋지 않다는 것입니다. (개발 하는 중간에 메인 언어가 업데이트 된다고 생각해 보세요 ㅎㅎ) 그렇기 때문에 1.xx 대로 올라가서 안정화가 된다면 그 때부터 기업용으로 쓰기에 무리 없지 않을까 라고 본답니다. 물론 저자는 아주 만족한 거 같다고 하더군요. 

  저도 글쓴이의 의견에 어느정도 동의합니다. 다만 지금 버젼으로도 정말 기업용 커다란 사이트가 아닌, 간단한 기능을 제공하는 사이트를 제작하는 데에는 (특히나 App 서버로) 최고의 효율을 보이지 않을까 싶습니다. 

What is this? 가 이것은 무엇인가요가 아닌  this 란 무엇인가요? 라는 말 장난을 쳐 둔 포스트의 내용이 있습니다. 



객체지향 프로그래밍 (Object Oriented Programming) 언어에 보면 this 라는 애가 등장합니다. 여기서의 this 는 간단해서 Object 자신을 가르키고 있습니다. 

다만 Javascript 의 this 는 이와 달라서 class 내에 선언된다고 해도 꼭 그 class 객체를 지정하지는 않습니다. 이 알송 달송한 javascript 의 this 를 체계적으로 잘 설명한 글 입니다.


왠만하면 번역을 해서 편하게 설명할 까 했는데 너무 양이 많아서 엄두가 나지 않는군요 ㅎㅎ;; 대신 결론 부분만 조금 언급을 하자면 this 는 실행 범위 (scope) 의 영향을 받는 다는 것입니다. 

1. 새로운 실행범위를 만드는 유일한 길은 function 키워드를 이용해서 입니다. 

2. var 용법은 현재 범위에만 통용되는 변수를 만들게 해줍니다. 만약 local 범위에서 var 를 이용해서 변수를 만든다면 그 변수는 외부에서 선언된 같은 이름의 변수를 덮어버립니다. 

3. this 와 argument 를 제외한 모든 변수들은 lexical 범위를 따릅니다. (이 뜻이 뭔고하니 함수나 파일 안 같은 물리적인 범위를 말합니다)

4. this 와 argument 는 (일반적인 OOP 와는 다르게) 각각의 불려지는 Context 환경에 따라 다릅니다. 얘네들을 클로져 (closure) 안에 포함시키고 싶다면 참조 (reference) 시키는 코드를 작성해야 합니다. 

5. this 의 값은 함수가 어떻게 불려지느냐에 따라 정의됩니다. 이것을 조절하고 싶다면 call 이나 apply 를 이횽해야 합니다. 


만약 OOP 에서 사용되는 this 의 용법을 구현하려고 하면 좀 복잡한 방법을 써야 한다고 합니다. 그런데 그렇게 구현하는 방법을 고심할 바에는 javascript 의 문법에 익숙해지는 것이 낫다는 충고를 줍니다.

자세한 내용은 본문에 예제와 함께 잘 정리되어 있습니다. 


저자: 제레미 키스
옮김: 윤석찬

항상 웹을 배워볼려고 하다 보면 HTML 에서 끄적거리며 이거저거를 해보다가 포기하곤 했었습니다. "웹 자체가 어려운건 아니다" 라는 소리를 항상 들어오곤 했었습니다. 하지만 모르는게 너무 많다보니 배워야 할게 쌓여 있다 보니 웹 자체로 접근하기가 매우 힘들었습니다.

그런 의미에서 이 책은 아주 마음에 드는 책이였습니다. 기본은 Javascript 에 관한 책이였지만 HTML도 CSS도 다루고 있습니다. 그리 많이 다루지는 않지만 따라서 개발하기에 아주 충분할 정도로 잘 다루고 있습니다.

아무 생각없이 따라가다 보면 훌륭하게 결과물이 나오는 모습을 볼 수 있습니다. System Programming 하고는 또 다른 세상을 만나게 해주더군요.

결론적으로 말하면 이제 웹 이란 것이 어떤것일까? 맛좀 볼까? 하시는 분들에게 강력하게 추천합니다. 그렇기는 하지만 기본적으로 어느정도 코딩을 하실 수 있으면 더 좋겠더군요.

웹 서비스의 시작을 맛보시려는 분에게 꼭 필요한 책이라 생각합니다.


+ Recent posts