반응형

지난번에 node.js의 http 내장 모듈로 웹 서버 만들기를 알아봤다.

이번에는 아주 살짝 변화를 준 웹 서버 만들기 코드다.

일단 코드부터 공개하겠다. 파일 이름은 app.js다

const http = require('http');
const server = http.createServer((req, res)=>{
    res.writeHead(200, {
        'Content-Type': 'text/html; charset=utf-8'
    });
    res.write('<h1>Hello Node!</h1>');
    res.end('<p>Hello Server!</p>');
});

server.listen(8080);

server.on('listening', ()=>{
    console.log('8080번 포트에서 서버 대기 중입니다!');
});
 
server.on('error', (error)=>{
    console.error(error);
});

이 코드를 작성한 후에 node app.js를 터미널에서 실행하면

이런 화면이 뜬다.

지난 글과 비교해 보자.

2023.11.18 - [개발일기/node.js] - http 내장 모듈로 웹 서버 만들기_01

 

http 내장 모듈로 웹 서버 만들기_01

서버에는 용청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 즉, 웹 상에서 http 서버가 있어야 웹 브라우저의 요청을 받고 응답을 다시 클라이언트에게 보내줄 수 있다. node로 웹서버를 만

jobkid.tistory.com

기존에 'http'인수를 넣은 require메서드의 반환값을 할당한 상수 httpcreateServer메서드 안에 콜백함수를 호출했다.

여기서 이 createServer는 EventEmitter를 상속받았기에 listen 메서드를 호출해 그 인수로 포트 번호와 콜백함수를 삽입했다. 포트번호 8080에 들어가는 이벤트가 요청되면 즉, 웹 브라우저 주소창에 localhost:8080을 치고 들어가면 화면에 들어갈 수 있다.

결국 지난 글은 딱 하나의 http.createServer 메서드로 웹서버를 만드는 과정을 보여줬지만 코드의 가독성이 현저하게 떨어진다.

이번 코드에서 눈에 띄는 점은 상수 http 밑에 또 다른 상수 server를 만들었다. 즉, 상수 server에 http.createServer라는 함수이자 객체를 할당한 것이다.(참고로 자바스크립트에서 함수는 일급객체이다.)

그러면 확연히 차이가 드러날 것이다. 내부 소스를 없앤 껍데기 코드 블록을 비교해보자.

const http = require('http');
console.log('createServer 외부실행');
http.createServer((req, res)=>{
   //상수 server가 없이 만든 웹서버
 
}).listen(8080, ()=>{
  console.log('8080번 포트에서 서버 대기 중');  
});
const http = require('http');
const server = http.createServer((req, res)=>{
   //상수 server를 새로 만들어 http.createServer 메서드를 할당
});

server.listen(8080);

server.on('listening', ()=>{
    console.log('8080번 포트에서 서버 대기 중입니다!');
});
 
server.on('error', (error)=>{
    console.error(error);
});

뭔가 아래 코드가 훨씬 더 깔끔해졌다고 볼 수 있다. 상수 server 객체 안에 있는 listen메서드에 포트번호 8080을 number타입으로 넣은 후 server.on()이라는 이벤트 메서드를 호출했다. 인수로 'listening'이라는 이벤트를 넣고 그다음 인수로 서버 대기를 확인하는 콜백함수를 넣었다.

맨 밑에 있는 server.on 안에 있는 인수 'error'도 마찬가지로 이벤트에 속한다.

물론 자바스크립트가 많이 익숙하신 분들은 위, 아래 코드 전부 다 상관없이 편하게 읽거나 작성할 수 있겠지만 초보자인 경우는 아래코드로 조금씩 Node.js를 익히고 자바스크립트도 익혀나가자.

이 글에서 제대로 설명하지 못한 이벤트 메서드,  EventEmitter 등은 차차 내가 완전히 숙지한 다음에 포스팅을 해야겠다.

반응형

+ Recent posts