노드 JS란?
모든 컴퓨터에 설치할 수 있는 자바스크립트 런타임.
자바스크립트와 노드JS를 사용해서 브라우저 외부에서 파일 시스템 또는 데이터베이스에 접근하는 자바스크립트 코드를 실행할 수 있다.
어떤 기능이 지원되는가?
nodejs.org의 공식 문서를 참고하자. 브라우저에서 DOM과 상호 작용할 수 있는 것처럼 노드JS로 코드를 실행할 때 파일 시스템과 상호 작용할 수 있다.
패키지
노드JS에는 노드JS 코드에서 사용할 수 있는 다양한 기능을 제공하는 많은 패키지가 포함되어 있다.
웹 서버를 만들어보자
모듈 불러오기
require
const http = require('http');
require('') 형식으로 사용하며, 따옴표 안에는 사용하려는 노드JS 패키지 이름을 넣어주면 된다.
[Node.js] 3. 모듈 만들기, 불러오기 (export, require)
HTTP 패키지
요청과 응답을 처리하는 데 도움이 되는 특정 기능을 제공하는 object
require 하면 노드JS에서 제공하는 유틸리티 메서드와 속성으로 가득 찬 object가 반환된다.
일반적으로 이러한 패키지는 const로 저장한다.
const http = require('http');
이러면 http.createServer() 처럼 내장된 메서드를 사용 가능해진다. (웹 서버를 생성하는 메서드)
createServer
필요한 모든 서버 기능이 포함된 객체를 반환한다.
이 역시 const에 저장 가능하며, 내장된 메서드인 listen을 호출할 수 있다
const http = require("http");
const server = http.createServer();
server.listion();
createServer메서드는 두번째 매개변수로 ‘매개변수 2가지(req, res)가 있는 함수’가 필요하다.
응답(res) 객체 필수! (자세한 내용은 아래에서)
여기서 중요한 건
- ‘들어오는 요청을 처리하고 응답을 다시 보내는 방법’을 알고 있는 서버를 먼저 생성한다는 것
- 그 다음 단계에선 포트 번호에서 수신 대기를 시작한다.
서버 실행하고 종료하기
서버는 요청처리를 위해 계속 실행이 필요하다.
ctrl + C 로 서버 종료가 가능하다.
node 명령으로 파일 실행하기
node app.js 처럼 node 명령으로 app.js 파일을 실행할 수 있다.
요걸 브라우저에서 열어보려면 localhost:3000 으로 접속해야 한다.
뒤에 붙은 숫자는 포트이며 서버는 포트 지정이 필수.
나중에 자주 쓰이는 443, 80으로 바꿔주면 되고, 개발용으로는 잘 안 쓰이는 3000 포트를 쓴다.
포트
브라우저는 포트를 내부에 추가한다.
80은 기본값이라서 입력할 필요없이 그냥 {amazon.com}만 입력하면 되고, 기본적으로 80, 443 포트로 전송된다. 따라서 amazon.com:80 과 그냥 아마존닷컴의 결과는 동일한 것.
노드JS로 자체 서버를 생성할 때, 들어오는 요청을 수신할 포트를 노드JS에 알려야 한다.
그래서 listen엔 첫 번째 매개변수 값으로 포트 번호를 전달하는 것.
const http = require("http");
const server = http.createServer();
server.listion(3000);
응답은 반드시 필요
const http = require("http");
function handleRequest(request, response) {
response.statusCode = 200; //404 같은 서버의 상태
response.end("<h1>Hello World!</h1>");
// 이제 localhost:3000로 접속하면 hello world를 response
}
const server = http.createServer(handleRequest);
server.listen(3000);
// 원래는 사용되지 않는 3000 포트를 사용하여 개발에 활용할 수 있다. localhost:3000 으로 접속이 가능해진다. (라이브 서버 사용하는 것처럼)
왜냐하면 요청에 대한 응답을 되돌려 보내지 않는 웹 서버를 생성하면 오류가 발생하기 때문.
handleRequest 함수 내부에선 response 객체를 사용해서 응답을 보낼 수 있다.
statusCode는 200, 404, 500 이런 거.
end는 응답준비가 끝났다는 메서드. 클라이언트에게 reponse 한다.
url path는 node.js만으로도 만들 수 있다
const http = require("http");
function handleRequest(request, response) {
if (request.url === "/currenttime") {
// url은 기본 주소 뒷부분을 가질 수 있다
response.statusCode = 200;
response.end("<h1>" + new Date().toISOString() + "</h1>");
// 현재 시간 string 표시하기
} else if (request.url === "/") {
response.statusCode = 200;
response.end("<h1>Hello World!</h1>");
}
}
const server = http.createServer(handleRequest);
server.listen(3000);
request.url('/path') 메서드를 활용하여 만들 수 있다.
그리고 이 모든 과정은 express를 사용하면 더 간단해지는데..