Node.js

서버와 클라이언트

쿠와와 2020. 12. 13. 22:17

서버와 클라이언트의 관계

  클라이언트가 서버로 요청(request)을 보냄

  서버는 요청을 처리

  처리 후 클라이언트로 응답(response)을 보냄

 

노드로 http 서버 만들기

http 요청에 응답하는 노드 서버

  createServer로 요청 이벤트에 대기

  req 객체는 요청에 관한 정보가, res 객체는 응답에 관한 정보가 담겨 있음

 

-> res 메서드로 응답 보냄

  write로 응답 내용을 적고

  end로 응답 마무리(내용을 넣어도 됨)

-> listen(포트) 메서드로 특정 포트에 연결

const http = require('http');

const server = http.createServer((req, res) => {
  // 여기에 어떻게 응답할 지 적어줍니다.
  res.write('<h1>Hello Node!<h1>');
  res.write('<p>Hello server<p>');
  res.end('<p>Hello Kuwhawha<p>');
})
  .listen(8080, () =>{
    console.log('8080번 포트에서 서버 대기중입니다.')
  });
server.on('error', (error) => {
  console.error(errors);
}

포트는 서버 내에서 프로세스를 구분하는 번호

  기본적으로 http 서버는 80번 포트 사용(생략가능, https443)

  예) www.gilbut.com:80 -> www.github.com

  다른 포트로 데이터베이스나 다른 서버 동시에 연결 가능

사파리같은 브라우저는 HTML과 문자열을 구별하지 못함

const http = require('http');

const server = http.createServer((req, res) => {
  // 사파리의 경우에는 html과 문자열을 구분하지 못함 그래서 추가해줘야함..
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
});
server.listen(8080);

server.on('listening', () => {
  console.log('8080번 포트에서 서버 대기 중입니다!');
});
server.on('error', (error) => {
  console.error(error);
});

 

서버를 2개 이상 돌릴수도 있음

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
})
  .listen(8080, () => { // 서버 연결
    console.log('8080번 포트에서 서버 대기 중입니다!');
  });

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
})
  .listen(8081, () => { // 서버 연결
    console.log('8081번 포트에서 서버 대기 중입니다!');
  });

 

 

하지만 가장 좋은 방법은 html 읽어서 전송하는 것이 가장 좋다.

 

writeend에 문자열을 넣는 것은 비효율적

  fs 모듈로 html을 읽어서 전송하자

  write가 버퍼도 전송 가능

const http = require('http');
const fs = require('fs').promises;

http.createServer(async (req, res) => {
  try {
    const data = await fs.readFile('./server2.html');
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
    res.end(data);
  } catch (err) {
    console.error(err);
    res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end(err.message);
  }
})
  .listen(8080, () => {
    console.log('8080번 포트에서 서버 대기 중입니다!');
  });
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Node.js 웹 서버</title>
</head>
<body>
    <h1>Node.js 웹 서버</h1>
    <p>만들 준비되셨나요?</p>
</body>
</html>

 

'Node.js' 카테고리의 다른 글

쿠키, 세션 이해하기  (0) 2020.12.14
REST API와 라우팅  (0) 2020.12.14
thread_pool, 이벤트, error 처리하기  (0) 2020.12.13
파일 폴더 읽기, 쓰기  (0) 2020.12.12
버퍼와 스트림  (0) 2020.12.12