ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nginx
    개발에 필요한 기초 지식 2022. 7. 15. 10:41

     

    1. Apache라는 웹서버를 잘 사용하고 있었는데 어떻게, 왜 Nginx가 등장하게 되었을까?

     

    2. Nginx의 장점은? 단점도 있을까..?

     

    Q. WAS 중에 가장 유명한 것이 스프링의 톰캣이라고 하는데 Django 쪽은 딱히 정의되어 있지 않다..?

     

    Apache

    우선 Apache에 대해서 간략하게 알아볼게요.

    Apache 서버는 1995년에 공개되었습니다.

    요청이 들어올 때마다 프로세스를 생성하여 연결하는 멀티 프로레스 + 멀티 스레드 방식을 사용합니다.

    위와 같은 방식의 장점은 개발하기 쉽고 다양한 모듈을 적용하기 수월하여 확장성이 뛰어나다는 점입니다.

    반면에 단점 또한 명확합니다.

    요청과 스레드가 1:1로 처리하는 구조인데 스레드간 메모리를 공유하지 않기에 안정적이지만 메모리 소모가 크다는 단점이 있는데 이는 곧 비용으로 연결됩니다. 얼마 전에 스레드는 메모리를 공유한다고 봤는데 모순되는 부분이 있는 것 같아서 이 부분에 대해서는 더 찾아보고 올리겠습니다!

     

    그런데 90년대 말쯤부터 하드웨어의 발전을 소프트웨어가 따라가지 못 하는 문제점이 대두되고 컴퓨터가 많이 보급되면서 요청(트래픽)이 많아지고 있는 상황이었습니다.

     

    이때 발생한 이슈가 컴퓨터에 동시에 연결된 커넥션의 수가 많을 때 더 이상의 커넥션을 연결하지 못 하는 문제였습니다. 일명 C10K (Connection 10000 Problem)라고 하는 것입니다.

     

    이런 Apache를 보완하기 위해 나온 것이 Nginx입니다.

    Nginx와 Apache를 많이 비교하길래 Apache의 대항마로 나온 것인줄 알고 있었는데 아니었습니다.

     

    그러면 아래의 그림을 참고하여 Nginx가 어떤 일을 하는지 왜 사용하는지 알아보겠습니다.

     

    클라이언트 - 서버단까지의 과정

     

    아시겠지만 여기서 Web Server라고 써져 있는 것이 Nginx라고 생각하시면 됩니다.

     

    그런데 저처럼 Python과 Django를 주로 다뤄오신 분들은 "WAS가 동적인 데이터 처리(비즈니스 로직 및 DB 조회 등)를 하는 것은 알겠는데 그래서 내가 쓰는 것 또는 사용할 것들 중에 어떤게 WAS인거야?" 라는 생각을 하실거라고 생각합니다. 찾아보니 Spring의 톰캣처럼 명확히 이거다라고 정해진 것은 없으나 가장 이해하기 쉬운 그림이 있어서 이를 첨부하겠습니다.

     

    Python & Django 환경에서의 WEb Server인 Nginx와 WAS 표현

     

    그러면 Nginx가 어떤 일을 하는지 알면 왜 사용해야 하는지도 알 수 있습니다.

     

    1. 빠르다.
    2. Reverse Proxy
    3. 비동기처리
    4. SSL (Secure Sockets Layer)
    5. 웹페이지 인증
    6. 압축

     

    Nginx는 빠르다 - 우리밋님의 영상 참고([Nginx] (1/2) 도대체 뭐길래 카카오, 네이버에서 사용할까)

     

    우선 빠릅니다. 효율이 좋으니 많은 사람들이 Nginx를 사용하겠죠.

    우리는 단순히 빠르다라는 부분보다 왜 빠른지를 봐야하니 다음으로 넘어가겠습니다.


    Reverse Proxy

    Proxy는 뭔가 대신해준다는 "대리"의 의미를 가지고 있습니다.

    그러면 어떤 일을 하는지 보겠습니다.

    1개의 Web Server에 여러개의 WAS가 연결되어 있고

    이런 구조로 N개의 Web Server <-> M개의 WAS가 연결된 구조인데

    그렇기에 이 때 필요한 것이 Load Balancing입니다.

    요청이 들어올 때마다 어떤 WAS로 가야하는지 알려주는 역할을 하는 것입니다.

     

    그리고 WAS로부터 전달받는 백단의 데이터들을 알아서 숨겨줍니다. 이를 통해 보안성을 강화할 수 있습니다.

     

    그리고 WAS로부터 전달받은 데이터들을 캐싱해뒀다가 같은 요청이 들어왔을 때 WAS에게 요청하지 않고 이를 응답함으로써 WAS의 부담을 덜어줄 수 있습니다.

     

    요약 : < Load Balancing, WAS로부터 받는 백단의 데이터들 자동으로 숨겨줌, 캐싱 >


    비동기 처리

    동기와 비동기에 대해서는 알고 계신다고 가정하고 진행하겠습니다.

    비동기 처리를 함으로써 동시에 많은 요청(트래픽)을 처리할 수 있습니다.


    SSL은 클라이언트와 웹사이트 (또는 서버끼리) 사이에서 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술인데 Nginx를 사용하면 HTTPS의 인증서를 제공해준다고 합니다.


    그리고 웹 페이지 인증을 WAS에게 요청하지 않고 처리할 수 있습니다.

    그래서 로그인 등의 처리를 Nginx가 대신 수행할 수 있기에 이를 통해 WAS의 부담을 줄여줄 수 있습니다.


    텍스트 타입의 파일을 압축하여 전달할 수도 있다고 합니다.


    이 외에도 많은 기능이 있겠지만 중요한 부분들 위주로 정리해봤고 그 중에서도 Reverse Proxy비동기처리가 가장 중요하다고 하니 꼭 기억하고 가야겠습니다!

     

    아래 참조해둔 링크 중에 우리밋님의 비동기처리 영상 보시면 어떤 과정을 거쳐서 비동기처리가 이뤄지는지 잘 아실 수 있으니 꼭 보시길 바랍니다! 정말 강추입니다!!

     

     

    < 참고 자료 >

    우리밋님의 Nginx란 무엇일까 (1, 2편)

    https://youtu.be/ZJpT-Wa-pZ8

    https://youtu.be/tqZfdffaaBo

     

    [10분 테코톡] 티거님의 Web Server vs WAS

    https://youtu.be/F_vBAbjj4Pk

     

    [10분 테코톡] 피케이님의 Nginx

    https://youtu.be/6FAwAXXj5N0

     

    우리밋님의 이벤트 루프 (1, 2편)

    https://youtu.be/QFHyPInNhbo

    https://youtu.be/S1bVARd2OSE

     

    수지니님의 Web Server와 WAS의 차이

    https://velog.io/@ssssujini99/Web-Web-Server%EC%99%80-Was%EC%9D%98-%EC%B0%A8%EC%9D%B4

     

    컴퓨터 탐험가 찰리님의 Gunicorn, Nginx

    https://whitepro.tistory.com/616

     

    댓글

Designed by Tistory.