3.1 노드 서버 만들기
서버와 클라이언트의 관계
- 1) 서버는 클라이언트에게 요청(request)을 받음
- 2) 서버가 요청을 처리함
- 3) 서버가 답변(reponse)을 보냄
간단한 서버 만들기
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 Client!</p>');
})
RestAPI
서버 자원 정리, 자원의 주소 지정하는 방법
-
서버가 이해하기 쉬운 주소가 좋음
-
Http 요청 메서드
GET: 서버 자원을 가져오려고 할 때 사용
POST: 서버에 자원을 새로 등록하고자 할 때 사용
PUT: 서버의 자원을 요청에 들어있는 자원으로 치환하고자 할 때 사용
PATCH: 서버 자원의 일부만 수정하고자 할 때 사용
DELETE: 서버 자원을 삭제하고자 할 때 사용
- RESTful : REST API를 사용한 주소 체계를 이용하는 서버
HTTP 프로토콜
데이터 통신을 원활하게 하기 위한 통신 규약
- 클라이언트가 누구든 HTTP 프로토콜로 소통 가능
Cookie 서버 만들기
Cookie란 키=값의 쌍으로 매요청(request)마다 서버는 Cookie를 동봉해서 답변(response)을 보낸다
- Cookie를 넣는것을 직접 구현
writeHead(): 요청 헤더에 입력하는 매서드
Set-Cookie: 브라우저에게 쿠키를 설정하라고 명령
Http 통신의 헤더와 본문
모든 http 통신은 헤더와 본문을 가진다.
- 헤더는 요청 또는 응답에 대한 정보를 가진다
- 본문은 주고받는 실제 데이터.
- cookie는 부가적인 정보이므로 헤더에 들어간다
Http 상태 코드
writeHead 매서드에 첫 번째 인수로 넣는 값.
요청의 성공과 실패를 알려준다.
- 2xx는 성공을 알리는 상태 코드. 대표적으로 200(성공), 201(작성됨)이 자주 사용된다.
- 3xx는 리다이렉션의 상태를 알려주는 상태 코드 대표적으로 301(영구 이동), 302(임시 이동)이 있다.
- 4xx는 요청 오류를 나타낸다. 요청 자체의 오류가 있을때 표시된다.. 대표적으로 401(권한 없음), 403(금지됨), 404(찾을 수 없음)이 있다.
- 5xx는 요청은 제대로 왔지만 서버에 오류가 생겼을 때 발생한다. 대표적으로 500(내부 서버 오류), 502(불량 게이트웨이), 503(서비스를 사용할 수 없음)이 자주 사용된다.
Cookie 옵션
Set-Cookie 시 다양한 옵션이 있음.
- 쿠키명=쿠키값 : 기본적인 쿠키의 값. mycookie = value 같이 설정
- Expires=날짜 : 만료 기한입니다. 이 기한이 지나면 Cookie가 사라집니다 기본 값은 클라이언트가 종료될 때까지
- Max-age=초 : Expires와 비슷한 역할이지만 날짜 대신 초를 입력할 수 있다. 해당 초가 지나면 Cookie가 사라진다. Expires보다 우선한다.
- Domain=도메인명 : 쿠키가 전송될 도메인을 설정할 수 있다. 기본값은 현재 도메인이다.
- Path=URL : 쿠키가 전송될 URL를 특정할 수 있다. 기본값은 '/'이고 이 경우 모든 URL에서 쿠키를 전송할 수 있다.
- Secure : Https인 경우 쿠키가 전송된다.
- HttpOnly : 설정 시 Javascript에서 쿠키에 접근할 수 없다. 쿠키 조작을 방지하기 위해 설정하는게 좋다.