Node.js는
Chrome V8 javaScript엔진으로 빌드된 javaScript 런타임입니다.
웹브라우저는 Js코드를 실행시키기 위해 javascript엔진을 내장하고 있습니다.
과거에는 js가 브라우저에서만 실행될 수 있는 스크립트 언어였습니다.
하지만 브라우저뿐만 아니라 서버, 웹앱까지도 확장되어 개발가능하도록 만들어진 것이 node.js라는 환경(플랫폼)입니다.
처음 접했을 때
node.js는 서버를 만드는 새로운 ‘언어’구나?
라고 오해할 수 있지만 새로운 언어의 개념이 아닙니다.
node.js는 하나의 코드(즉 JavaScript)로 짜여진 프로그램이 웹브라우저가 아닌 다른 플랫폼(cmd창, 안드로이드, ios 등)에서 동작할 수 있도록 지원하는 확장된 ‘플랫폼’이다.
- 여기서 플랫폼이란 실행 엔진(인터프리터), 라이브러리, 개발도구를 합한 것이라고 생각하면 됩니다. 예를 들어, 안드로이드는 자바 vm(virtual machine)과 라이브러리, SDK가 합쳐진 플랫폼입니다.
Node.js의 장점
- 비동기식(async) 처리
서버에서 하나의 입출력 작업 A를 처리하고 있을 때 또 다른 작업인 B의 처리가 요구될 경우.- A가 끝날 때까지 B는 대기한다. => 동기식(sync)
- A의 작업을 잠시 중단 후 B를 처리한다. => 비동기식(async)
동기식 처리의 경우 해당 작업의 수행이 끝날때까지 모든 자원을 그 작업이 점유하고 있게 된다.
하지만 비동기식 처리의 경우 작업 요청이 오자마자 다른 작업을 할 수 있는 상태로 전환되기 때문에 동기식보다 빠르고 메모리 차지도 적다. - 단일 스레드(Thread) 사용
- 확장성이 뛰어남
- 이벤트 루프 기반
Node.js로 서버 만들기
node로 웹서버를 구동시키는 방법은 여러가지가 있습니다.
그 중 하나는 Express
라는 라이브러리를 사용하여 서버를 만드는 것이고
또 하나의 방법은 아래와 같이 간단한 코드로 작성하여 구동시키는 것입니다.
//파일명: main.js
var http = require('http');
var fs = require('fs');
var app = http.createServer(function(request,response){
var url = request.url;
if(request.url == '/'){
url = '/index.html';
}
if(request.url == '/favicon.ico'){
response.writeHead(404);
response.end();
return;
}
response.writeHead(200);
response.end(fs.readFileSync(__dirname + url));
});
app.listen(3000);
저는 간단하게 문장만 출력하는 index.html파일을 작성해보았습니다.
<html>
<head>
<title>서버구동</title>
<meta charset="utf-8">
</head>
<body>
<h2>안녕하세요?</h2>
<h4>( ღ’ᴗ’ღ )</h4>
</body>
</html>
위 두 파일이 존재하는 경로의 터미널 창에서 node main.js
라는 명령을 실행시켜보면 서버가 구동됩니다. 이때 서버 코드에서 어떤 지시나 처리 요쳥을 하지 않았기 때문에 터미널 창에서 눈에 띄는 변화는 없을거에요.
해당 화면은 visual code에서 서버를 실행한 터미널 창입니다.
서버 구동 후 웹브라우저창의 url주소창에 localhost:3000
이라고 입력했을 때
미리 작성해둔 index.html
의 내용이 나오면 서버 구동이 잘 된 것입니다.
visual code에서 실행중인 로컬 서버를 중지하는 단축키는 ctrl + c
입니다.
localhost
란 내 컴퓨터 내에서만 작동하고 있는 서버라는 것을 의미하는 이름이고
3000
은 app.listen(3000)
코드에서 지정해준 포트번호입니다.
코드 출처: 생활코딩 https://opentutorials.org/course/3332/21032