#2 웹 개발환경 설정
1-1) Apache Tomcat 외에 WAS는 어떤 것들이 있을까요?
Apache Server, Nginx, IIS(Internet Information Server), WebToB
더보기
- Apache Server :Apache
- 쓰레드와 프로세스 기반 구조
- 요청이 많을수록 CPU와 메모리 사용이 증가하므로 성능이 저하될 수 있음
- 대부분의 OS에서 사용이 가능
- Multi-Processing-Modules(MPMs)
- MPM_prefork
- 하나의 자식프로세스가 하나의 쓰레드를 갖는 구조
- 프로세스가 생성되는 구조이므로 worker보다 많은 메모리를 사용
- 프로세스간 메모리를 직접 공유하지 않아 메모리 공간이 독립적이므로 안정적임
- 응답프로세스를 미리 띄워놓고 클라이언트 요청시 자식 프로세스가 반응하게 되는 방식
- MPM_worker
- 자식 플세스들이 각각 여러 쓰레드를 사용할 수 있음
- 각 쓰레드는 한번에 한 연결을 담당
- Prefork보다 메모리 사용량이 적고 통신량이 많은 서버에 적절
- 쓰레드간 메모리 공간을 공유하는데 리소스 경합이 발생하지 않도록 주의가 필요
- 다양한 연결 및 요청 처리 알고리즘을 선택할 수있는 유연한 아키텍처를 제공
- 모듈이 다양함
- Apache 서버의 프로세스가 블록킹이 되면 요청을 처리하지 못하고 처리완료까지 계속 대기함
- Keep Alive를 활성화하여 해결이 가능하나 Keep Alive 때문에 대량 접속시 효율이 급격하게 떨어지는 또다른 문제점이 발생 Keep Alive에 대해 해결방법으로 MPM 방식인 Event MPM 방식을 지원
- MPM_prefork
- 쓰레드와 프로세스 기반 구조
- Nginx :Nginx
- 보안과 속도를 최적화 시키고자 탄생한 웹서버
- 비동기 Event-Driven 기반 구조
- 고정된 프로세스만 생성하고 해당 프로세스 내부에서 비동기 방식으로 효율적으로 작업을 처리
- 동시접속이 많아도 Process 또는 Thread 생성 비용이 존재하지 않음
- 규모가 작고 정적 데이터 처리가 많은 서비스에 적합
- 더 적은 쓰레드로 클라이언트의 요청을 처리할 수 있음
- 쓰레드를 적게 사용하여 메모리를 적게 사용하고 CPU소모가 적음
- 부하가 큰 경우에도 메모리와 CPU가 상대적으로 일관성을 유지할 수 있음
- 모듈개발이 어렵고 모듈이 다양하지 않음
- Apache와 Nginx의 비교
- Nginx는 비동기 이벤트 기반 / Apache는 요청당 쓰레드 or 프로세스 기반
- 대량 접속에도 적은 리소스를 사용하면서 빠른 서비스를 제공할 수 있는 웹사이트의 수요가 증가하여Nginx가 각광을 받음
- Apache에 비해 모듈이 적음
- Apache는 안정성, 확장성, 호환성이 우세하며 Nginx는 성능이 우세함
- IIS(Internet Information Server) :Microsoft
- 마이크로소프트 인터넷 정보 서비스(IIS, Internet Information Server)로
- Window전용 웹서버로 Windows에서만 사용가능
- 검색 엔진, 스트리밍 오디오, 비디오 기능이 포함되어 있음
- ASP 스크립트 언어를 사용할 수 있음
- 간편한 GUI를 통해 사용 가능함
- 사용자 수가 적어 고급정보를 얻기 어려움
- 윈도우 버전마다 기능에 차이가 있음
- Apache에 비해 속도가 느림
- WebToB :티맥스소프트
- 프로세스 처리방식(안정성)
- 주로 WAS제품인 제우스(JEUS)와 함께 사용됨
- 각 프로세스에게 역할을 분담(WSM, HTL, HTMLS, PHPS, CGIS, SSIS...)
- 각각의 HTML, SSI, CGI 등의 서비스들을 별도의 독립적인 프로세스로 설정하여 프로세스의 수를 조정하여 시스템 부하를 줄임
- Caching
- 자주 이용되는 Resource들을 메모리에 상주시켜놓음
- WBAPI
- 기존 비효율적으로 설계된 CGI program들을 변환하는데 이용가능
- Data 의 확장자를 임의로 설정가능하여 자신만의 확장자를 만들 수 있음
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가 입력된 문서를 응답한다.
'Record > boostcourse' 카테고리의 다른 글
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #5 (0) | 2021.07.21 |
---|---|
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #3 ~ #4 (0) | 2021.07.21 |
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #1 (0) | 2021.07.20 |
[boostcourse] 1. SQL & JDBC 프로그래밍 생각해보기 #3 ~ #5 (0) | 2021.07.20 |
[boostcourse] 1. SQL & JDBC 프로그래밍 생각해보기 #2 (0) | 2021.07.19 |
댓글