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
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/
https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/
https://nodejs.org/dist/latest-v16.x/docs/api/http.html
'WEB > 🌳 Node.js' 카테고리의 다른 글
[Node.js] 7. POST 방식으로 데이터 전송, 받기 (0) | 2022.08.01 |
---|---|
[Node.js] 6. fs 모듈 (파일 읽기, 쓰기, 편집, 제거) (0) | 2022.07.29 |
[Node.js] 4. 동기 / 비동기 (0) | 2022.07.28 |
[Node.js] 3. 모듈 만들기, 불러오기 (export, require) (0) | 2022.07.27 |
[Node.js] 2. Query String의 개념과 사용방법 (0) | 2022.07.27 |