✅ Node.js
Node.js는 Chrome V8 자바스크립트 엔진으로 빌드된 런타임 환경으로 주로 서버 사이드 애플리케이션 개발에 사용되는
소프트웨어 플랫폼이다. 즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다.
Node.js를 통해 웹어플리케이션이 더욱 발전하게 되었으며, 정적인 홈페이지 뿐만 아니라 쇼핑몰, 티켓 예매사이트, 블로그 등 데이터가 변해가는 사이트를 만들 수 있으며,
여러 개발자가 만든 프로그램과 게임을 웹상에서 구동시켜 안드로이드폰, 아이폰, 윈도우PC, 맥 등 플랫폼의 제약에서 벗어나 어디든 상관없이 실행 가능하게 해준다.
스크립트 언어는 웹브라우저(크롬, 사파리, 익스플로러, 파이어폭스 등)가 있어야만 동작하는 프로그램이지만 node.js는 자바스크립트 언어로 따로 분리하여 터미널 프로그램 사용으로 인하여 브라우저 없이 실행이 가능하다.
⭕ Node.js 설치 방법 - http://nodejs.org 접속 후 설치
위 이미지와 같이 LTS(Long Term Supported) 버전으로 다운로드 ,current는 현재 버전이지만 안정적이지 않을 수 있으니 왼쪽 LTS버전으로 다운로드 해준다.
(cmd창에서 node -v를 입력해서 설치가 되었음을 확인할 수 있다.)
✅ Node.js - HTTP Server 맛보기
🔅 app.js 파일 만들기
Node.js는 HTTP 서버 모듈을 내장하고 있기 때문에 Aparch와 같은 별도의 웹서버를 설치할 필요가 없다.
또한, 모듈 단위로 각 기능을 분할할 수 있다. 모듈을 1대1 관계를 가지며 자신만의 독립적인 영역(Scope)를 갖는다.
클라이언트 사이드 자바스크립트와는 달리 전역 변수의 중복 문제가 발생하지 않는다.
모듈은 moudule.exports 또는 exports 객체를 통해 정의하고 외부로 전달한다.(ex. module.exports = router;)
HTTP 모듈의 createServer([requestListener]) 메소드를 사용하여 http 서버 객체를 생성한다.
👉 req(request) 이벤트가 발생하면 http req(request)를 처리하여 res(response)를 반환하는 req(request) Listener 함수를 호출한다.
이 req Listener 함수는 req와 res 객체를 전달 받으며, HTTP req 이벤트가 발생할 때마다 한번씩 호출된다.
터미널을 열고 해당 파일이 있는 경로에서 다음 명령으로 서버를 실행
node app.js
위 명령 실행 후 브라우저에서 "http://localhost:3000"에 접속하면 "Hello World!!!"가 출력되는 것을 확인 가능.
📚 그 외 Node.js 특징
📘 이벤트 기반
이벤트가 살생할 때 미지 지정해둔 작업을 수행하는 방식
- 이벤트: 클릭, 타이머, 네트워크 요청
- 이벤트 리스너: 이벤트를 등록하는 함수
- 콜백 함수: 이벤트가 발생하였을 때 실행될 함수
📗 논 블로킹 I/O (단일 쓰레드 이벤트 루프 기반 비동기방식)
- 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
- 동시 request가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적다.
📙 노드 서버의 장단점
장점 | 단점 |
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용 | 싱글 스레드라서 CPU 코어를 하나만 사용 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리 필요 |
웹 서버가 내장됨 | 서버의 규모가 커질 떄 서버 관리가 힘듦 |
자바스크립트 사용 | 모호한 성능 |
I/O 작업이 많은 서버에 적합 | 복잡성이 많은 서버에 부적합 |
JSON 타입 호환 |