[네트워크] 2. 웹 백엔드 프로그래밍 기초 - 웹 서버 & WAS

JM·2022년 11월 16일
0
post-thumbnail

참고자료


웹서버

웹 서버란?

  • 웹 서버는 소프트웨어를 보통 말하지만, 웹 서버 소프트웨어가 동작하는 컴퓨터를 말한다.
  • 웹 서버의 가장 중요한 기능은 클라이언트(Client)가 요청하는 HTML문서나 각종 리소스(Resource)를 전달하는 것이다. HTTP에 맞도록 리소스를 요청하게되고, 웹서버는 요청한 리소스를 반환한다.
  • 웹 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장되어 있는 정적(static)데이터이거나 동적인 결과가 될 수 있다. 정적인 데이터는 이미지, html파일, css파일,js파일을의미한다. 동적인 결과는 프로그램을 통해서 만들어지는 결과를 말한다.
  • 웹 크롤러란? 네이버나 구글같은 검색사이트에서 다른 사이트의 정보를 읽어갈 때 사용하는소프트웨어이다.

자바로 실제 HTTP 서버를 구현할 수 있다. 하지만, 복잡한 과정을 일일이 개발해야 하기 때문에 cost가 든다. java로 구현한 http 서버는 아래 링크를 참고하자.
링크 : https://velog.io/@jmsuper_97/Java-%EC%9E%90%EB%B0%94%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94-HTTP-%EC%84%9C%EB%B2%84


웹 서버를 사용하는 이유

웹 서버의 주된 기능은 웹 페이지를 클라이언트에게 전달하는 것이다. 그러나 WAS에서도 기본적으로 위와 같은 기능을 수행하고 있는데, 웹 서버가 필요한 이유는 무엇일까? 정적 및 동적 데이터를 응답하는 기능을 WAS에서 모두 수행할 경우 서버 과부화 우려가 존재한다. 또한 WAS에 장애가 발생할 경우, 정적 페이지를 응답할 수 었게 된다. 사용자가 극히 적은 서비스 초기에는 WAS만을 사용하는 것이 큰 문제가 되지 않는다. 하지만, 트래픽이 늘어났을 때, 이를 모니터링하고 서버를 증설하기 위해서는 WAS-DB 구조 보다는 Web Server-WAS-DB 구조가 더 효율적이다.


웹 서버의 종류

  • 가장 많이 사용하는 웹 서버는 Apache, Nginx, Microsoft, Google 웹서버가 있다.

Apache

Apachee Software Foundation에서 개발한 웹서버로 오픈소스 S/W이며 거의 대부분의 운영체제에서 설치 및 사용이 가능하다.

  • 스레드 / 프로세스 기반 구조

    • 클라이언트 요청당 하나의 스레드가 처리하는 구조이다.
    • 사용자가 많으면 스레드 생성, 메모리 및 CPU 낭비가 심하다.
  • MPM(Multi-Process Module)

    • Prefork MPM(다중 프로세스)

      • Client 요청에 대해 Apache 자식 프로세스를 생성하여 처리한다.
      • 하나의 자식 프로세스 당 하나의 스레드를 갖는 구조로, 자식 프로세스는 최대 1024까지 가능
      • 스레드 간 메모리를 공유하지 않는다. 따라서 메모리 소모가 크다
      • 응답 프로세스를 미리 띄어놓고 클라이언트 요청 시 자식 프로세스가 반응하는 방식이다.
      • Single CPU 또는 Dual CPU에서 성능이 좋다.

    • Worker MPM(멀티 프로세스-스레드)

      • Prefork보다 메모리 사용량이 적고, 동시 접속자가 많은 사이트에 적합하다.
      • 각 프로세스의 스레드를 생성해 처리하는 구조이다.
      • 스레드 간의 메모리 공유가 가능하다.
      • 프로세스 당 최대 64개의 스레드 처리가 가능하며, 각 스레드는 하나의 연결만을 갖는다.
      • Multi CPU 시스템에서 성능이 좋다.

Nginx

Nginx는 차세대 웹서버로 보통 불리며 더 적은 자원으로 더 빠르게 데이터를 서비스하는 것을 목적으로 만들어진 서버이며 Apache웹 서버와마찬가지로 오픈소스 소프트웨어이다. Event-Driven 구조이다. 즉, 프로그램의 흐름이 이벤트에 의해 결정되는 방식이다.

  • 한 개 또는 고정된 프로세스만 생성하고, 여러 개의 Connection을 모두 Event-handler를 통해 비동기 방식으로 처리한다.
  • 적은 양의 스레드만 사용되기 때문에 Context Switching 비용이 적고, CPU 소모가 적다.
  • Apache와 달리 동시 접속자 수가 많아져도, 추가 비용이 들지 않는다.
  • CPU와 관계없이 모든 I/O들을 전부 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행되어 1개의 프로세스로 더 빠른 작업이 가능
  • 외부 프로세서로 전달하고 렌더링 된 컨텐츠를 다시 전송할 때까지 기다려야 하여, 프로세스 속도 저하가 존재한다.

Apache와 Nginx 비교

ApacheNginX
요청 당 스레드 또는 프로세스가 처리비동기 이벤트 기반으로 처리
CPU/메모리 자원 낭비 심함CPU/메모리 지원 사용률 낮음
NginX보다 모듈이 다양Apache에 비해 다양한 모듈이 없음
PHP 모듈 등 직접 적재 가능많은 접속자들 대응 가능
안정성, 확장성, 호환성 우세성능 우세
동적 컨텐츠 단독 처리 가능동적 컨텐츠 단독 처리 불가능



WAS

학습 목표

  • WAS란?
  • WAS의 역할
  • 웹서버와 WAS의 차이

클라이언트/서버 구조

  • 클라이언트는 서비스를 제공하는 서버에게 정보를 요청하여 응답 받은 결과를 사용한다.
  • 대표적인 예시로 브라우저와 웹서버의 관계가 있다.

DBMS

  • 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어
  • DBMS에 접속해서 동작하는 클라이언트 프로그램이 한 때 많이 만들어졌다. 그런데, 이러한 구조는 클라이언트의 로직이 많아지고 프로그램이 커진다는 문제가 있었다.
    또한 프로그램의 로직이 변경되면 매번 클라이언트가 매번 배포되어야 한다는 문제가 있었다. 대부분의 로직이 클라이언트에 포함되어 보안상 취약하다는 단점이 있었다.

미들웨어(MiddleWare)

위에서의 문제점을 해결하기 위해 미들웨어가 등장하였다.

  • 클라이언트 쪽에 비즈니스 로직이 많을 경우, 클라이언트 관리(배포 등)으로 인해 비용이 많이 발생하는 문제가 발생
  • 비즈니스 로직을 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입력과 출력만 담당하도록 한다.
  • 비즈니스 로직 수정시 미들웨어만 변경하면 되는 장점을 가지게 된다.


WAS(Web Application Server)

  • 동적인 기능은 웹서버에 프로그램이 들어가는 방식인 CGI를 통해 가능했었다.
  • 그러나, Web이 복잡해지면서 브라우저와 DBMS 사이에서 동작하는 미들웨어가 필요해졌다.
  • WAS는 일종의 미들웨어로 웹 클라이언트(보통 웹 브라우저)의 요청 중 보통 웹 애플리케이션이 동작하도록 지원하는 목적을 가진다.
  • WAS의 중요한 기능 3가지
    • 프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다.
    • 여러 트랜잭션을 관리한다.
    • 업무를 처리하는 비즈니스 로직을 수행한다.
  • Web Server의 기능을 제공한다.

WAS의 역할

  • Life Cycle Management : 서블릿의 생명주기를 관리한다. 필요한 서블릿을 생성하고 제거한다.
  • Multithreaded support : 클라이언트의 요청은 쓰레드에서 처리한다. WAS는 이러한 쓰레드를 관리한다.
  • Communicate with web server : 웹 서버와 통신한다. 톰캣의 경우 소켓을 생성하여 웹서버와 서블릿 컨테이너를 연결해준다.
  • Security etc.

웹 서버 vs WAS

  • WAS도 보통 자체적으로 웹 서버 기능을 내장하고 있다.
  • 현재는 WAS가 가지고 있는 웹 서버도 정적인 컨텐츠를 처리하는데 있어서 성능상 큰 차이가 없다.
  • 규모가 커질수록 웹 서버와 WAS를 분리한다. 그 목적은 장애 극복 기능(failover)인 경우가 많다.
  • 웹 서버가 WAS 앞 단에 있는 것이 좋다. 웹 서버는 상대적으로 WAS보다 간단한 구조로 만들어져 있다. 사람들이 사용하는 대용량 프로그램은 서버의 수가 여러 대일 수 있다.
    WAS에서 동작하는 프로그램이 오작동을 발생하여 문제를 일으킬 경우가 있을 수 있다. 그 경우 WAS를 재부팅해야 될 수 있다. 웹 서버를 앞단에 두고 해당 WAS를 이용하지 못하다록 하고 WAS를 재부팅한다면, 해당 웹 서버를 사용하는 사람은 WAS에 문제가 발생한 것을 인지하지 못하게 된다.
    이러한 기능을 장애 극복 기능이라고 한다. 무중단으로 실행하도록 하기 위해서 이 기능이 필요하다.
profile
나는 사는데로 생각하지 않고, 생각하는데로 살겠다

0개의 댓글