노드란 무엇일까?
노드(Node.js)는 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구이다.
탄생 배경
- 2009년 경, 라이언 달이라는 개발자에 의해 만들어짐.
- 당시에는 웹 서버에 파일을 업로드할 때, 업로드가 완료되기 전까지 웹서버에서 다른 작업을 할 수 없었다.
- 기능을 담당하는 핸들러(자바로 따지면 쓰레드?)가 생성되고, 완료 시까지 대기해야 한다.
- 요청의 수가 증가하면 CPU나 메모리 사용량이 증가하여 문제가 발생한다.
특징
비동기 입출력 방식
- 노드는 하나의 요청 처리가 끝날 때가지 기자리지 않고 다른 요청을 동시에 처리할 수 있는 비동기 입출력 을 적용
-
다른 작업을 처리할 수 있는 시점이 되면 콜백 함수 가 호출된다.
#### 비동기 vs 동기
- 비동기 입출력(논 블로킹, Non-Blocking IO)방식 : 이전 작업을 기다리지 않고 다른 작업을 진행
- 동기 입출력(블로킹, Blocking)방식 : 이전 작업을 기다렸다가 다른 작업을 진행
이벤트 기반 입출력 방식
-
자바스크립트는 코드를 한 줄씩 해석하면서 실행하는 인터프리터방식을 사용하므로 속도가 느려 문제가 되곤 했다. -> 크롬 V8 자바스크립트 엔진이 나오면서 해결되었다.
#### V8 동작 과정
- 자바 스크립트 코드 -> 네이티브 코드로 변환 -> 변환된 코드를 V8엔진으로 해석
- 시스템 구조
- 이벤트 루프 : 스레드 풀과 이벤트를 받아처리
- 네트워킹 기능 : 소켓, HTTP 라이브러리
- 표준 라이브러리 구현
모듈 방식
- 코드를 별도의 파일로 분리해서 관리 하고 필요할 때 불러서 사용하는데 이를
모듈
이라고 한다. - CommonJs 표준 스팩 을 따른다.
- 여러 개의 모듈을 합쳐서 하나의 패키지 로 만들 수 있다.
개발 도구 설치하기
- IDE 설치(WebStom, 브라켄 등)
- 브라우저 설치(IE, Chrome)
- 노드 설치
- LTS와 Current 버전 존재
- what?)
- LTS(Long Term Supported) : 서버 환경에서 안정적으로 동작하도록 지원하는 버전
- Current : 새로운 기능을 추가하거나 기존 버그를 우선적으로 적용하는 버전