그럼에도 불구하고

👨‍💻

[Node.js] 서버생성 본문

Node.js/Node.js basics

[Node.js] 서버생성

zenghyun 2023. 1. 26. 21:33

Node.js로 서버 생성을 해보자

 

 

const http = require('http');

const server = http.createServer((req,res) => {
	console.log(req);
    
    });
    
server.listen(3000);

 

 

Node.js에 탑재된 http 모듈의 기능을 전역에서 사용하기 위해 const로 변수를 생성해 준다. 

(var과 let으로도 생성이 가능하지만, 절대 변경하지 않을 값을 사용할 것이므로 const를 사용해서 다시 변경하지 못하게 할 것이다.)

 

const http = require('http');

 

http라는 이름으로 변수를 선언하면, http 뒤에 =를 붙인 다음 값을 지정해야 한다. 

이때, 특별한 키워드 및 기능을 사용할 수 있는데, Node.js는 전역으로 노출하는 특성이 있어서 Node.js로 실행하는 모든 파일에서 기본으로 require이라는 키워드를 사용할 수 있다.

 

※ require

require 키워드는 다른 파일로의 경로나 JavaScript 파일을 불러올 수 있다. 

 

참고로 파일 경로는 반드시 상대경로인 경우./ 절대경로인 경우 /로 시작해야 한다.

 

const server = http.createServer((req, res) => {

     console.log(req);

} );

 

★ server를 변수나 상수에 저장하는 이유

 

서버에 요청을 보내기 위해서는 서버의 위치를 알아야 한다. 즉, 주소를 통해 서버에 도달해야 하기 때문에 서버를 변수나 상수에 저장해 주는 것이다. 보통 한번 만든 서버를 덮어쓰지 않기 때문에 상수로 저장한다. 

 

 

※ createServer

createServer 메서드는 서버를 생성할 때 꼭 필요한 메서드이다. 

 

 

createServer 위에 마우스를 가져다 대면 requestListener를 인수로 가진다고 나온다.

 

requestListener는 쉽게 말해 들어오는 모든 요청을 실행하는 기능을 말한다. createServer는 두 개의 인수가 있어야 하는데 이중 requestListener는 들어오는 메시지 혹은 응답 객체 유형의 요청을 받는다.

정리하자면 Node.js가 자동으로 들어오는 요청을 대변하는 객체를 제공하고, 해당 요청으로부터 데이터를 읽을 수 있게끔

하며, 요청을 보낸 사람에게 응답을 보낼 수 있는 응답 객체를 주는 것이다.

 

두 가지 인수에는 원하는 이름을 붙이는데 첫 번째 인수에는 요청에 대한 데이터가 있고, 두 번째 인수에는 응답에 사용된다. 

 

첫 번째는 req, 두 번째는 res라고 기억하고 사용하자.

 

화살표 함수 안에 console.log(req.url, req.method, req.headers); 와 같이 작성하면 

 

 

위 사진과 같이 나온다.

 

나온 순서대로 /는 url GET 은 method 그 뒤의 내용은 headers를 의미한다. 

 

url의 경우 호스트 다음에 붙는 모든 주소를 말하는데 이 경우에는 localhost 외에 아무것도 없기 때문에 localhost 뒤에 /만 나오는 것이다. 만약 주소에 /test와 같이 다른 값을 입력하면 또 다른 출력값이 나오게 된다.

 


 

server.listen(3000);

 

※ listen

listen은 Node.js가 스크립트를 바로 종료하지 않고 계속 실행되면서 듣도록 만든다. 

즉, 들어오는 요청을 계속 받아들이며 listen에 입력할 수 있는 인수 중 첫 번째는 듣고자 하는 포트이다. 

예를 들어서 위의 예시처럼 3000을 포트 인수로 입력하면 localhost:3000의 요청을 계속 실행하면서 듣는 것이다. 

 

 

node를 실행하고

 

 

localhost:3000을 입력하게 되면

 

 

 

header를 포함한 여러 정보를 받아오게 된다.

 

 


 

※ 서버 중지 방법 

대게 서버를 중지할 일이 없지만, process.exit()를 사용하면 서버를 중지할 수 있다.

process.exit를 server의 화살표 안에 작성하고 다시 작동시키면 여전히 해당 요청에 대한 로그가 보이지만,

Terminal의 다음 줄로 온 걸 확인할 수 있는데, 이는 프로세스가 중지되었기 때문이다. 

 

즉,  process.exit는 말 그대로 이벤트 루프를 딱 잘라 종료해 프로그램을 종료시키는 것이다.

Comments