<3주차> http 서버 만들기

pasongtak·2024년 7월 27일

Node.js

목록 보기
3/3

<예제 ch.4>

서버와 클라이언트

  • 클라이언트가 서버로 요청을 보냄
  • 서버는 요청을 처리
  • 처리 후 클라이언트로 응답을 보냄

<4.1>

HTTP 서버 만들기

  • https: 도메인 뒤에 443 포트가 숨겨져 있음

  • http: 도메인 뒤에 80 포트가 숨겨져 있음

  • 서버 코드는 수정 후 항상 껐다 켜야 수정사항이 반영됨

  • server1.js

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번 포트에서 서버 대기 중입니다!');
  });
  • 실행 명령어: node server1
  • localhost:8080에서 확인 가능

fs로 HTML 읽어 제공하기

  • async, await 사용할 때 try-catch 구문으로 항상 에러처리

  • server2.js

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(8081, () => {
    console.log('8081번 포트에서 서버 대기 중입니다!');
  });
  • text/plain: 일반 문자열

REST API 서버 만들기

HTTP 요청 메서드

  • GET: 서버 자원을 가져오려고 할 때 사용
  • POST: 서버에 자원을 새로 등록하고자 할 때 사용
  • PUT: 서버의 자원을 요청에 들어있는 자원으로 치환하고자할 때 사용
  • PATCH: 서버 자원의 일부만 수정하고자 할 때 사용
  • DELETE: 서버의 자원을 삭제하고자할 때 사용

HTTP 프로토콜

RESTful

  • REST API를 사용한 주소 체계를 이용하는 서버
  • 개발자 도구 -> Network -> Headers 에 많은 정보가 저장되어 있다.

주소창에 입력 -> GET 요청

<4.2>

POST, PUT, DELETE 요청 보내기

  • a태그 -> GET 요청
  • http status code
  • JSON.stringify(값): javascript 객체나 문자열을 JSON 문자열로 변환함

개발자도구(F12) Network 탭에서 요청 내용 실시간 확인 가능

  • Name은 요청 주소, Method는 요청 메서드, Status는 HTTP 응답코드
  • Protocol은 HTTP 프로토콜, Type은 요청 종류(xhr은 AJAX 요청)

<4.3>

쿠키와 세션

쿠키: 키=값의 쌍

  • Set-Cookie 옵션
    • 쿠키명=쿠키값
    • Expires=날짜: 만료 기한
    • Max-age=초: 만료 기한(초), Expires보다 우선
    • Domain=도메인명: 쿠키가 전송될 도메인을 특정할 수 있음, 기본값은 현재 도메인
    • Path=URL: 쿠키가 전송될 URL을 특정할 수 있음, 기본값은 '/'
    • Secure: HTTPS일 경우에만 쿠키 전송
    • HttpOnly: 설정 시 자바스크립트에서 쿠키에 접근할 수 없음

헤더와 본문

  • 헤더 : 요청 또는 응답에 대한 정보를 가짐
  • 본문 = body: 주고받는 실제 데이터
    ex) 응답,요청 데이터
  • 쿠키는 부가적인 정보이므로 헤더에 저장
  • 세션 쿠키: 쿠키 만료 시간을 안 넣으면 브라우저를 끄는 순간 쿠키가 사라짐

세션

  • 중요한 정보는 서버에서 관리, 클라이언트에는 세션 키만 제공

https, http2

  • https: 웹 서버에 SSL 암호화를 추가하는 모듈
  • Let's Encrypt: 무료 인증서 발급 사이트
  • http2: SSL 암호화와 더불어 최신 HTTP 프로토콜인 http/2를 사용하는 모듈

cluster

  • 여러 개의 서버를 하나의 포트에서 동시에 띄울 수 있음
  • cluster.fork(): 새로운 워커를 다시 만들어줌

0개의 댓글