[Node.js]Node.JS Study - 기본 정리
* 본 문서는 Do it! Node.js, 인터넷 자료들 및 경험을 바탕으로 학습한 기록입니다.
* 개인의 학습을 위한 자료이기 때문에 정확하지 않은 정보가 포함되어 있을 수 있습니다.
용어정리
API(Application Programming Interface): 프로그램을 쉽게 제작할 수 있게 미리 만들어 놓은 것들의 모음
클라이언트(Client): 다른 곳에 있는 단말에 데이터를 달라고 요청하는 프로그램
서버(Server): 요청받은 명령을 처리해주는 프로그램
웹 서버: 웹 브라우저에서 접속하는 서버
-> 웹 브라우저에서 웹 문서를 요청할 때 필요한 기능을 수행
에이젝스(Ajax)방식: 비동기식 자바스크립트 XML의 약자, 웹 서버에서 웹 문서를 받아오는 것이 아닌 데이터만 받아오기 위한 방법과 기술
-> 에이젝스 방식을 이용하면 필요한 데이터만 가져온 후 화면을 부분적으로 갱신할 수 있어 화면 처리 속도가 빨라지는 장점이 존재
노드(Node.js): 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구
-> 비동기 입출력(Non-Blocking IO) 방식을 적용하기 위해 처음 개발
-> 비동기 방식: 요청을 보낸 후 응답과는 상관없이 다음 방식이 동작하는 방식
-> 콜백 함수: 비동기식 처리를 요청할 때 함께 알려주는 함수. 사용자가 아닌 일을 마친 시스템이 호출하는 형태
설치
1. Node.JS 설치
설치 확인
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();