Node.js 교과서 개정 2판 4장 요약

Nari.·2020년 12월 9일
0

Node.js

목록 보기
4/10
post-thumbnail

4장. http 모듈로 서버 만들기

4.1 요청과 응답 이해하기

서버는 클라이언트가 있기에 동작하며, 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답(response)을 보낸다.

즉, 요청과 응답은 이벤트 방식이다.




4.2 REST와 라우팅 사용하기

REST는 REpresentational State Transfer의 줄임말로 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법이다. 자원이라고 해서 꼭 파일이 아니어도 된다. 그저 서버가 행할 수 있는 것들을 통틀어서 의미한다고 보면된다.

  • 주소는 의미를 명확히 전달하기 위해 명사로 구성된다.
  • 단순히 명사만 있으면 무슨 동작을 하라는 것인지 알기어려워서 REST에서는 주소 외에도 HTTP 요청 메서드라는 것을 사용한다.
    - GET : 서버 자원을 가져올때 사용. 요청 본문에 데이터를 넣지 않지만, 데이터를 서버로 보내야 한다면 쿼리스트링을 사용
    - POST : 서버에 자원을 새로 등록할 때 사용. 요청 본문에 새로 등록할 데이터를 넣어 보냄
    - PUT : 서버 자원을 요청에 들어 있는 자원으로 치환할 때 사용. 요청 본문에 치환할 데이터를 넣어 보냄
    - PATCH : 서버 자원의 일부만 수정할 때 사용. 요청 본문에 일부 수정할 데이터를 넣어 보냄
    - DELETE : 서버 자원을 삭제할 때 사용. 요청 본문에 데이터를 넣지 않음.
    - OPTIONS : 요청 전, 통신 옵션을 설명하기 위해 사용.

REST를 따르는 서버를 'RESTful 하다'고 표현한다.




4.3 쿠키와 세션 이해하기

  1. 쿠키
    • 유효 기간이 있으며, name = nari 와 같이 단순한 '키-값'의 쌍이다.
    • 문자열 형식으로 존재하며 쿠키간에는 세미콜론으로 구분된다.
    • 쿠키를 설정할 때, 여러 옵션(만료 시간(Expires), HttpOnly, Path 등)을 넣을 수 있지만 쿠키에 들어가면 안되는 글자 중에서 대표적으로 한글과 줄바꿈이 있다.
    • 서버로부터 쿠키가 오면 웹브라우저는 쿠키를 저장해두었다가 다음에 요청할 때마다 쿠키를 동봉해서 보낸다. 즉, 서버는 요청에 들어있는 쿠키를 읽어서 사용자가 누구인지 파악한다.

우리는 서버에서 브라우저로 쿠키를 보낼 때만 코드를 작성해서 처리하면 된다.
쿠키는 요청 헤더(Cookie)에 담겨 전송된다. 브라우저는 응답의 헤더(Set-Cookie)에 따라 쿠키를 저장한다.

  1. 세션
    • 세션이라는 객체에 정보를 넣어서 세션아이디를 주고 받는 방식
    • 세션아이디는 꼭 쿠키를 사용해서 주고받지 않아도 된다.
    • 세션을 위해 사용하는 쿠키를 세션 쿠키라고 부른다.
    • 실제 배포용 서버에선느 세션을 레디스(Redis)나 멤캐시드(Memcached)같은 데이터베이스에 넣어둔다.




4.4 https와 http2

1. https

https 모듈은 웹 서버에 SSL암호화를 추가한다.
다시말해 GET이나 POST요청을 할 때, 오가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없게 한다.

https 모듈은 암호화를 적용하는 만큼 인증서가 필요하다.
인증서는 인증 기관에서 구입해야하며, Let's Encrypt 같은 기관에서 무료로 발급해주기도 한다.


2. http2

http2 모듈은 SSL 암호화와 더불어 최신 HTTP 프로토콜인 http/2 를 사용할 수 있다.
http/2는 기존 http/1.1보다 요청 및 응답 방식이 개선되어 훨씬 효율적으로 요청을 보낸다. 또한, http/2를 사용했을 때 웹의 속도도 많이 개선된다.




4.5 cluster

cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU코어를 모두 사용할 수 있게 해주는 모듈이다. 포트를 공유하는 노드 프로세스를 여러개 둘 수도 있으므로, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있다.

단점은 세션을 메모리에 저장하는 경우 문제가 될 수 있지만, 이 문제는 레디스 등의 서버를 도입하여 해결할 수 있다.

예기치 못한 에러로인해 서버가 종료되는 현상을 방지하기 위해 클러스터링을 적용하는 것이 좋다. 직접 cluster 모듈로 클러스터링을 구현할 수 있지만, pm2 등의 모듈로 cluster 기능을 사용한다.

0개의 댓글