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 서버 만들기
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 요청)