ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹서버, WAS, Servlet
    스프링/MVC 2021. 11. 2. 22:24

     

    김영한님의 스프링 MVC - 1편을 듣고 작성했습니다.

     

    스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

    웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

    www.inflearn.com


    📗 웹서버

    • HTTP 기반으로 동작한다.
    • 정적 리소스 및 기타 부가 기능 제공
    • 정적 파일 (HTML, CSS, JS, 이미지, 영상)등 제공
    • NGINX, APARCH등이 있다.

     

    📗 웹 애플리케이션 서버(WAS: Web application Server)

    • HTTP 기반으로 동작
    • 기존 웹서버가 하는 기능 모두 지원
    • 프로그램 '코드'를 실행해서 애플리케이션 로직 수행후 동적(변화하는) 컨텐츠 제공 ( 동적 HTML, HTTP API (JSON등))
    • 톰캣(Tomcat), Jetty, Undertow등이 있다.

     

    ⚒️ WEB SERVER VS WAS

    • 웹 서버는 정적 리소스를 제공하는데 반해 WAS는 애플리케이션 로직 제공
    • 둘의 용어도 경계도 모호함
    • 하지만 보통 자바 '서블릿 컨테이너' 기능을 제공하면 WAS라고 한다.
    • WAS는 애플리케이션 코드를 실행하는데 특화되어있다.

     정리하자면 웹서버는 정적 컨텐츠를 제공하는데 특화되어있고 WAS는 거기에 더해 동적 컨텐츠(코드를 사용해 변경 될 수 있는 HTML 페이지 등)를 제공하는데 특화되어 있다고 볼 수 있다. 

     

    💡 일반적인 서버의 구성도

    from - https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

     

     

     

    위와 같은 구성도일 경우의 장점

     WAS만을 사용하면 HTML, CSS등의 정적 코드와 애플리케이션 로직 둘 다 제공 할 수 있는데 그렇게 하지 않는 이유는 '정적 이미지'만을 제공하는 기능을 잘 죽지 않는 애플리케이션 비즈니스 로직같은 경우는 정말 잘 죽기 때문이다. 만약 WEB SERVER만 살아있다면, WAS등이 죽어도 예외 처리 페이지등으로 이동 시킬 수 있어, UX 방면으로도 장점이 있다.

     

     

     

    from - https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

     

     

    웹 시스템 리소스의 효율적인 관리가 가능하다. 정적인 소스가 늘어나면 Web server만 증설하면 되고, 애플리케이션 리소스가 많이 사용되면 WAS만 늘리면 된다.

     

    📗Servlet

     

    구글에 보낸 http request 메시지

     

    from - https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

     

     맨 위와 같은 Http 메시지는 직접 쓰고, 파싱하기엔 정말 자주 해야하는 일이고, 번거롭고 손이 많이 가는 일이다. 저걸 일일이 다 작성해서 보낸다면 정말 많은 시간이 걸릴 것이다. 이를 해결해주는것이 Servlet이다. 서블릿을 통해, 개발자는 반복적인 http 메시지 작성 업무를 피하고, 의미있는 비즈니스 로직에만 집중 할 수 있게 된다.

     

     

     

     

     

    📗 서블릿컨테이너

     스프링은 이 서블릿을 '서블릿 컨테이너'라는 형태로 제공한다. 스프링 컨테이너와 마찬가지로 서블릿 컨테이너 안에 싱글톤 서블릿 객체들을 저장하는 방식이다.

     

    다음과 같이 스프링에서 서블릿을 사용 할 수 있다.

    @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
    public class RequestHeaderServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }

    HttpServlet을 상속받고, @WebServlet 애노테이션을 선언하면 된다. 각각의 요소는 다음과 같다.

    • @WebServlet(name = 서블릿객체를을식별할수있는이름, urlPatterns = 서블릿이 적용되는 url)
    • 동시 요청을 위한 멀티 쓰레드 처리도 지원한다
    • service의 request는 request되어진 http 메시지를 의미하고, response는 response할 http 메시지를 의미한다.
    • public으로 선언된 service가 아닌 protected로 선언된 service를 상속해야 하는 것에 유의하자.
    • request, response 각각의 객체에 있는 메소드들을 통해 http 메시지를 편리하게 파싱 할 수 있다.

     

    ⚠️ 서블릿 객체 또한 싱글턴으로 생성되니 '공유변수'를 주의하자!

    '스프링 > MVC' 카테고리의 다른 글

    HTTP Response와 템플릿 엔진  (0) 2021.11.07
    Request Servlet, Response Servlet  (0) 2021.11.05

    댓글

Designed by Tistory.