[ Spring ] Servlet , JSP

Wooju Kang ·2024년 4월 2일

[ FrameWork ] Spring

목록 보기
10/10
post-thumbnail

GIF 출처 : https://sigridjin.medium.com/spring-transaction-관리에-대한-메모-f391fd2885b4

🖥 Contents


1 ) HTTP ( Hyper Text Transfer Protocol )

2 ) Servlet , JSP ( Java Server Page )





1 ) HTTP ( Hyper Text Transfer Protocol )


  • HTTP란?
    : 웹 서버와 클라이언트는 서로 통신을 하기 위해서는 통일된 규약 및 기준이 필요한데 , 이때 사용되는 것이 바로 HTTP이다.
    • HTTP의 특징
      ① Stateless : HTTP는 서버가 클라이언트의 상태를 보존하지 않는다. 그러므로 클라이언트의 상태를 유지하기 위해서 쿠키 , 세션 등을 이용한다. 이와 관련된 부분은 뒷 내용에서 설명한다.

      ② Request & Response 구조 : 웹 클라이언트가 서버에 요청을 보내면 , 서버가 요청에 대한 응답을 보내는 HTTP의 기본적인 구조이다. HTTP는 헤더 ( Header ) 와 몸체 ( Body ) 로 구성되어있다.
      • 헤더 ( Header )
        : HTTP의 헤더 부분은 HTTP 메시지와 본문에 대한 정보를 포함하며
        헤더는 총 3가지의 구성으로 이루어져 있다.

        (1) General Header
        (2) Request / Response Header
        (3) Entity Header

        이 중에서 우리가 자세히 알아볼 필요가 있는 부분은 2번째 부분이다. HTTP는 서버와 클라이언트 사이에서 통신할 때 필요한 응답 및 요청 부분을 담당하기에 그 과정에서 데이터를 처리하는 방식이 중요하기 때문이다.

        ① Request Message ( 요청 메시지 )
        : 요청 메시지는 총 4가지 요소로 구성되어있다.

        (1) Request Line
        : 데이터 처리 방식 ( HTTP Method ) 와 기본 페이지 , 프로토콜 버전이 포함되어있다.
        (2) Request Headers
        : User - Agent , Accept , Cookie , Referer , Host 정보가 포함되어 있다. 다음 자료을 통해 요청 메시지의 헤더 구성을 살펴보자.

        (3) A Blank line separates header & Body
        (4) Request Message Body


        ② Response Message ( 응답 메시지 )
        : 응답 메시지는 총 4가지로 구성된다

        (1) Status Line
        : HTTP 버전 , 상태코드 ( Status Code ) , Reaon - Phrase 가 포함되어있다.

        (2) Response Headers
        : Date , Server , Content - type , Last - Modified 정보가 포함되어있다. 다음 자료를 통해 응답 메시지의 헤더 구성을 살펴보자.


        (3) A Blank line Seperates Header & Body





2 ) Servlet , JSP ( Java Server Page )


  • Servlet 이란?
    : 자바 플랫폼에서 컴포넌트 기반의 웹 애플리케이션 개발 기술 클래스 즉, 서버에 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다. 동적 웹페이지를 만들 때 java 코드 안에 HTML 태그가 삽입되는 구조 HTML 태그 를 문자열로 처리 해야하는데 이러한 점에 있어 많은 코드를 요구한다는 단점이 존재한다.
    • Servlet 클래스의 상속 구조
      : 서블릿은 언급한 바와 같이 자바의 클래스이다. 그러므로 상속 및 객체 생성에 대한 부분에 대한 특징을 가지고 있다. 다음은 사용자 정의 Servlet 클래스의 상속 구조를 보여주는 자료이다.
      • ( 1 ) HttpServlet 구조
        : 최하단에 존재하는 Servlet은 javax.servlet.HttpServlet을 상속받는다. 이때 Javax는 현재 Java EE의 관리가 Eclipse로 넘어가게 되면서 관련된 패키지가 Jakarta EE의 패키지로 바뀌었으므로 Vscode에서 실습하게 될경우 import 할 라이브러리 부분에서 Javax가 아닌 Jakarta로 바뀐 부분을 유의하자.
        다음은 HttpServlet의 메소드를 정리한 자료이다. 모든 메소드를 사용할 필요는 없으므로 참고하면 좋겠다.

        그 중 Servlet은 doGet() , doPost() 메소드를 오버라이드하여 처리에 필요한 기능을 구현한다.
        • servlet의 구조
          : 앞서 언급한 doGet() , doPost() 메소드를 이용한 두 가지 방식에 대해 알아보자
          • GET 방식
            : 서버에 있는 정보를 가져오기 위해 설계된 것으로 최대 240바이트까지 전달할 수 있다. QUERY_STRING 환경 변수를 통해 전달되며 형식은 다음과 같다.
            http://xxx.xxx.co.kr/servlet/login?id=juice&name=kang

          • POST 방식
            : 서버로 정보를 올리기 위해 설계된 것으로 데이터 크기의 제한이 없다. 특이한 점은 URL에 매개변수가 표시되지 않는다.
        • Servlet 생명주기 ( Servlet LifeCycle )
          : 서블릿은 총 4단계에 걸친 생명주기를 가지고 있다.

          1st. 서블릿 로딩
          : 최초 클라이언트 요청 시 init() 메소드가 호출되며 메모리에 적재된다.
          2nd. 요청 처리
          : service() 메소드가 컨테이너에 의해 호출해서 클아이언트의 요청을 처리한다.
          3rd. 처리 수행
          : service() 메소드는 특정 HTTP 요청 ( Get , Post 등 )을 처리하는 doGet() , doPost() 메소드를 호출하여 처리한다.
          4th. 서블릿 종료
          : destroy() 메소드를 호출하여 서블릿을 제거한다.

          다음은 Servlet의 생명주기를 정리한 자료이다.
      • ( 2 ) Javax.servlet.ServletConfig
        : 개별 서블릿이 실행하기 위해 필요한 설정 정보를 제공하는 클래스이다. 개별 서블릿 객체 당 하나씩 생성된다. 생성되는 방식은 web container에 의해 init() 메소드가 실행될 때 전달된다.
        • ServletConfig 객체의 특징
          ServletConfig 객체는 Servlet이 초기화 될때 생성되며 , Servlet의 init() 메소드에서 사용할 수 있다.
          ServletConfig 객체는 Servlet이 종료될 때까지 사용할 수 있다.
          초기 파라미터 , ServletCOntext 객체의 주소값 등 ( 설정 정보 ) 이 ServletConfig 객체에 저장된다.

        • ServletConfig의 메소드
          : 다음은 ServletConfig의 메소드를 정리한 표이다.
      • ( 3 ) javax.servlet.http.HttpServletRequest
        : HttpServlet 클래스의 doGet(),doPost() 메소드 호출 시 파라미터로 전달되며 사용자의 요청과 관련된 정보를 제공한다. 이때 관련 정보에는 HTML 폼 입력값 , 쿠키 , 세션 정보 , 클라이언트 IP주소 등의 정보가 담겨있다.
        • HttpRequest 의 메소드
          : 다음은 HttpRequest 메소드를 정리한 표이다. 총 2가지로 분류된다.

          ① 요청 HTTP 헤더 관련

          ② 웹 브라우저 / 서버 관련 메소드

      • ( 4 ) javax.servlet.http.HTTPServletResponse
        : HttpServlet 클래스의 doGet() , doPost() 메소드를 호출할 때 파라미터로 전달되며 사용자 응답을 처리하기 위한 클래스이다. 위에서 언급한 request 클래스와 구분되는 점은 요청이 아닌 응답임 을 명심해야한다. 해당 클래스는 MIME Type을 설정 , HTTP 헤더 정보 설정 , 페이지 전환의 메소드를 가지고 있다. 이때 MIME(Multipurpose Internet Mail Extensions)은 인터넷에서 데이터의 형식을 표현하고 특정한 데이터 유형을 인식하기 위한 표준화된 방법을 의미한다.
        • HttpServletResponse 의 메소드
          : 다음은 응답 클래스의 메소드를 정리한 자료이다. 총 3가지 구성으로 분류해볼 수 있다.

          ① 응답 HTTP 헤더 관련 메소드
          : 해당 메소드는 서버가 웹 브라우저에 응답하는 정보에 헤더를 추가하는 기능을 제공한다. 즉, 헤더에 필요한 데이터를 넣어준다고 생각하면 된다.
          ② 응답 콘텐츠 관련 메소드
          : response 내장 객체는 웹 브라우저로 응답하기 위해 MIME 유형 , 문자 인코딩 , 오류 메시지 , 상태 코드 등을 설정하고 가져오는 응답 콘텐츠 관련된 메소드를 제공한다. MIME은 앞서 언급한 부분을 참고하면 된다.

          ③ 페이지 이동 관련 메소드
          : 페이지 이동 ( Redirection ) 은 사용자가 새로운 페이지를 요청할 때와 같이 페이지를 강제로 이동하는것을 의미한다. 서버는 웹 브라우저에 다른 페이로 강제 이동하도록 response 내장 객체의 리다이렉션 메소드를 제공한다.
    • Servlet Annotation ( 서블릿 주석 )
      : 자바 파일에서 서블릿을 활용할 때 몇가지 Annotation을 넣어야 한다. 이에 대해 알아보자
      • ① @WebServlet
        : 여러 서블릿을 web.xml에 설정할 경우 복잡해지는 단점이 존재한다. 그렇기에 Tomcat7 버전부터는 서블릿 매핑을 web.xml 외에 Annotation을 이용하여 서블릿 클래스에 직접 설정할 수 있는 기능을 추가하였다. Annotation 이 적용되는 클래스는 반드시 HTTPServlet 클래스를 상속받아야 한다.

      • ② @ServletComponentScan
        : 스프링 부트 환경에서 BasePackages 하위 서블릿 컴포넌트 ( 서블릿 , 필터 , 리스너 ) 를 스캔해서 빈으로 등록하는 것. 이때 서블릿 컴포넌트는 다음과 같은 별도의 Annotation이 필요하다.
  • JSP 란?
    : JSP ( Java Server Pages ) 는 Servlet 기술에 기반하여 만들어진 스크립트 언어이다. HTML 속에 자바 코드를 통해 동적 웹페이지를 생성 할 수 있으나 이러한 점이 웹 애플리케이션 유지보수의 단점으로 남아있다.

    이러한 Servlet , JSP의 문제 및 기술적 한계에 의해 MVC 패턴이 주목받기 시작했다. 이를 Model2 구조라고 한다. Model2 구조는 어플리케이션 구성 요소 단위로 역할 분담하는 MVC 패턴을 적용한 구조이다. MVC( Model - View - Controller ) 의 약자로 사용자 인터페이스 , 데이터 및 논리 제어를 구현하는데 널리 사용되는 디자인 패턴이다. 이와 관련된 자세한 내용은 차후 스프링 mvc 및 디자인 패턴 교과목에서 설명하도록 하겠다.

    • JSP 동작 원리
      : JSP는 Servlet을 기반으로 만들어진 스크립트 언어이기 때문에 Servlet이 자바 클래스 라는 점을 통해 클래스 파일을 생성하고 이를 메모리에 적재하여 실행하는 과정을 거친다. 다음은 JSP의 동작 원리를 설명한 자료이다.

    • JSP 생명주기 ( JSP LifeCycle )
      : 다음 자료는 JSP 파일이 번역 되고 자바 파일로 변한된 후 서블릿 클래스로 변환한 후 앞서 언급한 동작 원리에 의해 적재되고 실행된 후 소멸되는 과정을 보여준다.

    • JSP의 API
      : 다음은 JSP의 API를 보여주는 자료이다. 모든 API를 살펴볼 필요는 없으므로 이러한 API가 존재한다 정도로 학습하면 좋을 것 같다.

profile
배겐드 📡

0개의 댓글