본문 바로가기
Record/boostcourse

[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #2

by doongjun 2021. 7. 20.

#2 웹 개발환경 설정

 

1-1) Apache Tomcat 외에 WAS는 어떤 것들이 있을까요?

Apache Server, Nginx, IIS(Internet Information Server), WebToB

더보기
  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 의 확장자를 임의로 설정가능하여 자신만의 확장자를 만들 수 있음

출처 : https://soyeondev.tistory.com/147

1-2) WAS가 없으면 웹 애플리케이션은 왜 실행할 수 없을까요?

정의된 비즈니스 로직을 실제로 실행할 컴퓨터가 필요하다.

 

 

2) 어떤 과정을 거쳐서 브라우져에 "Hello World"가 출력될까요?
package examples;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<h1>Hello World</h1>");
	}

}

ⓐ 클라이언트가 브라우저를 통해 로컬 호스트 8080포트에서 대기하고 있는 WAS에 요청한다.

ⓑ 이 요청의 경로는 http://localhost:8080/firstweb/HelloServlet 이며 WAS는 애플리케이션단에 해당 URL과 일치하는 서블릿 설정이 있는지 살펴본다.

ⓒ 해당 URL과 일치하는 서블릿이 존재한다면 해당 서블릿을 만들어서 Hello World를 사용자에게 전달하는 로직(doGet())을 태운다.

ⓓ 로직을 수행한 서블릿은 다시 WAS로 넘어가게 되고 WAS는 클라이언트(브라우저)에게 Hello World가 입력된 문서를 응답한다.

댓글