이 문서는 개인 적으로 공부하는 용입니다.
노드 자바란? - IBM dW 기사
요약 : Node는 서버가 어떻게 작업해야 하는지에 대한 개념을 변화시킨 서버측 JavaScript 해석기입니다.
목표는 프로그래머가 고도로 확장 가능한 애플리케이션을 빌드하고 하나의 유일한 실제 머신만으로 수 만 개의 연결을 처리하는 코드를 쓰도록 사용하는 것입니다.
Node가 어떤 문제를 해결하는가?
Node의 명시된 최우선 순위의 목표는 "확장 가능한 네트워크 프로그램을 빌드하기 위해 간편한 방법을 제공하는 것"이다. 현재 서버 프로그램의 문제는 무엇인가?
계산을 해보자. Java™ 및 PHP와 같은 언어에서 각 연결은 이와 함께 잠재적으로 수반하는 2MB 메모리가 있는 새 스레드를 생성한다.
8GB RAM을 갖춘 시스템에서 동시적 연결의 이론적인 최대 숫자로 약 4000명의 사용자를 연결시킨다.
클라이언트 기반이 성장하면서, 더 많은 사용자를 지원하는 웹 애플리케이션을 원했다면 점점 더 서버를 추가해야 했다.
물론, 이는 비즈니스의 서버 비용, 트래픽 비용, 인건비 및 기타 등등에 더해진다. 이러한 비용을 더하는 것은 잠재적인 기술 문제이다
사용자는 각 요청에 대해 다른 서버를 사용할 수 있으므로, 어느 공유 자원이나 모든 서버에 걸쳐서 공유되어야 한다.
이러한 모든 이유로 인해, 전체 웹 애플리케이션 아키텍처(트래픽 처리량, 프로세서 속도 및 메모리 속도 포함)에서 병목은 서버가
처리할 수 있는 동시 연결의 최대 숫자였다.
Node는 연결이 서버로 설정되는 방법을 변경하여 이 문제를 해결한다.
각 연결에 대해 새 OS 스레드를 생성하는(그리고 이와 수반하는 메모리를 할당하고) 대신에 각 연결은 Node 엔진의 프로세스 내에서 이벤트 실행을 촉발한다.
Node는 허용된 잠금이 없고 I/O 호출에 대해 직접 차단하지 않기 때문에 교착 상태가 절대 없다고 주장한다.
Node는 수 만개의 동시 연결을 지원할 수 있는 서버 실행을 주장한다.
그러므로 수 만개의 동시 연결을 처리할 수 있는 프로그램이 있으므로 Node로 실제로 무엇을 빌드할 수 있는가?
이 많은 연결에 필요한 웹 애플리케이션이 있다면 멋질 것이다. 이는 "이 문제가 있다면 문제가 아니다" 종류의 문제 중 하나이다.
이를 다루기 전에 Node가 어떻게 작업하는지 그리고 실행하도록 어떻게 설계되는지에 대해 살펴보자.
결론
"Node.js란?"이라는 이 기사의 초반부에서 독자가 가졌던 많은 의문들에 대해 이 기사를 읽은 후에 독자 스스로 모두 답할 수 있어야 한다.
독자는 Node.js가 무엇인지에 대해 몇 가지 분명하고 간결한 문장으로 설명할 수 있어야 한다. 그렇게 수행할 수 있다면, 거의 다른 모든 프로그래머들보다 앞서는 것이다.
Node에 대해 필자와 대화했던 많은 사람들이 Node가 정확하게 수행하는 내용에 대해 혼란스러워했다.
당연히 이들은 Apache 사고방식을 가지고 있다. 서버가 HTML 파일을 놓는 애플리케이션이고 모두 작동한다는 것이다.
대부분의 프로그래머가 Apache와 Apache가 작업하는 것에 익숙하기 때문에, Node를 설명하는 가장 간편한 방법은 Apache와 비교하는 것이다.
Node는 Apache가 할 수 있는 어느 작업이나 할 수 있는(일부 모듈을 사용하여) 프로그램이지만,
빌드할 수 있는 확장 가능한 JavaScript 플랫폼이 되어 훨씬 더 많은 작업을 할 수도 있다.
이 기사에서 Node가 고도로 확장 가능한 서버를 제공하는 목표를 달성하는 방법을 확인했다.
이는 Google, V8 엔진으로부터 엄청나게 빠른 JavaScript 엔진을 사용한다. 이는 코드를 최소화하고 읽기 간편하게 유지하도록 이벤트 구동형 설계를 사용한다.
이러한 모든 요인들로 인해 Node가 원하는 목표를 만들어낸다 이는 엄청나게 확장 가능한 솔루션을 쓰기에 상대적으로 간편하다.
Node가 무엇인지에 대해 이해하는 것이 중요한 것처럼 무엇이 아닌지에 대해 이해하는 것도 중요하다.
Node는 즉시 PHP 웹 애플리케이션을 더 확장 가능하게 만들 Apache의 대체물에 불과하지 않다. 그것은 전혀 사실이 아니다.
지금은 Node의 수명 중에서 여전히 초기 단계이지만, 엄청나게 급격히 성장하고 있으며 해당 커뮤니티가 매우 적극적으로 관여하고,
작성되는 훌륭한 모듈이 매우 많고 이렇게 성장하는 제품은 독자의 비즈니스에 1년 내에 나타날 수 있다.
Node.js를 만든 Ryan Dahl 가 JSConf 2009 에서 발표한 동영상
outsider님의 블로그 내용 http://blog.outsider.ne.kr/480
노드 자바 관련 참고 사이트
IBM : http://www.ibm.com/developerworks/kr/library/os-nodejs/index.html?ca=drs-
여름으로가는문 님 블로그 : http://blog.doortts.com/189
outsider님의 블로그 : http://blog.outsider.ne.kr/480
Node.js 공식 홈페이지 : http://nodejs.org/
'Dev > Node.js' 카테고리의 다른 글
nodejs web서버 만들기 - hello world (0) | 2012.10.01 |
---|