본문 바로가기
Back-End Frameworks/Node.js

7)Nodejs_http로 서버 만들기(3)_https, http2, cluster

by Downy_J 2023. 7. 12.
728x90
반응형
SMALL

https 모듈은 웹 서버에 SSL 암호화를 추가한것

 

GET, POST 요청을 할 때 오가는데이터를 암호화 하여 중간에

요청 데이터를 가로 채더라도 그 내용을 확인 못하게 만든다

 

이 SSL이 적용된 사이트는 저렇게 자물쇠가 걸려있다

 

일반적인 http 서버가 있다

암호화를 걸려면 https 모듈을 쓰면 되는데

아무나 쓸수있는건 아니다

 

암호화를 적용하기위해 그걸 인증해줄 기관이 필요하다

 

그 인증은 인증 기관에서 구매야하거나

https://letsencrypt.org/ko/

 

Let's Encrypt - 무료 SSL/TLS 인증서

 

letsencrypt.org

이런데서 무료로 발급 받을 수 있다

 

그리고 인증서를 발급 받기 위해선

도메인을 발급 받아야 하며

그 발급을 받기위한 과정이 좀 복잡한갑드라

 

발급 인증서가 있다는 가정하에 이렇게 하며 된다

createServer 메서드가 인수 두개를 받는다

첫번째 인수인증서에 관련된 옵션 객체

두번째 인수http 모듈같은 서버 로직

 

인증서를 구매하면

pem, crt, key 확장자를 갖는 파일들을 준다

 

이 파일을 fs.readFileSync() 메서드로 읽어

확장자 명 넣고 각자 넣어주면 된다.

 

실 서버엔 80 포트 대신 443 포트를 쓰면 된다

 


http2

처음 듣고 처음 보는 녀석인데...

 

노드의 http2 모듈은 SSL 암호화와 같이

최신 HTTP 프로토콜인 http/2를 사용할 수 있게 한다

  http http2
처리 한개씩 여러개 동시 가
데이터 String Binary
헤더 정보 요청마다 쿠키 담고 중복된 값을 던지기도 함 헤더 정보 HPACK압축해 전
응답 순위 X 내가 순위 지정 가능
리소스 요청 클라이언트에서 요청보냄 서버 요청 없이 보낼수 있음

 

http보다 http2의 요청응답 방식이 훨씬

개선되어 효율적으로 요청 보낸다

 

웹의 속도 역시 더 빠르다

http http2

바뀐 부분은 거의 없고 비슷하다

http => http2

createServer() => createSecureServer() 정도 바꼈다


cluster

클러스터

 

이 모듈은 싱글 프로세스로 도는 Node가

CPU 코어를 모두 쓸수 있게 해주는 모듈이다

 

포트를 서로 공유하는 Node 프로세스를  여러개 둘수도 있고

요청이 많이 들어왔을시 병렬로 실행된 서버의 개수 만큼

요청을 분산 처리할 수도 있다

 

서버에 무리가 덜가게 하는거다

 

cluster 모듈을 설정하면

코어 하나당 Node 프로세스 하나 돌아가게 할 수 있는것

성능이 8배가 되진 않으나 전보다 성능이 개선된건 맞다

 

하지만 단점으론 메모리를 서로 공유 못한다는것.

세션을 메모리에 저장하는 경우엔 문제가 될수도 있다

 

클러스터 함 써보자


https://whaledowny.tistory.com/32

 

3)Nodejs_기능정리_노드 내장 모듈(2) os, path, url, querystring, crypto, util, worker_threads, child_process, 기타

노드는 os 정보에도 접근 되고 클라이언트 요청 주소에 대한 정보도 갖고올수있으며 이런것들이 다 내장 모듈을 통해 가능함 노드 내장 모듈 os 웹에서 쓰는 JS는 OS 정보를 못갖고 오지만 Node에선

whaledowny.tistory.com

Worker_threads와 비슷하나

대신 Thread가 아닌Process다

 

Cluster엔 Master Process와 Worker Process가 있다

Master Process는 CPU갯수만큼 Worker Process를 만든뒤

8080 포트에 대기했다가 요청 시 만들어진 Worker Process에 요청을 분배한다

 

Worker Process가 실질적 일을 하는 프로세스이다



총 8개의 스레드를 갖고있어 8개가 나왔으며

처음과달리 워커 번호가 바껴있음을 알 수 있음

 

새로고침 할때 마다 하나씩 프로세스가 죽으며

총 8개가 다 종료 될 시 서버가 종료됨을 알수있다

 

저기 code에는 process.exit의 인수로 넣은 코드가 출력되고

signal은 존재 한다면 프로세스 종료한 신호의 명을 출력

 

이렇게 Worker Process가 있으니 에러나 셧다운 되더라도

총 8개까지는 서버가 정상 작동을 할 수 있다

 

그리고 종료된 워커를 다시 작동시킴으로 오류 떠도

계속 버틸 수있... 으나 하진 말자

오류떠서 종료 됬다면

그 오류 찾아 고칠 생각을 하는게 맞다

억지로 다시 돌린다고 해서 그 오류를 회피하는것도 아닌디


자! [ 정리 ]

cluster모듈로 클러스터링을 구현 할 수도 있으나

현장에선 pm2 모듈로 cluster 기능을 쓴다

 

웹 서버

HTML, CSS 같은 정적인 파일을 요청하는 주소

서버의 users 자원을 요청하는 주소

로 나뉘어있다

 

당연한거지만 파일이든 자원이든 그 수가 늘어난다면

당연 주소의 종류도 많아져야한다

 

그러면 if문이 겁나 많아져 코드가 지저분하고 시안성도 떨어질 상황이 발생할거다

Cookie나 Session도 들어가면 더 복잡해 질거다

 

이때 이런 불편함을 해소시킬 모듈이 바로

Express 모듈이

이건 누가 쓰기 편하라고 만든 모듈인데..

요거 깔아서 써보자고

728x90