1. 개요 - 서버 환경에서 동작하는 자바스크립트 프레임워크로 DB-클라이언트-서버를 모두 자바스크립트로 구성할 수 있게 되었다.
2. 등장 배경 - 자바스크립트 활용도의 증가 - 웹 브라우저를 벗어나 사용하려는 움직임이 시작 - 2008/9~ 구글 크롬 발표, V8 자바스크립트 엔진의 등장, 자바스크립트의 단점인 '속도'가 개선, 코드를 공개 - 2009/1~ 자바스크립트를 웹 브라우저 외에서 사용하기 위한 표준을 만들자는 의견 증가로 CommonJS 표준 발표
- Ryan Dahl은 CommonJS 표준과 V8 자바스크립트 엔진을 기반으로 Node.js를 개발
3. 기존 어플리케이션과 Node.js 어플리케이션의 차이
- 기존 웹 서버는 대부분 스레드를 기반으로 하는 동기 방식으로 네트워크 입출력을 처리
- Node.js는 이벤트를 기반으로 하는 비동기 방식으로 네트워크 입출력을 처리
4. 이벤트 기반 비동기 방식이란? 예) 재래 시장에서 4개의 가게를 들러 장을 보는 상황이다. - 동기 방식(멀티 스레드, 멀티 프로세스) : 몸을 복제해 동시에 여러 가게에 가서 줄을 선다. - 비동기 방식(이벤트 기반) : 시장에 대기 시스템을 도입 후, 각 가게를 돌면서 대기표를 받고, 번호가 불리면(이벤트 발생) 물건을 받아온다.
- 동기 방식은 작업 요청이 들어올 때마다 스레드를 여러 개 만들어 동시에 일을 처리한다. 일과 스레드의 양은 비례하므로 메모리 사용량이 증가한다는 단점이 있다.
- Node.js가 사용하는 '이벤트 기반 비동기 방식'은 스레드를 단 하나만 생성하므로 몸은 하나이고, 이벤트를 사용하므로 빠르게 일을 처리할 수 있다. 일은 많아도 어쨋든 몸은 하나이므로 메모리 사용량과 같은 시스템 리소스 사용량에는 변화가 거의 없다. 따라서 대규모 네트워크 프로그램을 개발하기 적합한 형태이다. 단점은, 그 한명이 쓰러지는 순간 프로그램 전체에 문제가 발생한다.
* Node.js 내부는 여러 스레드가 스레드 풀로 동작한다. 또한 실제 웹서버를 운용할 때에는 코어를 분산해서
관리하므로 하나의 스레드만 사용한다고 볼 수 없다. 중요한 것은 스레드의 운용을 플랫폼이 담당하며,
개발자는 스레드를 의식하지 않고 프로그래밍을 할 수 있다는 점이다.
5. Node.js의 장단점
- 장점 1) 자바스크립트를 사용하기 때문에 웹 개발자의 진입 장벽이 낮다. 2) 구글의 V8 자바스크립트 엔진을 사용하기 때문에 앞으로도 계속 성능 개선의 여지가 있다. 3) C++을 이용한 기능 확장이 가능하다. 4) 'Non-blocking I/O'와 '단일 스레드 이벤트 루프'를 통한 높은 Request 처리 성능을 가지고 있다. DB에서 대량의 데이터를 취득, 웹페이지에 표시하는 처리의 경우, 일반적으로 DB 처리에 대기시간(blocking)이
발생하기 때문에 웹페이지 표시가 지연되는 현상이 발생한다. 'Non-blocking I/O'는 비동기 처리를 실시하므로 DB 처리와 웹페이지 표시를 별도 진행하여
스트레스 없이 웹페이지 표시가 가능하다.
5) Node.js에는 Socketio라는 실시간 통신을 실현하는 라이브러리가 있어 대량의 데이터 처리와 실시간 통신을
구현할 수 있는 기능을 모두 갖추고 있다.
- 단점 1) 자바스크립트를 사용하기 때문에 C나 C++로 개발된 서버 어플리케이션보다 느리다.
2. 등장 배경 - www의 일반인 사용의 증가로 상대에 따라 다르게 반응하는 웹 페이지가 필요. - 1995. HTML 페이지에 움직임을 주고 싶었던 NetScape사의 의뢰로 Branden Erich가 제작. → 웹 문서의 내용을 동적으로 변경하거나 이벤트를 적용할 수 있게 됨.
3. 등장 후 흐름 - 타 브라우저 회사에서 유사 언어를 출시, 개발자들은 각 브라우저의 호환성으로 인해 고생. → NetScape사는 표준화 단체인 ECMA International에 표준화를 요청, 1997.7에 표준 완성. → 당시, SUN사가 'JAVA'라는 이름을 상표로 등록해놓았기 때문에, 표준 언어 이름을 'ECMA Script'로 결정.
- 1997. 페이지의 DOM을 다뤄 컨텐츠, 스타일을 변화하고 요소를 보여주거나 숨기는 동적 HTML이 등장함. - 1999. IE5에서 소개된 XMLHttpRequest API가 나와 Client측 Script를 HTTP(S)로 서버에 요청하고, 텍스트 형식으로 데이터를 받을 수 있게 됨.
- 2001. Douglas Crockford가 텍스트 형식으로 데이터를 저장하는 자바스크립트 문법을 'JSON'이라고 명명하여 문서로 만들음. - 2004. 규모가 큰 자바스크립트 프로그래밍을 위한 프레임워크인 Dojo Toolkit이 등장함. - 2005. Ajax를 이용해 구글이 구글Maps를 소개, 이후 Ajax의 인기가 상승하고, XML 대신 JSON의 사용이 증가함.
- 2006. 크로스 브라우징을 위해 고생하는 개발자를 위해 jQuery가 등장하여 브라우저의 차이를 넘어선 추상화와 DOM을 손쉽게 쿼리 및 수정하기 위한 API를 제공. * jQuery는 같은 코드로 여러 브라우저에서 같은 동작을 하게 해주고, CSS 형식의 선택자로
DOM을 쉽게 선택, 제어하는 방법을 제공.
- 2008. V8이라는 빠른 자바스크립트 엔진이 탑재된 구글 크롬이 등장하여 자바스크립트가 느리다는 인식을 바꿈.
- 2009. Ryan Dahl에 의해 Node.js가 개발되어 자바스크립트의 영역을 서버 사이드로 넓힐 수 있게 됨.
클라이언트, 서버 둘 다 자바스크립트로 프로그래밍 할 수 있었기 때문에 풀스택 개발자가 증가함.
- 이후, 클라이언트 사이드에도 MVC 패턴을 활용하려는 움직임이 증가하여 여러 자바스크립트 프레임워크가 탄생함.