처음 서버를 구현해봤다.
이건 스스로 해낼 수 없고, 공식문서를 참고하며 틀을 가져다 써야했다.
이 링크를 참고해서 구현할 수 있다면, 정말 좋았을 것이다.
하지만 주니어개발자로서, 굉장히 생소하다.
2번 문서가 정말 친절하게 되어있어서, 많은 도움이 됐다.
정말 꿀같은 링크다.
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// 여기서 `body`에 전체 요청 바디가 문자열로 담겨있습니다.
});
과제에서 제일 먼저 진행해야 하는 부분은 요청받은 데이터를 가져오는 건데,
이 예시를 활용해서 바로 받아올 수 있었다. (거의 그대로 가져다가 썼다.)
response.write(JSON.stringify(responseBody));
response.end();
// 주의: 위 두 줄은 다음 한 줄로 대체할 수도 있습니다.
// response.end(JSON.stringify(responseBody))
이 부분도 중요하다. write를 작성한 후에 end를 사용해야한다.
end를 하면 담겨진 데이터를 클라이언트에게 보낸다. 순서가 중요하다!
이 링크만 잘 활용하면, http 모듈로 서버를 구현할 수 있다.
http 의 상태코드와 그에 대한 설명을 알 수 있다.
우리가 주로 사용할 코드는 3가지다.
200 OK
요청이 성공적으로 되었습니다. 성공의 의미는 HTTP 메소드에 따라 달라집니다:
GET: 리소스를 불러와서 메시지 바디에 전송되었습니다.
HEAD: 개체 해더가 메시지 바디에 있습니다.
PUT 또는 POST: 수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.
201 Created
요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다.
404 Not Found
서버는 요청받은 리소스를 찾을 수 없습니다. 브라우저에서는 알려지지 않은 URL을 의미합니다. 이것은 API에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수도 있습니다. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있습니다. 이 응답 코드는 웹에서 반복적으로 발생하기 때문에 가장 유명할지도 모릅니다.
http 요청 및 응답시 전송되는 body의 MIME 타입을 설정해주기 위한 header의 이름은?
content-type
응답 내에 있는 Content-Type 헤더는 클라이언트에게 반환된 컨텐츠의 컨텐츠 유형이 실제로 무엇인지를 알려줍니다.
요청 내에서, (POST 혹은 PUT처럼), 클라이언트는 서버에게 어떤 유형의 데이터가 실제로 전송됐는지를 알려줍니다. -mdn
클라이언트와 서버는 서로 어떤데이터를 줬는지 content-type을 통해 알려주고,
MIME 는 파일 형식을 알려주는 역할을 한다.
우리과제에서는
headers: {
'Content-Type': 'application/json'
}
이렇게 설정하고 진행했다. 'application/json'
이 MIME 타입이다.
웹에서는 제대로 작동하지 않으므로, 다운로드해서 사용해야한다.
서버url을 넣고, GET, POST, DELETE 등 메소드를 입력해볼수있다.
디버깅할때 활용하면 편리하다.
지금부터는 http로 서버를 구현한 것을
express를 통해 리팩토링 하는데 사용한 링크를 정리해뒀다.
내가 본 공식문서 중에 제일 친절하다.
우선 설치를 하고, hello world 예제를 통해 정말 쉽게 서버를 만들어 볼 수있다.
예제에서 도메인은 작성하지 않고 port 로만 서버를 만드는데
이는 내 컴퓨터 서버를 이용해서 도메인이 필요없다! (나도 질문해서 알았다!)
http://localhost:3000/
진짜 편하다.
req.body 에 JSON 형태로 payload가 담겨져 있다.
요청, 응답에 cors 헤더를 붙일 때 사용하면됩다.
app.use(cores()) 이런 식으로 모든 요청에 대해 CORS 허용 할 수 있다.
이건 추가로 보면 좋은 글이다. 정리가 아주 잘 되어있다고 한다.