WS & WAS (8) 썸네일형 리스트형 Tomcat 구조 Tomcat 구성 Coyote (HTTP Component) - 톰켓에 TCP 통한 프로토콜 지원 Catalina (Servlet Container) - Java Servlet 을 호스팅하는 환경 Jasper (JSP Engine) - JSP 페이지의 요청을 처리하는 서블릿 HTTP 요청을 받으면 Coyote 가 받아서 Catalina 에 전달 Catalina 는 전달받은 HTTP 요청을 처리할 웹 어플리케이션을 찾고 web.xml 을 참조해서 요청을 전달한다. 요청된 서블릿을 통해 생성된 jsp 가 있다면 Jasper가 검증/컴파일 등을 수행한다. Tomcat 구조 Tomcat 은 자바 어플리케이션으로 JVM 위에서 동작한다. 한 톰캣 서버에는 여러 서비스들을 올릴수있고, 각각의 서비스는 엔진 1개와 .. Nginx 구조 Nginx 개요 기존 방식에서는 사용자 요청은 스레드 갯수로 따져가며 설계되다보니 많은 CPU, 메모리 자원이 활용되었다. 최근엔 동시접속자 수가 점점 늘어나고 있다보니 서버의 자원은 점점 느는데 서버는 이런 동시다발적 처리의 I/O작업을 견디지 못하고 죽어버리는데 이런 문제의 해결법으로 나온게 nGinx 였다. 멀티스레드로 사용하던 시절 블로킹 I/O 방식으로 처리가 되었다. 블로킹 방식은 I/O 작업이 끝날때까지 기다려야한다. 이런 작업들은 동시다발적으로 들어오는 작업에 부적합하다. 그래서 Nginx가 선택한 방법은 Non-blocking 방식이다. 이 방식은 작업을 수행하고 있더라도 프로세스는 기다리면서 다른작업을 할수가있다. Nginx 는 스레드 풀에 스레드를 먼저 생성하고 스레드 풀 자원만 이용.. Apache, Tomcat 연동하기 Apache Tomcat 연동 아파치와 톰캣은 연동하는 방법이 3가지가 있다. 가장 많이 사용하는 방식이 tomcat connector(mod_jk) 를 사용하는 방법이고 다른 하나는 mod_proxy를 사용하는 방법과 mod_proxy_ajp 를 사용하는 방법이있다. mod_proxy 가 성능은 더 좋다고 하지만 친숙한 mod_jk 를 정리해보자 mod_jk 모듈이란? AJP 프로토콜(웹 서버와 웹 어플리케이션 서버간에 통신을 할 때 사용되는 프로토콜) 을 사용해서 톰캣과 연동하기 위해 만들어진 모듈이다. 톰캣 홈페이지에서 tomcat-connector 를 다운로드해서 아파치 웹서버에 설치해주어야 한다. 서로 연동하려면 어떻게 설정하는지 봐보자 Apache 설정 mod_jk 모듈 설정 mod_jk 모듈.. Apache 동작 방식 아파치 아파치는 클라이언트의 요청을 받으면 MPM(다중 처리 모듈) 방식으로 처리를 하는데 대표적으로 Prefork 방식과 Worker 방식과 아파치 2.4부터 추가된 event driven 방식이 있다. Prefork 방식 실행중인 프로세스가 복제되어 처리가 된다. 프로세스는 한 커넥션만 처리하고 프로세스가 생성될때 메모리도 복제를해서 프로세스간 메모리 공유는 없어서 안정적이지만, 메모리등 리소스 사용량이 너무 많아진다. Prefork 설정 StartServers 32 MinSpareServers 64 MaxSpareServers 128 ServerLimit 512 MaxClients 512 MaxRequestsPerChild 4000 StartServers: 아파치 실행시 실행되는 프로세스 수 Min.. Servelet Container - Spring Framework 서블릿 컨테이너에서의 스프링 실행과정 Servlet Container 에서 Spring Framework 가 어떻게 동작하는지를 알아보자 Spring MVC 에는 Dispatcher Servlet 이라는 서블릿이 있고 Servlet Container 에서 이 Dispatcher Servlet 을 관리하고 있다. 모든 요청과 응답은 Dispatcher Servlet에서 관리가 되고 요청 정보를 기반으로 Dispatcher Servlet 안에 있는 Application Context에 등록되어있는 빈을 호출해서 비즈니스 로직을 수행한다. Servlet Container 여기서 서블릿 컨테이너는 서블릿의 라이프 사이클을 관리하는데, 서블릿으로 구현되는 Dispatcher Servlet 도 서블릿 컨테이너에서 .. Servlet Servlet 서블릿은 Java EE의 표준중 하나로 웹 페이지를 동적으로 생성하는 서버측 프로그램을 뜻한다. 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP 와 비슷하지만 JSP 는 HTML 안에 자바가 있다면 서블릿은 자바 안에 HTML 이 있다. 서블릿 컨테이너로부터 HttpServletRequest, HttpServletResponse 인자를 받아서 로직을 수행 할 수 있다. 서블릿은 HTTPServlet 을 상속받아야 한다. 서블릿 클래스 간의 관계 HTTPServlet은 웹 요청이 왔을때 해당 서블릿을 실행하는 모든 조건들이 들어있다. Servlet 인터페이스 init(), service(), destroy(), getServletConfig(), getSer.. Web Application Server Web Application Server WAS 는 HTTP 통신을 하는 Web Server 와 비즈니스 로직을 처리가 가능한 Servlet 을 실행/ 관리하는 서블릿 컨테이너(Web Container)를 가지고 있다. socket listen, accept 등과 같은 HTTP 통신 부분을 서블릿 컨테이너와 분리해서 서블릿 컨테이너는 비즈니스 로직 처리에 집중하게 한다. 여러개의 서블릿 컨테이너를 가지고 있을 수 있고 Context Path 로 구분한다. WAS에서는 서블릿의 라이프 사이클과 멀티스레드를 지원한다. WAS 의 동작과정 1. 앞단에 웹서버가 별도로 있다면 클라이언트의 요청을 받게 되고 이 요청을 WAS의 웹서버에 보내게 된다. 2. WAS는 요청에 해당되는 서블릿 인스턴스가 존재하는지 확인.. Web Server Web Server 웹서버는 정적 리소스를 제공하거나 도메인에 따라 WAS로 라우팅 해주는 Reverse Proxy를 제공한다. Reverse Proxy(역방향 프록시)란? 프록시 서버는 클라이언트의 요청을 다른 서버로 전달하는 중개 서버인데, Reverse Proxy는 개인 네트워크 방화벽 뒤에서 적절한 백엔드 서버에 대한 클라이언트 요청을 지시하는 프록시 서버의 유형이다. Reverse Proxy의 용도는 로드 밸런싱과 보안 역할을 한다. 웹서버는 image, html, css 같은 리소스처럼 동적으로 변하지 않는 내용을 제공한다. WAS는 비즈니스 로직을 처리해야 하기 때문에 정적 리소스는 웹서버에서 처리하는 방식을 사용한다. (Tomcat 5.5 이상부터는 성능이 충분히 빨라져서 정적 리소스를 안.. 이전 1 다음