
GIF 출처 : https://sigridjin.medium.com/spring-transaction-관리에-대한-메모-f391fd2885b4
1 ) HTTP ( Hyper Text Transfer Protocol )
2 ) Servlet , JSP ( Java Server Page )
- 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
- 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는 Servlet을 기반으로 만들어진 스크립트 언어이기 때문에 Servlet이 자바 클래스 라는 점을 통해 클래스 파일을 생성하고 이를 메모리에 적재하여 실행하는 과정을 거친다. 다음은 JSP의 동작 원리를 설명한 자료이다.
- JSP 생명주기 ( JSP LifeCycle )
: 다음 자료는 JSP 파일이 번역 되고 자바 파일로 변한된 후 서블릿 클래스로 변환한 후 앞서 언급한 동작 원리에 의해 적재되고 실행된 후 소멸되는 과정을 보여준다.
- JSP의 API
: 다음은 JSP의 API를 보여주는 자료이다. 모든 API를 살펴볼 필요는 없으므로 이러한 API가 존재한다 정도로 학습하면 좋을 것 같다.