WEB/🌳 Node.js

[Node.js] 5. 서버 실행하기

무딘붓 2022. 7. 28. 22:21

 

Node.js에서 서버 실행하기 

const http = require('http');

const port = 3000;
const hostname = '127.0.0.1';

const server = http.createServer(function (request, response) {
    response.writeHead(200);
    response.end('Hello, Node.js!\n');
})

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

app.js 파일에 위 소스코드를 입력하고 터미널에서 'node app.js'를 입력해서 실행시킨 뒤, http://localhost:3000을 방문해 보자.

 

실행 결과

그러면 다음과 같이 "Hello, Node.js" 가 출력되며 서버가 잘 작동하고 있음을 확인할 수 있다.

 

그렇다면 어떻게 서버가 실행되는 것인지 소스코드를 하나씩 살펴보자.


1. ( http 웹 서버와 관련된 기능을 가진 ) http 모듈을 불러와 변수 http에 할당한다.
const http = require('http');

( Node.js 모듈에 대해서 이전 게시글을 참고)

 

 

2. port와 hostname의 값을 지정한다.
const port = 3000;
const hostname = '127.0.0.1';

port에는 원하는 포트번호, hostname에는 127.0.0.1(locahost)를 입력하면 된다.

(포트번호 : 인터넷 프로토콜인 TCP/IP를 사용할 때 컴퓨터에서 실행되고 있는 서버를 구분 짓기 위한 번호)

 

 

3. http모듈의 createServer() 메소드로 HTTP 서버 객체를 생성한다.
const server = http.createServer(function (request, response) {
    /*함수 내용*/
})

 

매개변수로 전달되는 익명 함수의 두 매개변수는 각각 서버 요청(request)과 서버 응답(response)를 의미한다.

여기서 서버 요청(request)은 요청할때 웹 브라우저가 보낸 정보이고,

서버 응답(response)은 응답할때 웹브라우저로 보낼 정보이다.

 

이 익명함수는 request Listener 함수로도 불리는데, request와 response 객체를 전달받으며 request 이벤트가 발생할 때마다 호출된다.

 

익명 함수로 function (request, response) {} 대신 ES6에서 추가된 화살표 함수  (request, response) => {} 를 사용해도 무방하다.

 

 

4. 서버 응답 매개변수에 writeHead라는 메서드를 활용하여 응답 상태 (HTTP 상태 코드)를 보낸다.
response.writeHead(200);

HTTP 상태 코드는 주로 응답에 사용하기 때문에 응답 코드라고도 불린다.

만약 ERROR가 발생한다면, 클라이언트에 에러 사실을 알려야 하기 때문에 응답 코드가 중요해진다.

잘 알려진 응답 코드로는 "404 Not found"의 404가 있다.

 

응답 코드가 100인 경우는 서버가 요청의 일부를 받았으며, 나머지 요청을 더 기다리고 있다는 것을 나타낸다.

200은 성공을 의미한다. 따라서, response.writeHead(200);는 요청을 성공적으로 마쳤다는 의미이다.

 

기타 응답 코드에 대해서는 다음 링크를 참고하자.

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

 

HTTP 상태 코드 - HTTP | MDN

HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고

developer.mozilla.org

 

 

5. end 메서드로 통신의 종료를 알린다.
response.end('Hello, Node.js!\n');

end 메서드로 통신이 끝났음을 알림으로써 웹페이지의 로딩을 마무리한다.

end 메서드 안에 데이터가 들어있는 경우,

response.write(data)

와 동일하게, 응답 본문에 데이터를 추가한다.

 

 

6. listen 메서드로 연결을 수신하는 HTTP 서버를 시작하고, 해당 포트(port)로 들어오는 연결들을 대기한다.
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});
//server.listen(port, [hostname], [callback]);

listen 메서드는 비동기로 실행되며, 완료되었을 때 callback 함수를 실행시킨다.

따라서, 위 소스코드는 서버의 listen이 완료되었을 때 console.log로 서버가 시작되었음을 알린다.

 

 

- 참고 자료

https://nodejs.org/ko/docs/guides/getting-started-guide/

 

시작 가이드 | Node.js

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

nodejs.org

https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/

 

HTTP 트랜잭션 해부 | Node.js

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

nodejs.org

https://nodejs.org/dist/latest-v16.x/docs/api/http.html

 

HTTP | Node.js v16.16.0 Documentation

HTTP# Source Code: lib/http.js To use the HTTP server and client one must require('http'). The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly c

nodejs.org