봉 블로그

node.js 기초 본문

ajax_js

node.js 기초

idkbj 2013. 12. 28. 12:41

node.js 는 javascript 로 서버프로그램을 개발하는 플랫폼이다.


페이팔이 node.js 로 서버프로그램을 교체하고 나서 평균응답시간의 35% 나 감소했다죠.

https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/


자바에서 웹어플을 개발하려면 tomcat 이나 jboss 같은 was 가 필요하지만, node.js 는 10줄도 안되는 코드로 간단한 웹어플을 개발할수 있다. 개발 생산성은 정말 좋다.

http://nodejs.org/


node.js 만으로는 file io 또는 db 연동등을 할수 없기때문에 node packaged moudle 라는 것을 npm 이라는것으로 설치하여 개발하면된다. npm 은 마치 linux 의 yum 과 같이 필요한 모듈들을 자동으로 설치해준다. 매우 편하다.


자체 성능테스트결과 single process 기반의 node.js 는 자바 애플리케이션에 비해 성능이 안좋지만, cluster 기반의 multi process 환경으로 구동하면 월등히 성능이 좋다. 

http://nodejs.org/api/cluster.html

cluster 기반으로 node.js 를 구동하면 master process +  cpu 개수 만큼의 worker 프로세스가 기동된다. 

redis 연동과 관련해서는 (redis 모듈기준) single clinet 기반의 애플리케이션이 generic-pool 기반 client pool 기반보다 성능이 훨신좋다. 굳이 generic-pool 을 사용할 필요가 없다.


MVC Pattern 개발 

express 를 이용하면 mvc pattern 개발이 가능하다. 하지만, spring framewok 과 같은 성숙함에는 많이 못미친다.


Query Mapping based ORM (MyBatis)

mybatis 같은 모듈은 없는것같다. (있다면 알려주세요. ^^) 하지만, mysql 모듈의 custom pattern 을 이용하면 비슷하게 흉내낼수 있다. https://github.com/felixge/node-mysql#custom-format 

그래도 mybatis 처럼 다양한 dbms 를 지원하는 단일 프레임워크가 없다는것이 아쉽니다. 하지만, 자바의 하이버네이트같은 sequelize 라는것을  많이 사용하는 모양이다. 


Logging

java 에서는 slf4j, log4j 같은 오픈소스 진영에서 거의 표준과 같이 사용하는 library 가 있는데 반해. node.js 관련 패키지는 그러한 모듈이 없다. 각 모듈별 로깅방식이 따로 정의되어 있다. 비즈니스 로직개발은 winston 을 이용해 로깅표준을 정하면 될것 같은데, 로깅설정을 중앙집중적으로 설정하기 위한 별도의 커스터마이징이 필요하다.


node.js 가 개발생산성이 매우 좋긴 하지만, 코드리뷰를 하지 않는 우리나라 현실에서는 시스템 규모가 커지만 자바와 다를게 없을것 같다는 생각이 든다. 오히려 자바가 더 나을듯.

 

성능이 매우 중요하고 node.js 개발 인력을 안정적으로 수급할수 있는 확신이 있다면, node.js 는 매우 좋은 대안이 될수 있다. 그렇지 않다 해도 소규모의 웹어플이라면 역시 도입해볼만하다.