PLOD

[JSP] HTTP와 Servlet 본문

개발 공부/Spring framework

[JSP] HTTP와 Servlet

훌룽이 2023. 2. 26. 10:59

HTTP (HyperText Transfer Protocol) 

  • 웹에서 클라이언트(브라우저)가 서버와 통신 할 때 사용하는 통신 규약 
  • HTTP는 비연결성(connectionless)와 무상태(stateless)한 특징이 있다.
  • 비연결성이란 브라우저가 서버에 특정 문서를 요청하는 순간 잠시 연결되었다가 서버로부터 응답이 전송된 후 곧바로 끊어 지는 것을 의미한다.
    • 웹이라는 특성상 다수의 브라우저가 서버와 통신하기 때문에 한 클라이언트가 서버와 지속적으로 연결되어 있다면 다른 클라이언트와 연결할 때 문제가 생길 것이다.
  • 무상태란 웹 서버가 웹 클라이언트의 상태정보를 유지하지 않는 것이다.
    • 상태정보란 브라우저가 서버에게 요청을 전달하면서 함께 전달된 테이터를 의미한다.
    • HTTP는 기본적으로 이러한 상태정보를 유지하지 않기 때문에 상태 정보 유지가 필요한 작업에 대해서는 쿠키(Cookie)나 세션(Session)을 이용해야 한다.

※ 쿠키와 세션 

  • HTTP에 상태정보를 유지(stateful)하기 위해 사용 → 쿠키와 세션을 통해 서버에서 클라이언트 별로 인증 및 인가 진행 가능 
    • cookie
      • 클라이언트에 저장될 목적으로 생성한 작은 정보(데이터 조각)
      • Name(이름),Value(값),Domain(저장 도메인),Path(사용 경로),Expires(만료기한)으로 이루어져 있다
    • session
      • 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
      • 사용자가 웹 어플리케이션에 접속할 때 , 서버가 사용자에게 특정 정보를 저장하기 위해 사용하는 메커니즘
  쿠키 세션
설명 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
저장위치 클라이언트 (웹 브라우져) 웹서버
사용 예 사이트 팝업 - 오늘 다시보지 않기 로그인 정보 저장
만료 시점 쿠키 저장시 만료일시 설정 가능 
(브라우저 종료시도 유지 가능)
다음 조건 중 하나가 만족될 경우 만료됨 1. 브라우져 종료 시까지
2. 클라이언트 로그아웃 시까지
3. 서버에 설정한 유지기간까지 해당 클라이언트의 재요청이 없는 경우
용량 제한  브라우져 별로 다름 (크롬 기준)
- 하나의 도메인 당 180개
- 하나의 쿠키 당 4KB(=4096byte)
개수 제한 없음 (단, 세션 저장소 크기 이상 저장 불가능)
취약
(클라이언트에서 쿠키 정보를 쉽게 변경, 삭제 및 가로채기 당할 수 있음)
비교적 안전
(서버에 저장되기 때문에 상대적으로 안전)

 

  • start-line , message-header , CRLF(공백) , message-body로 구성 (start-line과 message-body가 가장 중요하다.)
  • start-line에는  요청방식(get,post) , 요청 URI(URL에서 port번호 뒷부분)같은 핵심정보가 포함 된다.

  • message-header에는 key값과 value 형태로 정보가 설정되는데 이는 주로 브라우저와 관련된 정보이다
  • message-body에는 start-line에 설정된 요청 방식에 따라 message-body의 설정 정보가 달라진다. 
  • post 방식의 경우는 message-body에 사용된 입력한 값들이 설정되고 get 방식인 경우는 아무것도 설정 되지 않는다.

* get 요청 방식은 사용자가 입력한 정보가 쿼리 문자열로 외부에 노출되기 때문에 로그인 같은 기능에서 절때 사용해서는 안된다. 

HTTP 상태 코드 

  • HTTP는 TCP/IP protocol 위에서 동작한다.
  • 우리가 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야 한다는 의미이다.
  • HTTP는 HTML,XML 같은 하이퍼 텍스트뿐 아니라 이미지,동영상 같은 컴퓨터에서 다룰수 있는 데이터라면 무엇이든 전송할 수 있다.

  1. 웹 브라우저 주소 창에 네이버를 입력
  2. Enter를 누르면 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹 서벙 HTTP 요청 메세지를 보낸다.
  3. 웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에 HTTP 응답 메세지로 보낸다.
  4. 요청 메세지와 응답 메세지가 반복적으로 오가므로 우리는 웹을 사용 할 수 있다.

서버의 처리결과는 응답 메세지의 상태 라인에 있는 상태 코드를 보고 파악할 수 있다.

상태 코드는 세자리 숫자인데 첫번째 숫자는 HTTP 응답의 종류를 구분하는 데 사용하며 나머지 2개의 숫자는 세부적인 응답 내용 구분을 위한 번호이다. 

상태코드 설명
1XX(informational) 임시 응답으로 클라이언트 요청까지는 처리되었으니 계속 진행
2XX(success) 클라이언트의 요청이 성공적으로 처리(ex.200,201,202)
3XX(redirection) 완전한 처리를 위해서 추가 동작이 필요한 경우(서버의 주소 또는 요청한 URI의 웹 주소 변경으로 인한 에러 출력)
4XX(client error) 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미(ex. 404 not found)
5XX(server error) 서버 사정으로 메세지 처리에 문제가 발생한 경우(서버의 부하, DB 처리 과정 오류, 서버 익셉션 등)

GET  방식

  • HTTP 요청 메서드에서는 대표적으로 GET 방식과 POST 방식이 있다. 
  • GET  방식은 특정 리소스의 표시를 요청한다. GET 요청은 캐시가 가능하다.  (브라우저 히스토리에 남는다. )
  • GET 방식을 사용하는 요청은 오직 데이터를 받기만 한다. (데이터를 조회(READ) 할 때 사용한다.)
  • (ex.영화목록조회, 게시글 조회) 데이터를 전달할때는 URL뒤에 물음표를 붙여 key = value 형식인 쿼리 스트링 방식으로 전달 한다.
(ex. google.com?q = 북극곰) 

→ 위의 예시에서 서버에서는 q라는 파라미터 명으로 북극곰의 파라미터 값을 전달 받을 수 있다. GET 방식은 파라미터가 다 노출되기 때문에 중요한 정보를 다루면 안된다.

POST 방식

  • POST 방식은 특정 리소스의 엔티티를 제출할 때 쓰인다.
  • 데이터를 생성(CREATE),변경(UPDATE),삭제(DELETE) 할 때 사용한다.
  • (ex. 회원가입, 회원 탈퇴, 비밀번호 수정,게시글 작성). 데이터를 전달 할 때는 바로 보이지 않은 HTML body에 key = value 형태로 전달한다. 그렇기 때문에 중요한 정보를 전달 할 때는 POST 방식을 사용하자.

Servlet(서블릿)

  • 서블릿이란 Dynamic Web page를 만들 때 사용되는 자바기반의 web application 프로그래밍 기술이다.
  • 브라우저가 HTML을 통해 서버에 요청을 전달하면 서버는 요청과 함께 사용자가 전달한 정보를 추출하여 요청된 기능을 처리한다. 이때 서버에서 사용자의 요청을 처리하는 것이 서블릿이다.

 

  • 서블릿 객체는 서블릿 컨테이너에 의해 생성되고 관리된다 .
  • 서블릿  컨테이너의 개념을 잘 모르면 서블릿을 이해할 수 없고 개발과 디버깅도 불가능 하다.
  • 톰캣 서버의 내부는 웹 서버와 서블릿 컨테이너로 구성되어 있다. 웹 서버는 정적 콘텐츠 처리(HTML,XML : ... )를 담당하며 서블릿 컨테이너는 서블릿을 비롯한 동적 콘텐츠 처리(JSP)를 담당한다.
  • 톰캣서버가 생성하는 서블릿 컨테이너는 서블릿 클래스의 객체를 생성하고 관리하는 역할을 담당한다. 서블릿 컨테이너는 자신이 생성하고 관리할 클래스들에 대한 정보를 web.xml 파일을 통해 획득한다. web.xml은 웹 애플리케이션 기술문서라고도 불리며 컨테이너의 명세서 역할을 한다.

※ eclipse에서 sevlet을 [Dynamic Web Programming]을 통해 만들때 [Dynamic web module version]을 꼭 2.5로 지정해야 된다. 3.0 이상이면 web.xml 파일이 지원이 안된다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>BoardWeb</display-name>
	<welcome-file-list>
		<welcome-file>login.html</welcome-file>
	</welcome-file-list>
	<context-param>
		<param-name>boardEncoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>

</web-app>

 

서버에 특정 파일을 요청할 때 루트 디렉터리 이름을 명시하기 싫으면 Dynamic web page를 만들고 톰캣서버와 연결하면 자동 생성되는 server.xml파일을 수정해야 된다. server.xml 파일을 열과 맨 아래로 이동해면 <context> 엘리먼트에서 path의 속성을 path = "/"로 변경한다. 

<Context docBase="BoardApp" path="/" reloadable="true" 
source="org.eclipse.jst.jee.server:BoardApp"/></Host>

 

서블릿은 자바 클래스로 작성되지만 일반적인 클래스와 달리 다음과 같은 규칙을 준수하여 작성해야 한다.

1. javax.servletjavax.servlet.http패키지의 APIimport한다.

2. public 클래스로 선언한다.

3. HttpServlet 클래스를 상속한다.

4. 반드시 기본 생성자를 가지고 있어야 한다.

5. 라이프사이클과 관련된 콜백 메소드를 오버라이딩한다. (doGet(), doPost())

다음의 규칙은 Servlet wizard를 통해 만들면 알아서 규칙을 준수하여 만들어 주기 때문에 어길 걱정은 안해도 된다.

public class LoginServlet extends HttpServlet { .. }

이렇게 서블릿 클래스를 만들 때 class를 HttpServlet을 상속받는 방식으로 만들 수 있다.

 

서블릿 생성과 실행

서블릿의 콜백메소드를 살펴 보기 전에 쓰레드 풀(Thread Pool)이라는 컬렉션을 생성하고 운용한다. 쓰레드 풀에는 서블릿 컨테이너가 생성한 다수의 쓰레드 객체가 등록되며, 이 쓰레드 객체는 서블릿의 service() 메소드를 호출하도록 되어 있다. 

 

서블릿의 실행은 우선 서블릿 컨테이너가 웹서버로 부터 서블릿 처리를 요청 받는 순간 요청된 서블릿 객체가 메모리에 존재하는지 확인한다. 서블릿 객체가 생성된 후 , 서블릿 컨테이너는 서블릿의 init() 메소드를 호출하여 서블릿의 멤버변수를 초기화한다. 생성된 서블릿의 객체가 초기화되면 쓰레드 풀에서 쓰레드 객체 하난를 할당받고 할당된 쓰레드는 서블릿의 service() 메소드를 호출한다.

참고)

https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/

 

[웹 프로그래밍] HTTP 상태 코드 표(100 ~ 500) 전체 요약 정리

서버에서의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드(status code)를 보고 파악할 수 있습니다. 상태 코드는 세 자리 숫자로 되어 있는데 첫 번째 숫자는 HTTP 응답의 종류를 구분하는

hongong.hanbit.co.kr

https://www.yes24.com/Product/Goods/113797972

 

채쌤의 Servlet&JSP 프로그래밍 핵심 - YES24

웹 개발이 처음이라면 채쌤의 퍼펙트 강의가 딱이야!서블릿과 JSP를 이해하기 위해 웹 서버와 브라우저의 동작 원리부터 배운다. 무조건 쌓기만 하는 기술이 아니라 핵심 개념을 콕 짚어서 기초

www.yes24.com

 

'개발 공부 > Spring framework' 카테고리의 다른 글

[spring] spring MVC- (1.Model)  (0) 2023.03.23
[JSP] JSP , JSTL  (0) 2023.03.09
[JSP] JDBC  (0) 2023.03.01
[JSP] XML과 Annotation  (0) 2023.02.28
[Intellij] 단축키 모음  (0) 2022.08.09
Comments