본문 바로가기

데일리

[2023.11.24] 내가 놓치고 있던 부분을 발견하여 정리2 (PM2, NGINX, gzip)

글의 목적

  • 프레임워크, 라이브러리, 도구, 함수 하나하나도 왜 선택해서 사용했는지 파악하기 위해 정리하려고 함.
  • 쿠키, 세션, Token, JWT, PM2, NGINX, gzip, VPC를 부트캠프에서 배운대로 사용했는데 생각해보니까 왜 써야하는지에 대해서는 잘 알고 있지 못했음.

본론

PM2

pm2를 왜 쓸까?

  • pm2에 대해서 공식문서를 확인해보면 "node.js를 위한 발전된 상품 프로세스 매니저"라고 나와있다.
  • 즉, 필수품은 아니라는 말이다.
  • 굳이 사용안해도 되는데 사용하는 이유는 편리하기 때문이다.
  • 그럼 편리한 이유만 정리하면 될 것 같다.

pm2가 편리한 이유

  1. node 서버에 가장 큰 문제점은 역시 에러처리를 잘 못했을때 바로 꺼진다는 것이다. 그것을 막아준다. 즉 app이 꺼졌을때 자동으로 다시 켜줄 수 있는 기능이 있다.
    • # pm2 start app.js
    • pm2로 시작하면 pm2로 끄지 않는 이상 process가 예기치 못하게 종료되었을때 재시작이 됨.
  2. 코드의 수정, 즉 리소스가 변했을 때 자동으로 프로세스를 재시작해줌.
    • 이건 그렇게까지 장점은 아닌것 같다
    • 어짜피 배포는 production까지 가야 되기 때문에 바로 반영시킬 필요가 있을까?
  3. 로그 확인이 쉽다.
    • 하나의 화면에서 로그를 파악할 수 있는데 이것도 굳이...? 
  4. pm2의 클러스트 기능으로 컴퓨터환경에 맞게 여러 스레드를 돌릴 수 있게 해줌.
    • 이게 진짜 좋은 장점같다.
    • 사실 싱글 스레드인 js 기반에 서버에서 멀티 스레드를 사용하려면 여러 복잡한 방식으로 스레드를 늘려줘야 한다. 하지만 pm2는 컴퓨터 사양에 맞게 16개가 돌아가면 16개의 프로세스로 동작시켜서 더 많은 유저를 받을 수 있다.
  5. 그외 여러 좋은 점들이 많은데 필수 도구는 아니다.

NGINX

NGINX를 왜 쓸까?

  • nginx를 왜 쓰는지 알기 위해서는 클라이언트, 웹 서버, WAS, DB에 대한 이해가 먼저 필요함.

1. 클라이언트

  • 클라이언트란 서비스를 이용하기 위해 네트워크를 통해 요청을 보내주는 주체를 말함.
  • 예를 들면 크롬 웹 브라우저
  • 크롬, 엣지, 사파리등 유명 브라우저 말고도 기능에 따라서 클라이언트가 될 수 있음.
  • 가령 email을 보내는기능은 전담하는 클라이언트를 실행하면 이메일클라이언트가 되는것임.

2. 웹 서버

  • 웹 서버는 nodejs 서버가 아님을 알고 시작하자. 단 nodejs 서버는 웹 서버일 수 있음 ㅎㅎ;;;;
  • 웹 서버는 클라이언트의 요청에 따라서 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답해주는 소프트웨어를 의미함.
  • 지금 알아볼 NGINX가 있고 APACHE도 여기에 속함.

3. WAS (웹 어플리케이션 서버)

  • 이게 우리가 알고 있는 서버이다.
  • 정확한 정의는 클라이언트의 요청에 대해 동적인 처리를 담당하는 소프트웨어라고 생각하면 됨.
  • 웹 서버와 다르게 app 로직을 실행할 수 있도록 구성되어 있음.
  • 웹 서버는 인증, 인가 로직을 처리는 것 말고도 트렌젝션 관리, 보안, 로깅 등의 기능도 담당함.
  • 대표적으로 Tomcat이 있음. nodejs서버도 사용될 수 있음.

4. DB 

  • db는 데이터베이스임.
  • NGINX를 이해하기 위해서 db를 깊게 설명할 필요는 없기 때문에 넘어가겠음.

5. 웹 서비스라는 것

  • 클라이언트 >> 웹 서버 >> WAS >> DB 로 요청이 오고 DB >> WAS >> 웹 서버 >> 클라이언트 순으로 응답을 처리함.

그렇다면 웹 서버 즉, NGINX를 왜 쓸까?

1. 웹 서비스의 요청과 응답 프로세스를 보면 확인할 수 있는데 WAS에 부담을 줄여주기 위해서 웹 서버를 사용한다고 이해하면 될 것 같다.

  • WAS는 동적인 작업을 처리하게도 바쁜데 정적인 파일까지 클라이언트에게 제공하려면 작업에 부담이 생길수밖에 없음.

2. 웹 서버를 사용해서 보안을 강화 할 수 있음.

 

SSL과 TLS 비교 - 통신 프로토콜 간의 차이점 - AWS

SSL과 TLS 모두 서버, 애플리케이션, 사용자 및 시스템 간의 데이터를 암호화하는 통신 프로토콜입니다. 네트워크를 통해 연결된 두 당사자를 인증하므로 데이터를 안전하게 교환할 수 있습니다.

aws.amazon.com

그럼 많은 웹 서버중 왜 NGINX를 쓸까?

1. 높은 성능과 적은 메모리 사용

  • NGINX는 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공함.
  • 이를 통해서 빠른 응답시간을 보장할 수 있음.
  • 적은 메모리 사용으로 높은 성능을 뽑기때문에 서버 운용 비용 또한 감소됨. 

2. 리버스 프록시 사용이 가능함.

출처 : https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/

  • 리버스 프록시란 인터넷과 백엔드 사이에 있는 서버 영역을 말하는데 클라이언트의 여러 요청들을 분산시켜서 분배한다고 이해하면 된다.
  • 즉, NGINX는 적은 비용으로 로드벨런싱도 지원한다는 의미!!

3. gzip을 통한 압축과 캐싱 서버로도 이용이 가능하다.

  • 캐싱 부분은 방법을 좀 더 파악한 뒤 하나의 글로 다뤄야 겠다.
  • gzip은 클라이언트의 요청이 Text일 경우 데이터를 압축할 수 있다.(이를 통해서 웹 페이지 랜더링 속도를 비약적으로 단축시킬 수 있음.)

결론

  • 정리를 하면서 느끼는 거지만 알고 있었던 내용도 정리가 안되면 말로 안나온다는 것을 느꼈다.
  • 공부하고 또 공부하자....!