1. Node.js 소개
- Node.js는 Chrome V8 javascript 엔진으로 빌드된 Javascript 런타임
- Javascript 해석은 브라우저가 담당하며 브라우저 내의 Javascript 해석 엔진 보유
- 브라우저의 종류에 따라 사용하는 엔진이 다름
- 인터넷 브라우저에서만 javascript 실행 가능
- javascript의 V8 엔진으로 구글이 크롬을 개발, V8 엔진 성능이 너무 좋아서 새로운 프로젝트를 시작
- => Node.js(V8) 탄생. 브라우저 외 환경에서 자바스크립트를 수행 가능
- => 장점 : 자바스크립트가 웹 전용이 아닌 프로그래밍 언어로 사용 가능
- Node.js는 웹 서버가 아님. 아파치 웹 서버처럼 웹 디렉토리 설정, 서버 스타트 등 설정이 없음
- => 대신 http서버를 라이브러리를 통해 직접 작성할 수 있다.
- Node.js는 Javascript를 실행할 수 있는 하나의 환경. Javascript 런타임
2. Node.js 특징
- 영화 티켓을 사려고 하는 고객의 예시
- 1명이 수백장을 구매하고자 하면 그 뒤 고객은 대기
- Node.js는 non-blocking IO 를 사용함으로써 모든 요청을 한번에 받고 빨리 처리된 것은 빨리 리턴
- 비동기 IO 처리 / 이벤트 위주
- Node.js 의 라이브러리의 모든 API는 비동기 방식 (non blocking)
- API가 실행되었을 때, 데이터를 반환할 때까지 기다리지 않고 다음 API를 실행
- 실행했던 API가 결과값을 반환 시, Node.js의 이벤트 알림 메커니즘을 통해 결과값을 수신
- 빠른 속도
- 구글의 V8 자바스크립트 엔진 사용
- 단일 스레드 / 뛰어난 확장성
- 이벤트 루프 + 단일 스레드
- 이벤트 루프는 서버가 멈추지 않고 반응하도록 해줌
- => 서버의 확장성을 키워줌
- => 아파치에 비해 스레드를 한 개만 사용함으로써 더 많은 요청 처리 가능
- No Buffering
- 데이터 버퍼링 없이 데이터를 묶음으로 출력
- 라이선스
- MIT 라이선스 적용
- 주 사용처
- SNS 나 채팅서비스에 많이 사용됨(요청이 많기 때문에)
- 일반서버는 이 기능을 위해서는 멀티 스레드를 써야함. 그러나 Node.js는 요청이 많거나 오래 걸리는 요청이 끼어 있엉도 대기 시간이 발생하지 않음
- => 개수는 많으나 크기가 작은 데이터를 실시간으로 주고 받는 어플리케이션에 최적
- ex) 실시간 챗, 주식 차트 등
- => 개수는 많으나 크기가 작은 데이터를 실시간으로 주고 받는 어플리케이션에 최적
- Node.js의 단점
- 모든 처리를 단일 스레드가 처리하기 때문에 코드가 CPU 연산을 많이 요구할 경우 감당하기 어려움
- 이미지, 비디오, 대규모 연산 등에는 절대 비권장
Node.js 설치 방법





설치 확인 방법
cmd -> node --version
cmd -> node -v

3. Node.Js 실행해보기
- Node.js 홈페이징에서 LTS 버전 ㄴ설치
- cmd 실행 후 node -v 또는 node --version 실행
- node 실행 > console.log("Hello World")
- js 파일 생성 연습
- src 폴더 생성
- main.js를 만들고 console.log("hello, world"); 작성
- cmd에서 해당 디렉토리 이동 후 node main.js 실행
- 웹 서버 띄우기
- main.js에서 require 함수로 http 불러오기
- var http = require("http")
- require는 특정 라이브러리를 사용하기 위해 사용
- http의 createServer 메서드를 이용하여 웹 서버 기동
- http createServer 메서드를 이용하여 웹 서버 기동.listen(포트번호)로 포트 설정
var http = require("http");
http.createServer(function(request, response){
//Header 전송
//서버 전송 성공 : 200을 세팅
response.writeHead(200, {"Content-Type": "text/plain"});
//This is the first Node.js work를 display
response.end("<h1>This is the first node.js work</h1>");
}).listen(10002);
console.log("This is the first Node.js work");

- REPL (터미널 모드)
- Read Eval Print Loop
- Windows Command 처럼 shell을 통해 명령어 입력
- 일반적으로 JS 코드를 테스팅 또는 디버깅 시 사용
- node를 실행하여 시작
- 컨트롤 +cd > node
- .help
- 이전 값 : _;
- Ctrl + C 2연타 또는 Ctrl + D로 종료
D:\1900_web_jhj\satellite>node
Welcome to Node.js v22.11.0.
Type ".help" for more information.
> .help
.break Sometimes you get stuck, this gets you out
.clear Alias for .break
.editor Enter editor mode
.exit Exit the REPL
.help Print this help message
.load Load JS from a file into the REPL session
.save Save all evaluated commands in this REPL session to a file
- NPM ( Node Package Manager)
- Node.js의 패키지 설치 및 버전/호환성 관리
- 현재 패키지에 맞는 다른 패키지 버전을 설치
- npm install <설치할 모듈명>


- Callback
- 특정 작업을 하도록 함수를 전달하는 것
- 전달하고 나서 다른 일을 계속 함
- cmd : node callback_file.js
- callback_file.js
var fs = require("fs");
var data = fs.readFileSync("main.js");
console.log(data.toString());
console.log("File Read Program End OK");
fs.readFile("main.js", function(err, data){
if(err) return console.error(err);
console.log(data.toString());
});
console.log("File Read Program End OK2");

'자바 공부 > [자바] 기본 공부' 카테고리의 다른 글
| [Node.js 2일차] http 모듈 (2) | 2024.11.28 |
|---|---|
| [Node.js 2일차] 이벤트 처리 함수 (0) | 2024.11.28 |
| [AJAX] Json 데이터 불러오기 (0) | 2024.11.26 |
| [JSP 공부 4일차] AJAX (0) | 2024.11.26 |
| [JSP 공부 5일차] 세션 (0) | 2024.11.26 |