Node.js - Server, Client

ryan·2022년 5월 8일
0

서버와 클라이언트의 관계

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

  • 서버는 요청을 처리
  • 처리 후 클라이언트로 응답(response)을 보냄
  • 요청과 응답은 http라는 공통된 프로토콜(규약)에 의해서 이루어짐

노드로 http 서버 만들기

const http = require('http');
http.createServer((req,res)=>{
    // 응답할 내용을 작성
})
  • req 객체는 요청에 관한 정보가, res 객체는 응답에 관한 정보가 담겨 있음.

서버 생성 예제

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 world</p>`); //  마지막으로 종료하면서 작성
  })
  .listen(8080);
// 서버도 비동기이기 때문에 에러처리 해줘야함
server.on('listening', () => { // process로 올리기
  console.log('8080번 포트에서 서버 대기 중'); // 프로세스로 올릴 때는 한 개 포트를 점유하게 된다.
});
server.on('error', (err) => {
  console.error(err);
});
// localhost:8080입력하면 서버 접속 가능
// localhost는 내부 주소이기 때문에 외부에서는 접근이 불가능하다.
  • 서버도 프로그램이기 때문에 .on을 통해서 process로 올려줘야 한다.
  • 프로세스로 올릴 때는 포트라는 것을 사용한다. 예제에서는 여기서는 8080이라는 포트를 사용한다는 것임
  • 서버를 실행하게 되면 listen을 하는 경우 terminal을 사용하기 때문에 다른 동작할 수 없게 된다
    • 모든 서버에는 포트가 존재한다. (포트하나가 하나의 프로그램)
    • 기본적으로 http 서버는 80번 포트 사용하고 https는 443을 사용한다. (생략가능)
    • 다른 포트로 데이터베이스나 다른 서버 동시에 연결 가능(하나의 도메인에 여러 포트를 두고 여러개의 프로그램을 보여줄 수 있다)

서버 생성과 응답 예제(html 파일 연동)

const http = require('http');
const fs = require('fs').promises;
const server = http
  .createServer(async (req, res) => {
    // html인지 문자열이 구분을 못하는 브라우저도 존재함 이런 경우에 html이라고 알려줘야 함.
    // 한글 인식을 못하는 곳도 있기 때문에 utf-8도 추가해준다.
    try {
      res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'}); 
      // text/html은 html이란 걸 알려줌
      const data = await fs.readFile('./server2.html'); // 연결할 html을 읽고
      res.end(data); // 읽은 html을 응답해준다.
    } catch (error) {  // 비동기는 항상 error 처리 해주기
      console.error(error);
      res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'}); 
      // text/plain은 일반 문자열이란 걸 알려줌
      res.end(err.messsage);
    }
  })
  .listen(8080);
server.on('listening', () => {
  console.log('8080번 포트에서 서버 대기 중');
});
server.on('error', (err) => {
  console.error(err);
});
profile
프론트엔드 개발자

0개의 댓글