<Node.js> 기본 개념

·2024년 4월 24일
0

Node.js

목록 보기
1/4

웹 작동 방식

  1. 유저가 브라우저 주소창에 http://google.com을 입력하면, DNS(Domain Name System) 서버에서 해당 도메인의 IP 주소를 찾습니다.
  2. 브라우저는 DNS 서버로부터 받은 IP 주소를 사용하여 해당 서버에 HTTP 요청을 보냅니다.
  3. 이 요청은 일반적으로 웹 서버에 도착하게 됩니다.
    이 웹 서버는 요청을 받고, 그에 맞는 응답을 생성합니다. Google의 경우, 그들의 웹 서버는 C++, Java, Python 등 다양한 언어로 작성될 수 있습니다.
    Node.js도 웹 서버를 구성할 수 있습니다.
  4. Node.js는 웹 서버를 구축하는 데 사용되는 자바스크립트 런타임 환경입니다. 따라서 웹 서버를 Node.js로 구축했다면, 클라이언트의 요청에 대한 처리는 JavaScript로 이루어질 것입니다.


node.js core module

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

use http module

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() 메서드를 이용하여 아주 간단한 웹 서버 생성!


Node.js Program LifeCycle


Node.js Request 이해

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);
});

결과


Response 이해

mdn 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.setHeader()로 새로운 헤더를 설정할 수 있다.
  • 첫 번째 인수인 Content-Type은 브라우저가 알고 이해하며 받아들이는 기본 헤더.
    두 번째 인수로는 첫 번째 인수에 대응하는 값을 넣어준다.
  • 해당 코드에서는 브라우저에게 html 코드라는 것을 알려주지 않으면 에러가 발생한다.

res.write()

  • res.write()는 response에 데이터를 기록할 수 있음. 여러 라인에 걸처 데이터를 기록한다.

res.end()

  • res.end()를 하지 않으면 응답이 끝나지 않은 것으로 간주하여 계속 응답을 보내게 되는 상황이 온다.

    만약 res.end()를 호출하지 않으면, 서버는 응답이 완료되지 않았다고 판단하고 클라이언트로부터 추가적인 데이터를 기다리게 됩니다. 이 경우, 클라이언트는 응답이 완료될 때까지 계속해서 서버로부터 데이터를 받아올 것입니다. 이것이 비동기적인 특성을 가진 Node.js 서버에서 중요한 개념 중 하나입니다. 따라서 HTTP 요청에 대한 응답을 보내고 처리를 완료했을 때는 항상 res.end()를 호출하여 응답을 종료해야 합니다.

개발자도구에서 확인

- network

- response

profile
- 배움에는 끝이 없다.

0개의 댓글