본문 바로가기

개발 공부/nodejs

[섹션 3] http 서버

이제 드디어 서버를 만들어 본다.

 

서버는 무엇일까? 쉽게 말해서 브라우저에서 000해주세요 하면 000을 해주는 애다.

 

그리고 000해주세요, 삭제해주세요 같은 요청을 보낼 때 http 라는 프로토콜을 사용하게 된다. (우리가 한국어를 사용하고 미국에 가서는 영어를 사용해야 하듯이 서버와 클라이언트 사이에서는 http를 사용한다고 보면 된다.

 

서버는 보통 도메인(naver.com 같은 것)을 하나 구입해서 쓰는 경우가 많은데 개발시에 도메인을 구입하기란 꽤 부담이다. 그래서 기본적으로 localhost를 쓸 수 있다.

 

그리고 이 localhost 뒤에는 보통 :3000 같은 포트를 열 수 있어서 localhost:3000과 같은 형태로 많이 쓰게 된다.

 

https에서는 443 포트가 기본 포트이고 http에서는 80 포트가 기본 포트이다. 기본 포트는 생략이 가능해서 https://naver.com:443 이나 https://naver.com 이나 차이가 없다.

 

 

 

http 모듈에서는 get, post, put, delete, patch 이렇게 다섯가지의 메서드를 사용한다. get은 서버의 자원을 가져오려고 할 때 사용하고(DB나 페이지) post는 데이터를 추가할 때나 아니면 애매할 때 사용한다. delete는 말 그대로 삭제할 때 사용.

 

put, patch는 수정할 때 사용하는데 제로초님은 put은 완전 교체, patch는 부분 교체할 때 사용한다고 한다. 사실 나는 patch는 거의 쓰지 않는다.

 

그리고 REST api에서는 restful 하다라는 용어를 쓰기도 하는데 사실 이건 환상에 가깝다. 000.com/login 만 하더라도 동사가 벌써 쓰이는데 REST api에서는 동사를 쓰면 안되기 때문이다. 찾아보니 보통 auth 이런 걸 많이 쓴다고 하는데 솔직히 직관적인 걸 좋아하는 입장에서 땡기는 방식은 아니다.

 

물론 next를 혼자서 공부하다보니까 login, register 이런 것들을 하나로 묶으려고 하다보니 auth를 쓰긴 했지만..

 

 

 

기본적으로 http 서버의 구조는 아래와 같다.

 

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello!</h1>');
  res.end('<p>Server!</p>');
})
  .listen(8080, () => { // 서버 연결
    console.log('8080번 포트에서 서버 대기 중입니다!');
  });

 

1번째 줄은 http를 사용하겠다는 뜻이고 3번째 줄부터 서버를 열게 된다. res.write(뭐시기)로 클라이언트에 보낼 내용을 적을 수 있고 end로 마치게 된다.

 

writeHead는 실제 네트워크 탭에 있는 그 header에 들어갈 정보들이다. 왜 이걸 써주냐면 html을 그냥 문자열로 파악할 가능성이 있을 때 사용하고, 한글을 사용할 때 쓰고 등등 여러가지가 있다.

 

header에는 이 밖에도 다양한 정보들이 있는데 한번 각잡고 정리해봐야겠다.