Node.js 섹션3 http 모듈로 서버 만들기

_upper·2023년 10월 16일

HTTP 서버 만들기

서버와 클라이언트

서버와 클라이언트의 관계

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

노드로 http 서버 만들기

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

  • createServer로 요청 이벤트에 대기
  • req 객체는 요청에 관한 정보가, res 객체는 응답에 관한 정보가 담겨 있음

localhost와 포트

localhost는 컴퓨터 내부 주소

  • 외부에서는 접근 불가능

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

  • 기본적으로 http 서버는 80번 포트 사용(생략가능, https는 443)
  • 예) www.gitbut.com:80 -> www.github.com
  • 다른 포트로 데이터베이스나 다른 서버 동시에 연결 가능

fs로 HTML 파일 읽어 제공하기

server2.js


REST API 서버 만들기

REST API

서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현

  • /index.html이면 index.html을 보내달라는 뜻
  • 항상 html을 요구할 필요는 없음
  • 서버가 이해하기 쉬운 주소가 좋음

REST API(Respresentational State Transfer)

  • 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법
  • /user이면 사용자 정보에 관한 정보를 요청하는 것
  • /post면 게시글에 관련된 자원을 요청하는 것

HTTP 요청 메서드

  • GET: 서버 자원을 가져오라고 할 때 사용
  • POST: 서버에 자원을 새로 등록하고자 할 때 사용(또는 뭘 써야할지 애매할 때)
  • PUT: 서버의 자원을 요청에 들어있는 자원으로 치환하고자 할 때 사용
  • PATCH: 서버 자원의 일부만 수정하고자 할 때 사용
  • DELETE: 서버의 자원ㅇ르 삭제하고자 할 때 사용

HTTP 프로토콜

클라이언트가 누구든 서버와 HTTP 프로토콜로 소통 가능

  • ios, 안드로이드, 웹이 모두 같은 주소로 요청 보낼 수 있음
  • 서버와 클라이언트으 ㅣ분리

RESTful

  • REST API를 사용한 주소 체계를 이용하는 서버
  • GET / user는 사용자를 조회하는 요청, POST /user 사용자를 등록하는 요청

REST 서버 만들기

GitHub 저장소(https://github.com/zerocho/nodejs-book) ch4 소스 창조

restServer.js에 주목

  • GET 메서드에서 /, /about 요청 주소는 페이지를 요청하는 것이므로 HTML 파일을 읽어서 전송합니다. AJAX 요청을 처리하는 /users에서는 users 데이터를 전송합니다. JSON 형식으로 보내기 위해 JSON.stringify를 해주었습니다. 그 외의 GET 요청은 CSS JS 파일을 요청하는 것이므로 찾아서 보내주고, 없다면 404 NOT FOUND 에러를 응답합니다.

  • POST와 PUT 메서드는 클라이언트로부터 데이터를 받으므로 특별한 처리가 필요합니다. req.on('data', 콜백)과 req.on('end', 콜백) 부분인데요. 3.6.2절의 버퍼와 스트림에서 배웠던 readStream 입니다. readStream으로 요청과 같이 들어오는 요청 본문을 받을 수 있습니다. 단, 문자열이므로 JSON으로 만드는 JSON.parse 과정이 한 번 필요합니다.

  • DELETE 메서드로 요청이 오면 주소에 들어 있는 키에 해당하는 사용자를 제거합니다.

  • 해당하는 주소가 없을 경우 404 NOT FOUND 에러를 응답합니다.


POST, PUT, DELETE 요청 보내기

REST 서버 실행하기

localhost:8085에 접속

콘솔
$ node restServer
8085번 포트에서 서버 대기 중입니다.

REST 요청 확인하기

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

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

0개의 댓글