- 유저가 브라우저 주소창에 http://google.com을 입력하면, DNS(Domain Name System) 서버에서 해당 도메인의 IP 주소를 찾습니다.
- 브라우저는 DNS 서버로부터 받은 IP 주소를 사용하여 해당 서버에 HTTP 요청을 보냅니다.
- 이 요청은 일반적으로 웹 서버에 도착하게 됩니다.
이 웹 서버는 요청을 받고, 그에 맞는 응답을 생성합니다. Google의 경우, 그들의 웹 서버는 C++, Java, Python 등 다양한 언어로 작성될 수 있습니다.
Node.js
도 웹 서버를 구성할 수 있습니다.- Node.js는 웹 서버를 구축하는 데 사용되는 자바스크립트 런타임 환경입니다. 따라서 웹 서버를 Node.js로 구축했다면, 클라이언트의 요청에 대한 처리는 JavaScript로 이루어질 것입니다.
http
|https
|fs
|path
|as
1️⃣
http
: 서버를 생성하거나 http 요청 및 응답 작업에 유용한 모듈
(http는 서버를 출시하거나 요청을 보내는 것과 같은 작업에도 도움을 줌. 이를 통해 Node.js 앱이 다른 서버로 요청을 보내 여러 서버간에 소통할 수도 있다.)
2️⃣https
: 모든 전송 데이터가 암호화되는 SSL 암호화 서버를 출시할 때 도움이 되는 모듈
3️⃣fs
: 파일 시스템에 접근하여 파일을 읽고 쓰는 등의 작업을 수행하는 데 사용된다.
해당 모듈을 사용하면 파일과 관련된 다양한 작업을 Node.js에서 수행할 수 있다.
(파일 생성 및 삭제, 읽기, 쓰기, 이동, 이름 변경 등의 작업)
4️⃣path
: 파일 시스템에 있는 파일에 대한 경로를 구축하는 용도.
(Window, Mac, Linux 환경에 따라 다른 형식을 사용하기 때문에)
5️⃣as
const http = require("http");
const server = http.createServer((req, res) => {
console.log(req);
});
server.listen(3050);
createServer()
서버를 생성할 때 꼭 필요한 메서드
첫 번째 인수로 requestListener
를 받음. 들어오는 모든 요청을 실행하는 기능임.
첫 번째 인수에는 요청에 대한 데이터가 있고, 두 번째 인수에는 응답 데이터가 있음.
서버에 도달하는 모든 요청이 있을 때 마다 함수가 실행될 것이고, 이는 곧 createServer로 부터 시작된다.
요청이 들어오면 해당 함수를 실행한다.
listen()
Node.js가 스크립트를 바로 종료하지 않고 계속 실행되면서 들어오는 요청을 계속 듣도록 함.
첫 번째 인수로 포트가 들어온다. 하지만 실무에서는 대게 포트 인자를 입력하지 않음.
브라우저로 localhost:3050
에 접속하면 UI는 변하는 것이 없지만 계속 새로고침되듯이 움직이는 것을 볼 수 있는데,
에디터의 터미널에는 console.log(req)
로 인하여 해당 로그가 보여짐을 확인할 수 있다.
이로써 createServer()
메서드를 이용하여 아주 간단한 웹 서버 생성!
headers
는 메타데이터, 요청 및 응답에 추가된 메타 데이터다.
꼭 알아둬야 하는 필드가 있다. req.url, req.method, req.headers
브라우저에서 localhost:3100/home
주소로 들어가면 에디터 터미널에서 아래 로그를 확인 할 수 있다.
아래 이미지는 순서대로 req.url, req.method, req.headers
로그이다.
실행 코드
const server = http.createServer((req, res) => {
console.log(req.url, req.method, req.headers);
});
결과
const server = http.createServer((req, res) => {
res.setHeader("Content-Type", "text/html");
res.write("<html>");
res.write("<head><title>Node.js response html</title></head>");
res.write("<body><main><h1>Hello, Node.js</h1></main></body>");
res.write("</main>");
res.end();
});
res.setHeader()
로 새로운 헤더를 설정할 수 있다.res.write()
는 response에 데이터를 기록할 수 있음. 여러 라인에 걸처 데이터를 기록한다.res.end()
를 하지 않으면 응답이 끝나지 않은 것으로 간주하여 계속 응답을 보내게 되는 상황이 온다.만약
res.end()
를 호출하지 않으면, 서버는 응답이 완료되지 않았다고 판단하고 클라이언트로부터 추가적인 데이터를 기다리게 됩니다. 이 경우, 클라이언트는 응답이 완료될 때까지 계속해서 서버로부터 데이터를 받아올 것입니다. 이것이 비동기적인 특성을 가진 Node.js 서버에서 중요한 개념 중 하나입니다. 따라서 HTTP 요청에 대한 응답을 보내고 처리를 완료했을 때는항상 res.end()를 호출하여 응답을 종료해야 합니다
.
- network
- response