

const http = require('http');
http.createServer((req, res) => {
// 어떻게 응답할지
}
참고로 요청을 거부할 수도 있다(수상한 요청일 경우)




safari같은 경우는 서버 열심히 만들어서 줘봤자
이 안에 있는게 문자열인지 html인지 못알아먹음
=> 보낸 서버가 html임을 알려줘야 함
=>

서버 여러개로 만들어서 동시에 실행할 수도 있다(잘 안씀)
html파일은 따로 만들고 코드에선 파일을 불러와서 전송해 줄 수 있다
HTTP 요청 메서드
- GET : 서버에서 자원 가져올 때
- POST : 서버에 자원 새로 등록
- PUT : 서버의 자원을 요청에 있는 자원으로 치환
- PATCH : 서버 자원의 일부만 수정
- DELETE : 서버 자원 삭제
클라이언트가 IOS, 안드로이드, 웹 상관없이 서버와 HTTP 프로토콜로 소통 가능
: REST API를 사용한 주소 체계를 이용하는 서버
ex)
GET /user : 사용자 조회
POST /user : 사용자 등록
코드위치 : ch4>4.2>restServer.js
restServer.js
![]() | ![]() |
|---|
restFront.js
![]() | ![]() |
|---|
if (req.method === 'GET') {
if (req.url === '/') {
const data = await fs.readFile('./restFront.html');
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
return res.end(data);
} else if (req.url === '/about') {
const data = await fs.readFile('./about.html');
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
return res.end(data);
} else if (req.url === '/users') {
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
return res.end(JSON.stringify(users));
}
// /도 /about도 /users도 아니면
try {
const data = await fs.readFile(`.${req.url}`);
return res.end(data);
} catch (err) {
// 주소에 해당하는 라우트를 못 찾았다는 404 Not Found error 발생
}

서버에 접속해서 폼을 제출하면 다음과 같은 과정이 실행된다
폼을 제출하면 밑의 코드가 실행된다

제출한 폼은 restServer.js의 req.method === 'POST'로 전달된다

코드를 실행해서 사용자를 등록한다
사용자 가져오는 방법(GET)

위의 코드에서 (req.url === '/users')가 실행되며 전송받은 폼 대로 사용자가 등록된다
HTTP 상태 코드
- 200 OK : 요청이 성공적
- 201 Created : 요청이 성공적, 그 결과로 새로운 리소스 생성
- 그 외에도 401, 404, 500 등 클라이언트 에러 코드 등이 있다.
그 외에도



요청의 단점 : 누가 요청을 보냈는지 모름
=> 로그인을 구현하면 해결
=> 때문에 쿠키와 세션 필요함




cookie2.js :




쿠키의 문제 :
개발자 도구만 열면 누가 로그인했는지 알 수 있음 + 개발자 도구에서 쿠키 조작 가능
=> 세션 사용
세션은 중요한 정보를 서버에서 관리, 클라이언트에는 세션 키만 제공
![]() | ![]() |
|---|


실제로 이렇게 쓰면 보안상 문제 있음 -> 실무에서는 express-session 사용
: 웹 서버에 SSL 암호화를 추가하는 모듈
사용 이유 : 헤더에 너무 많은 정보가 들어있으면 정보가 쉽게 유출될 수 있음 ->
const https = require('https');
http보다 인수 추가

콜백만 들어가는 것이 아님
: SSL 암호화와 더불어 최신 HTTP 프로토콜인 http/2를 사용하는 모듈



