티스토리 뷰

web

WAS와 Web server 특징과 종류

soyeondev 2020. 9. 13. 19:38

<Web server>

  • Web server의 개념
    1. 하드웨어
      • Web 서버가 설치되어 있는 컴퓨터
    2. 소프트웨어
      • 클라이언트로부터 HTTP 요청을 받아 정적 컨텐츠(.html, jpg, .css 파일등)를 즉 각종 리소스를 제공하는 컴퓨터 프로그램
  • Web server의 기능
    1. 정적 컨텐츠 제공
      1. WAS를 거치지 않고 바로 자원을 제공
    2. 동적 컨텐츠 제공
      1. 클라이언트의 request를 WAS에 보내기
    3. 정적, 동적 컨텐츠란?
      1. 정적 컨텐츠(static)
        1. 변화가 없는 컨텐츠를 뜻함
        2. HTML, CSS, JS와 같이 미리 서버에 저장해두고 서버가 요청을 받으면 ㅋ그저 응답만 해주면 되는 것들로 구성
        3. 어느 사용자에게나 동일한 결과값을 보여줌
    4. 동적 컨텐츠(dynamic)
      1. 누가, 언제, 어떻게 서버에 요청했는지에 따라 결과값을 다르게 보여주는 형식
      2. 유튜브 추천 영상등 사용자에게 맞춤형 컨텐츠를 제공할 수 있게함
    5. 정적 + 동적 컨텐츠
      1. 베너 광고나 카테고리 등 모두가 볼 수 있어야 하는 컨텐츠는 정적으로 두고
      2. 마이페이지나 장바구니 등 사용자 맞춤형 정보를 제공해야 할 때에는 동적 컨테츠를 활용
  • 웹브라우저와 웹서버
    • url주소가 HTTP로 시작되는 이유는 HTTP를 사용한다는 의미
    • HTTP란 인터넷상의 데이터를 주고받기 위한 프로토콜(규칙)
    • 클라이언트와 서버도 미리 정해둔 규칙을 가지고 통신을 해야만 제대로 통신 가능
    • 동작 예시)
      1. 클라이언트가 서버에 HTML 문서를 요청
      2. 웹서버는 사용자가 요청한 HTML문서를 웹브라우저에 전달
      3. 웹브라우저는 웹서버로부터 전송받는 HTML문서를 읽어들인후 해석
    • ex) Apache Server, Nginx, IIS, WebToB, Google Web server
  • Web server의 종류와 특징
    1. Apache Server :Apache
      • 쓰레드와 프로세스 기반 구조
        • 요청이 많을수록 CPU와 메모리 사용이 증가하므로 성능이 저하될 수 있음
      • 대부분의 OS에서 사용이 가능
      • Multi-Processing-Modules(MPMs)
        1. MPM_prefork
          • 하나의 자식프로세스가 하나의 쓰레드를 갖는 구조
          • 프로세스가 생성되는 구조이므로 worker보다 많은 메모리를 사용
          • 프로세스간 메모리를 직접 공유하지 않아 메모리 공간이 독립적이므로 안정적임
          • 응답프로세스를 미리 띄워놓고 클라이언트 요청시 자식 프로세스가 반응하게 되는 방식
        2. MPM_worker
          • 자식 플세스들이 각각 여러 쓰레드를 사용할 수 있음
          • 각 쓰레드는 한번에 한 연결을 담당
          • Prefork보다 메모리 사용량이 적고 통신량이 많은 서버에 적절
          • 쓰레드간 메모리 공간을 공유하는데 리소스 경합이 발생하지 않도록 주의가 필요
          • 다양한 연결 및 요청 처리 알고리즘을 선택할 수있는 유연한 아키텍처를 제공
          • 모듈이 다양함
          • Apache 서버의 프로세스가 블록킹이 되면 요청을 처리하지 못하고 처리완료까지 계속 대기함
          • Keep Alive를 활성화하여 해결이 가능하나 Keep Alive 때문에 대량 접속시 효율이 급격하게 떨어지는 또다른 문제점이 발생 Keep Alive에 대해 해결방법으로 MPM 방식인 Event MPM 방식을 지원

    2. Nginx :Nginx
      • 보안과 속도를 최적화 시키고자 탄생한 웹서버
      • 비동기 Event-Driven 기반 구조
      • 고정된 프로세스만 생성하고 해당 프로세스 내부에서 비동기 방식으로 효율적으로 작업을 처리
      • 동시접속이 많아도 Process 또는 Thread 생성 비용이 존재하지 않음
      • 규모가 작고 정적 데이터 처리가 많은 서비스에 적합
      • 더 적은 쓰레드로 클라이언트의 요청을 처리할 수 있음
      • 쓰레드를 적게 사용하여 메모리를 적게 사용하고 CPU소모가 적음
      • 부하가 큰 경우에도 메모리와 CPU가 상대적으로 일관성을 유지할 수 있음
      • 모듈개발이 어렵고 모듈이 다양하지 않음
      • Apache와 Nginx의 비교
        1. Nginx는 비동기 이벤트 기반 / Apache는 요청당 쓰레드 or 프로세스 기반
        2. 대량 접속에도 적은 리소스를 사용하면서 빠른 서비스를 제공할 수 있는 웹사이트의 수요가 증가하여Nginx가 각광을 받음
        3. Apache에 비해 모듈이 적음
        4. Apache는 안정성, 확장성, 호환성이 우세하며 Nginx는 성능이 우세함
    3. IIS(Internet Information Server) :Microsoft
      • 마이크로소프트 인터넷 정보 서비스(IIS, Internet Information Server)로
      • Window전용 웹서버로 Windows에서만 사용가능
      • 검색 엔진, 스트리밍 오디오, 비디오 기능이 포함되어 있음
      • ASP 스크립트 언어를 사용할 수 있음
      • 간편한 GUI를 통해 사용 가능함
      • 사용자 수가 적어 고급정보를 얻기 어려움
      • 윈도우 버전마다 기능에 차이가 있음
      • Apache에 비해 속도가 느림
    4. WebToB :티맥스소프트
      • 프로세스 처리방식(안정성)
      • 주로 WAS제품인 제우스(JEUS)와 함께 사용됨
      • 각 프로세스에게 역할을 분담(WSM, HTL, HTMLS, PHPS, CGIS, SSIS...)
        • 각각의 HTML, SSI, CGI 등의 서비스들을 별도의 독립적인 프로세스로 설정하여 프로세스의 수를 조정하여 시스템 부하를 줄임
      • Caching
        • 자주 이용되는 Resource들을 메모리에 상주시켜놓음
      • WBAPI
        • 기존 비효율적으로 설계된 CGI program들을 변환하는데 이용가능
        • Data 의 확장자를 임의로 설정가능하여 자신만의 확장자를 만들 수 있음

<WAS(Web Application Server)>

  • WAS의 개념
    • DB 조회나 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application Server
    • Web contatiner 혹은 Servlet Container라고도 불린다.
    • Container란 jsp, Servlet을 실행시킬 수 있는 소프트웨어를 말한다.
  • WAS의 기능
    • 프로그램 실행 환경과 DB접속 기능 제공
    • 여러 개의 트랜잭션 관리기능
    • 업무를 처리하는 비즈니스 로직수행
    • ex) Tomcat, Websphere, Weblogic, Jeus, JBoss, Resin..
  • WAS의 종류와 특징
    1. Tomcat
      • 주요기능
        • JSP/Servlet Container중 하나로 사용자에게 JSP요청을 받으면 서블릿으로 바꾸어 실행
        • SP 페이지를 웹서버에 요청하면 이 페이지를 해석하고 실행
        • Web Server에서 요청한 동적 페이지를 읽어 프로그램을 실행
        • 그 결과를 다시 HTML로 재구성하여 Web Server에게 전달
      • 특징
        • Servlet Container를 지원함
        • 플랫폼에 제약이 없음(Windows, Linux, Unix)
        • ava로 개발되는 어플리케이션 개발 및 운영시에 가장 많이 사용
        • Tomcat내부에 Web Server와 Web Container의 기능이 들어있으므로 Tomcat이 Apache를 포함하고 있으나 Apache와 Tomcat을 연동해서 사용하는 것이 성능상의 이점이 있음
        • Tomcat에 Apache가 내장되어있음에도 불구하고 Apache와 Tomcat을 연동하는 이유?
          • 정적 컨텐츠 서비스 효율이 뛰어남
          • 특정상황(톰캣에 APR native와 sendFile 사용)에서는 톰캣이 정적 콘텐츠 처리도 더 빠른 경우도 있음
          • 유연한 클러스터링
          • 모듈 기반의 확장성
          • 아파치 웹서버는 다양한 모듈이 존재함
          • 보안
    2. WebSphere :IBM
      • Java 기반의 웹어플리케이션 서버
      • 서비스 지향 아키텍처(SOA), 모듈식 애플리케이션의 토대
      • 마이크로 서비스 및 표준 기반 프로그래밍 모델을 지원
      • WebSphere Liberty의
    3. Weblogic :Oracle
      • 유료 서비스로 기술지원이 가능
      • 전체 Java EE 및 Jakarta EE 지원
      • 2EE(자바 2 플랫폼, 엔터프라이즈 에디션)를 가장 잘 지원하는 제품
      • 대부분의 클라우드 환경에서 Java 어플리케이션 실행을 지원(Oracle Cloud Infrastructure, Docker, Microsoft Azure...
      • 풍부한 관리도구와 API로 인해 운영이 자동화
      • Oracle 제품 및 기술라인과 통합될 경우 성능, 가용성 등이 최적화 될 수 있음
    4. JBoss(Wildfly) :RedHat
      • RedHat의 오픈소스 프로그램으로 Java EE 전체 스택 지원이 되는 서버
        (EJB, JMS, CDI, JTA, Servlet API 등을 지원)
      • Tomcat보다 무거움, Java EE가 제공하는 모든 기능을 필요로할 때 사용
    5. Jeus :티맥스소프트
      • 웹서버인 WebtoB와 함께 사용됨
      • WebTob와 항상 연결을 유지한 채 통신하여 Jeus의 부하상황을 즉각적으로 파악하여 부하를 분산시킴

<개념 정리>

** Keep Alive란?

HTTP 프로토콜의 특성상 한번 통신이 이루어지면 접속을 끊지만 KeepAlive On 상태에서는 KeepAliveTimeOut 시간동안

접속을 끊지않고 다음 접속을 기다림

** MPM이란?

Multi-Processing Modules

클라이언트에서 받아들인 요청을 처리하기 위해 자식 프로세스에게 분배하는 모듈

 

** SSI, CGI

SSI(Server Side Include)

다른 파일의 내용이나, 프로그램을 서버에서 넣어주는 방법

브라우저의 입장에서는 하나의 HTML파일로 받게되므로 서버가 하는일이 많아지므로 성능을 저하시키기도 함

CGI(Common Gateway Interface)

웹서버와 어플리케이션 사이의 데이터를 주고받는 규칙으로

웹서버와 어플리케이션 사이에 데이터로 소통해야하는데 언어가 다른경우 사용됨

CGI 프로그래밍 유형에는 컴파일 방식과 인터프리터 방식이 있음

** Servlet Container, Application Server

Servlet Container(Tomcat..)은 서블릿과 JSP를 처리 할 수 ​​있음

Application Server(JBoss, GlassFish..)

- Java EE 응용프로그램을 관리할 수 있음

- 서버사이드 코드를 이용해서 동적 컨텐츠를 만드는 서버

EJB 컨테이너

JTA(트랜젝션 처리), JMS(메시징 서비스), JNDI(디렉토리 서비스) 등의 기능을 수행

 

** 서버 클러스터링 이란?

서버 클러스터란 각기 다른 서버(Server Enterprise or server Datacenter)들을 하나로 묶어서 하나의 시스템같이 동작하게 함으로써

클라이언트들에게 고가용성의 서비스를 제공하는것을 말함

클러스터로 묶인 한시스템에 장애가 발생하면, 정보의 제공 포인트는 클러스터로 묶인 다른 정상적인 서버로 이동하여

사용자로 하여금 서버 기반 정보를 지속적이고, 끊기지않게 제공받을수 있게함

 

** Web Service Architecture

- 웹서버와 WAS 구조 종류

1. Client -> Web server -> DB

2. Client -> WAS -> DB

3. Client -> Web Server -> WAS -> DB

동작순서

1) 사용자가 url을 통해 WEB 서버를 호출하고 요청사항을 객체에 담아전송

2) WEB 서버는 요청 객체를 받아 바로 처리하거나 WAS로 객체 전달

3) WAS 서버는 요청에 대한 내용과 요청 객체를 받아 적절하게 처리

요청과 관련된 Servlet을 메모리에 올림

web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성

HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달

Thread는 Servlet의 service()메서드를 호출

service()메서드는 요청에 맞게 doGet() 또는 doPost()메서드를 호출

doGet() 또는 doPost()메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달

4) WAS 서버는 처리후 결과를 응답 객체에 담아 WEB 서버로 회신

5) WEB 서버는 응답 객체를 다시 사용자에게 회신

6) 사용자의 브라우저는 WEB 서버가 보내준 코드를 해석해 화면을 구성하여 출력

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함