[Nginx] Nginx

Haegu·2023년 10월 24일

0. 웹 서버 Web Server vs. 웹 어플리케이션 서버 WAS

웹 서버 Web Server vs. 웹 어플리케이션 서버 Web Application Server


0-1. Web Server

: 웹 서버는 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스를 전달하는 컴퓨터 시스템

정적인 콘텐츠를 응답한다.
HTML CSS JavaScript 이미지 등의 파일을 클라이언트에 전송한다.
Apache HTTP Server나 Nginx가 대표적인 예이다.

0-2. Web Server Application, WAS

: WAS는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 미들웨어 프레임워크

클라이언트 요청에 대해 동적인 처리가 이뤄진 후 응답한다.
DB 조회나 로직 처리 같은 비즈니스 로직을 수행한다.
사용자의 요청에 따라 실시간으로 데이터를 생성하고 이를 웹 서버에 전달하여 클라이언트에게 보여준다.
Java EE 스펙의 Tomcat, JBoss 등이 대표적인 예이다.


0-3. 분업, 서비스 분기

정적인 콘텐츠는 웹서버에서 충분히 빠르게 제공할 수 있지만
동적인 콘텐츠를 제공하기 위해서는 DB접근 및 다양한 로직 처리가 필요하므로
별도의 WAS가 필요하다.

WebServer는 요청이 들어왔을 때 정적 파일을 내어주거나 다른 서버로 Reverse Proxy하는 등 안내 데스크와 같은 역할만 한다.
백엔드의 경우 WAS에 해당하며, 요청에 따라 실행되어야할 서버사이드 로직이 실행된다.

WebServer를 앞단에 두어 프론트엔드는 정적으로 서비스하고
백엔드는 Reverse Proxy로 서비스하는 형태가 된다.

웹 서버를 별도로 운영하는 이유?

WAS의 부담을 줄여주기 위해


0-4. 프론트엔드 배포

서버사이드 렌더링이 아니면 html css js로 정적인 파일이다.
React JS의 경우라면 bulid 명령어 실행 시 build 폴더가 생성되고 그 안에 index.html과 여러 css js 파일로 빌드된다.
빌드된 결과물은 사용자 요청에 따라 내어줄 수 있는 형태로 배포되어야 한다.



1. Proxy

: 대리, 대신

1-0. 프록시 서버

: 보안상의 문제로 직접 통신을 주고받을 수 없는 두 PC 사이에서 통신을 할 때 직접 하지 않고 중간에서 대리로 중계하는 기능


1-1. 포워드 프록시

: 클라이언트와 인터넷 사이에 있는 서버

  • 서버에게 클라이언트가 누구인지 감춰주는 역할

    클라이언트에서 서버로 리소스를 요청할 때 직접 요청하지 않고 프록시 서버를 거쳐서 요청한다.
    이 경우 서버에서 받는 IP는 클라이언트의 IP가 아닌 프록시 서버의 IP이기 떄문에 서버는 클라이언트가 누구인지 알 수 없다.

  • 캐싱 기능
    자주 사용되는 자원을 캐시에 저장해놓기 때문에
    해당 자원 요청이 온다면 서버에게 갈 필요 없이 프록시 서버 자체에서 처리가 가능해 성능 향상할 수 있다.

  • 보안
    클라이언트가 서버를 직접 접근하지 못하기 때문에 접근 가능한 사이트를 제한할 수 있으므로 보안을 향상할 수 있다.


1-2. 리버스 프록시

: 인터넷과 백엔드 사이에 있는 서버

  • 클라이언트가 서버를 요청할 때 리버스 프록시를 호출하고
    리버스 프록시가 서버로부터 응답을 전달받아 다시 클라이언트에게 전송하는 역할

    리버스 프록시로 웹 서버를 설정할 경우 사용자가 웹 서비스에 데이터를 요청하면
    Reverse Proxy는 이 요청을 받아서 내부 서버(WAS)에서 데이터를 받은 후에 사용자에게 다시 전달
    내부 서버는 클라이언트를 알지만, 클라이언트는 프록시를 통해 내부 서버에 접근하여 내부 서버를 알지 못한다.

  • 로드 밸런싱, 서버 확장
    여러 개의 내부 서버를 둘 수 있기 때문에 로드 밸런싱이나 서버 확장을 통해 트래픽을 분산시킬 수 있다.

  • 보안
    클라이언트는 내부 서버를 접근하지 못하기 때문에 보안을 향상할 수 있다.



2. Nginx

: 비동기식 이벤트 기반에 가벼움과 높은 성능을 목표로 하는 Web Server 소프트웨어이자 높은 성능의 로드밸런서, 웹서버, 리버스 프록시, API 게이트웨이

2-1. 사용 이유

  • 빠름, 비동기 처리
    요청에 응답하기 위한 비동기식 이벤트 기반 구조
    모든 클라이언트의 요청을 스레드가 아닌 event handler가 처리한다.
    스레드의 사용이 적으므로 Nginx의 서버 자원 활용 능력이 더 좋다.

    • Apache는 스레드/프로세스 기반 구조
      클라이언트 하나당 스레드 하나를 사용하기 때문에 클라이언트가 많아질수록 계속해서 스레드가 생성되게 된다.
      즉, 서버에 많은 부하가 가게된다.
  • 리버스 프록시로 사용가능 Reverse Proxy

  • SSL 지원
    Nginx는 http에 SSL, TLS 프로토콜 기반 인증서를 적용하여 https 프로토콜을 지원한다.
    사용자 정보 보호 위해 해당 데이터에 대한 암호화 작업해야한다.
    통신이 이루어질 때 마다 암호화하는 방법도 있지만 주로 SSL 혹인 TLS의 보안 프로토콜을 적용한다.

  • 웹페이지 접근 인증

  • 압축


2-2. Nginx의 포트 80, 443

클라이언트가 HTTP로 접속하면 80번 포트로 접속이 된다.
클라이언트가 HTTPS로 접속하면 443번 포트로 접속이 된다.
Nginx는 클라이언트가 HTTP로 접속해도 443번 포트로 우회(리다이렉트)시켜준다.
https://www.youtube.com/watch?v=tqZfdffaaBo

https://www.youtube.com/watch?v=6TYwnURF09w

https://juhonamnam.github.io/5/

profile
사용자 경험을 위해 모험을 떠나는 해구

0개의 댓글