ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP 요청과 응답 그리고 서블릿 정리
    웹프로그래밍/기초 2018. 12. 2. 20:49



    HTTP란?

    서버와 클라이언트의 통신규약

    클라이언트(웹 브라우저)가 HTTP 요청을 웹 서버에 전송하면

    웹서버는 그 요청을 처리해서 다시 웹브라우저에 HTTP 응답을 보낸다.


    HTTP is Stateless

    서버는 다수의 요청을 받는 동안 각각의 유저에 대한 정보를 저장하지 않는다. 모든 요청은 독립적으로 처리된다.

    http 요청에는 이전 또는 이후 요청에 대한 정보가 없다. 하지만 현재 요청을 서버가 처리하는데 필요한 모든 정보를 담고 있다.

    웹 어플리케이션이 유저 정보를 저장하려면 세션, 쿠키를 사용한다.



    요청(request)

    GET

    단순히 서버에게 자원을 요청하는 방식

    브라우저 주소창에 데이터를 입력하므로 길이 제한이 있고 전송하는 정보가 URL에 그대로 드러난다.

    POST

    서버에게 자원 요청과 함께 필요한 정보를 넘겨준다.


    ※HTTP 메소드에는 GET, POST 외에도 HEAD, TRACE, PUT, DELETE, CONNECT등이 있다. 




    응답(response)

    header와 body로 구성되어 있다. body에는 html 페이지와 같은 컨텐츠가 들어가고 header에는 http 관련 정보, 쿠키 정보, 컨텐츠 타입 등의 정보가 들어있다.


    ※header의 컨텐츠 타입을 MIME 타입이라고 부른다. MIME란?








    웹 어플리케이션 아키텍처



    컨테이너

    웹 컨테이너(web container, 또는 서블릿 컨테이너)는 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다.


    출처: 위키백과


    웹 서버는 사용자의 동적인 페이지 요청을 컨테이너로 전달한다.

    컨테이너는 요청을 분석하여 해당 서블릿에 전달한다. 

    서블릿은 웹 어플리케이션 구동 시 컨테이너 안에 배포(deploy) 된다. 



    컨테이너의 역할

    1. 서블릿 생명주기 관리

    서블릿 초기화, 생성과 소멸(가비지 컬렉션)


    2. 웹서버와 서블릿 통신지원


    3. 멀티 스레드 지원

    컨테이너는 새로운 요청이 들어올때 스레드를 생성한다. 

    스레드는 HTTP 서비스 메소드가 실행된 후 소멸한다.


    4. jsp를 서블릿(자바코드)으로 변환


    5. 보안 관리

    개발자는 보안 관련 내용을 하드코딩 할 필요없이 XML로 관리한다.







    서블릿이란?

    자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 


    출처: 위키백과


    서블릿은 HttpServlet을 상속받고 doGet(), doPost()와 같은 HTTP 메소드를 재정의하는 '클래스'이다.



    서블릿이 왜 필요하지?

    웹 서버는 정적인 페이지를 서비스하는데 최적화 되어 있다. 동적인 페이지를 서비스하기 위해서 서블릿을 사용한다. 



    서블릿 특징

    웹 어플리케이션 구동시 서블릿은 최초 한번 컨테이너에 생성된다. 그리고 클라이언트 요청마다 스레드를 생성한다. 그러므로 웹 어플을 구동 할때 마다 클래스 로딩으로 인한 메모리 부하 및 JVM 구동에 의한 부하가 없다. JVM은 어떤 일들을 할까?

    서블릿은 J2EE 컨테이너 안에서 실행된다.



    자바 플랫폼, 엔터프라이즈 에디션(Java Platform, Enterprise Edition; Java EE)은 자바를 이용한 서버측 개발을 위한 플랫폼이다. Java EE 플랫폼은 PC에서 동작하는 표준 플랫폼인 Java SE에 부가하여, 웹 애플리케이션 서버에서 동작하는 장애복구 및 분산 멀티티어를 제공하는 자바 소프트웨어의 기능을 추가한 서버를 위한 플랫폼이다. 이전에는 J2EE라 불리었으나 버전 5.0 이후로 Java EE로 개칭되었다.


    출처: 위키백과




    서블릿 동작과정

    컨테이너가 웹서버로 부터 요청을 전달 받는다. 요청 처리시 웹 컨테이너 안에서 서블릿 동작과정은 아래와 같다.


    1. 웹 컨테이너가 Request, Response 객체를 생성하고 사용자의 요청을 분석하여 해당하는 서블릿 찾은 뒤,

      앞서 생성한 객체들을 서블릿 스레드에 인자로 넘긴다.

    2. 컨테이너에 의해 호출 된 service 메소드가 요청을 분석하여 HTTP 메소드 실행, 주로 doGet(), doPost()

    3. HTTP 메소드가 동적인 페이지를 생성 후 response 객체에 담아서 컨테이너로 보낸다. (웹 컨테이너 안에 응답 객체의 레퍼런스가 여전히 남아있음)

    4. 스레드 작업이 끝나면 컨테이너가 response 객체를 HttpResponse 객체로 변환하여 클라이언트에게 전송하고 request, response 객체는 destroy 메소드에 의해 소멸된다.







    MVC 패턴

    웹 어플리케이션을 Model, View, Controller로 구분한 것이다. 역할 별로 코드를 구분하여 웹 어플리케이션의 유지 보수 및 확장이 용이하다.


    컨트롤러(Controller)

    사용자의 요청을 분석하고 적절한 모델을 생성한 뒤 뷰로 넘겨준다.


    모델(Model)

    비지니스 로직과 데이터


    뷰(View)

    프리젠테이션 담당, 사용자가 입력한 정보를 컨트롤러에 넘기거나 컨트롤러가 보낸 모델을 출력한다.











    실제경로의 서블릿 파일명을 html 페이지에 하드코딩 하는 대신 맵핑하여 사용하면 유연성과 보안에 좋다. 




    '웹프로그래밍 > 기초' 카테고리의 다른 글

    프록시란?  (0) 2018.07.12
    웹 요청 처리에 대한 기본지식  (0) 2018.06.10
    세션(session)과 쿠키(cookie)  (0) 2018.06.09
    페이징  (0) 2018.04.28
    웹프로그래밍과 데이터베이스 관련내용 정리  (0) 2018.04.14