CS/Web & Network

[Node.js]Node.JS Study - 기본 정리

bonggang 2019. 12. 29. 03:48

* 본 문서는 Do it! Node.js, 인터넷 자료들 및 경험을 바탕으로 학습한 기록입니다.

* 개인의 학습을 위한 자료이기 때문에 정확하지 않은 정보가 포함되어 있을 수 있습니다.

 

 

용어정리


API(Application Programming Interface): 프로그램을 쉽게 제작할 수 있게 미리 만들어 놓은 것들의 모음

클라이언트(Client): 다른 곳에 있는 단말에 데이터를 달라고 요청하는 프로그램

서버(Server): 요청받은 명령을 처리해주는 프로그램

 

웹 서버: 웹 브라우저에서 접속하는 서버

-> 웹 브라우저에서 웹 문서를 요청할 때 필요한 기능을 수행

 

에이젝스(Ajax)방식: 비동기식 자바스크립트 XML의 약자, 웹 서버에서 웹 문서를 받아오는 것이 아닌 데이터만 받아오기 위한 방법과 기술

-> 에이젝스 방식을 이용하면 필요한 데이터만 가져온 후 화면을 부분적으로 갱신할 수 있어 화면 처리 속도가 빨라지는 장점이 존재

 

노드(Node.js): 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구

-> 비동기 입출력(Non-Blocking IO) 방식을 적용하기 위해 처음 개발

-> 비동기 방식: 요청을 보낸 후 응답과는 상관없이 다음 방식이 동작하는 방식

-> 콜백 함수: 비동기식 처리를 요청할 때 함께 알려주는 함수. 사용자가 아닌 일을 마친 시스템이 호출하는 형태

 

 

설치


1. Node.JS 설치

https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

설치 확인

 

2. Editor 설치

-> 원하는 에디터를 설치,

 

 

기초 서버 생성


코드

//http 모듈 호출
var http = require('http');

//웹 서버 객체 생성
var server = http.createServer();

//웹 서버 시작, 포트넘버 3000
var port = 3000;
var host = '127.0.0.1'; //localhost
server.listen(port, host, function(){
    console.log('웹 서버 시작: %d', port);
});

//클라이언트 연결 이벤트
server.on('connection', function(socket){
    console.log('클라이언트 접속 확인');
});

//클라이언트 요청 이벤트
server.on('request', function(req, res){
    console.log('클라이언트 요청 확인');
    
    res.writeHead(200,{"Content-Type":"text/html; charset=utf-8"});
    res.write("<!DOCTYPE html>");
    res.write("<html>");
    res.write(" <head>");
    res.write("     <title>응답페이지</title>");
    res.write(" </head>");
    res.write(" <body>");
    res.write("     응답입니다");
    res.write(" </body>");
    res.write("</html>");
    res.end();
});

//서버 종료 이벤트
server.on('close', function(){
    console.log('서버 종료');
});

 

노드에 기본으로 들어있는 http 모듈의 createServer() 메소드를 사용하면 웹 서버 기능을 담당하는 서버 객체를 만들 수 있다. 먼저, require() 메소드로 http 모듈을 불러온 후 서버 객체를 생성한다. 이 후 서버 객체의 listen() 메소드를 호출하면 웹 서버가 시작된다.

 

클라이언트 요청 이벤트 처리

이벤트 설명
connection 클라이언트 접속 연결
request 클라이언트 요청
close 서버 종료

클라이언트가 요청할 때마다 적절한 이벤트가 발생하므로 이에 맞는 콜백함수를 등록해줘야 한다.

* 이벤트: 어떤 일이 발생했음을 알려주는 것으로 이벤트 리스너(Event Listener)를 통해 등록

 

on() 메소드는 이벤트를 처리할 때 사용하는 기본 메소드로 상황에 맞는 이벤트 처리를 콜백 함수로 등록해 두면 상황에 맞게 자동 호출된다. emit()메소드는 이벤트를 다른 쪽으로 전달할 때 사용한다.

request 이벤트 처리 즉, 클라이언트 요청 처리 콜백 함수에서는 res 객체를 이용해 클라이언트로 응답을 보낸다. 주로 사용하는 메소드는 writeHead, write, end 메소드이며 자세한 내용은 do it node.js 책 p.141을 확인하자.

 

 

실행 방법

node 파일이름.js

 

실행 화면

 

 

 

 

다른 웹 사이트 데이터 가져와 응답하기


http 모듈을 사용해 GET 방식과 POST 방식으로 다른 사이트에 데이터를 요청할 수 있다.

다른 서버로부터 응답을 받을 떄는 data 이벤트가, 데이터 수신이 완료되면 end 이벤트가 발생한다.

 

GET 방식

var http = require('http');

var options = {
	
    host: 'bonggang.tistory.com',
    port: 80,
    path: '/'
};

var req = http.get(options, function(res){
    var resData = '';
    res.on('data', function(chunk){
    	resData += chunk;
    });
    
    res.on('end', function(){
    	console.log(resData);
    });
});

req.on('error', function(err){
	console.log('error: '+err.message);
});

 

POST 방식

var http = require('http');

var options = {
	
    host: 'bonggang.tistory.com',
    port: 80,
    method: 'POST',
    path: '/',
    headers: {}
};

var resData = '';
var req = http.request(options, function(res){
    res.on('data', function(chunk){
    	resData += chunk;
    });
    
    res.on('end', function(){
    	console.log(resData);
    });
});

options.headers['Content-Type'] = 'application/x-www-form-urlencoded';
req.data = "q=actor";
options.headers['Content-Length'] = req.data.length;

req.on('error', function(err){
	console.log('error: '+err.message);
});

//요청 전송
req.write(req.data);
req.end();