<예제 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 읽어 제공하기
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번 포트에서 서버 대기 중입니다!');
});
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(): 새로운 워커를 다시 만들어줌