* 본 글은 뉴렉처(Newlecture) 채널의 서블릿, JSP 강의를 참고하여 작성되었습니다.
웹 어플리케이션에서 상태 저장의 필요성
우리는 인터넷을 통해 굉장히 다양한 작업들을 할 수 있다.
단순히 브라우저 요청에 데이터를 전달해 그에 맞는 응답을 얻어올 뿐만 아니라 요청 데이터를 통해 특정 사이트에 회원가입을 하거나, 사이트에서 로그인 사용자와 비로그인 사용자를 구분하여 다른 응답을 얻기도 한다.
쿠팡과 같은 인터넷 쇼핑몰을 사용할 경우 사용자가 최근에 본 제품 목록을 임시로 저장하거나, 원하는 제품을 장바구니에 담아 저장할 수도 있다.
위에서 설명한 작업들의 공통점은 모두 여러 번의 요청을 거쳐 동작한다는 것이다.
지금까지의 응답 방법의 한계
아래 내용이 지금까지 우리가 구현할 수 있는 웹 프로젝트의 흐름이다.
브라우저 요청시 사용자가 입력한 데이터를 서버로 전달하면 서블릿에서 이를 활용한 응답 결과를 브라우저에 제공한다.
하지만 이는 일시적인 응답일 뿐이지, 새로운 요청이 서버로 전달되면 이전 요청과 관련된 데이터는 새로운 요청에 의해 덧씌워져 없어진다.
단순한 GET, POST 요청을 통해서는 로그인, 비로그인 사용자를 구분하거나, 장바구니에 담은 물품을 확인할 방법이 없다.
한 번 요청한 이후에 데이터를 보존하기 위한 방법, 즉 상태 유지 방법으로는 어떤 방법이 있을까?
상태 유지를 위한 방법
상태 유지를 위한 방법으로는 크게 다섯 가지가 있다.
- application 객체
- session 객체
- Cookie 클래스
- hidden input
- query string(쿼리 스트링)
이 중에서 주로 쓰이는 방법은 1번부터 3번이다.
이번 글을 통해서는 application 객체를 활용한 방법만 소개하고, 분량상 세션과 쿠키는 다음 글부터 소개하려고 한다.
application 객체
application 객체는 서블릿들 간 공유할 수 있는 정보가 저장된 서블릿 컨텍스트(Servlet Context)라는 저장소에 접근 가능한 객체이다.
context라는 단어가 문맥이라는 뜻인데, 코드 조각으로서 서로 분리된 서블릿들 간에 웹 어플리케이션 내에서 통하는 문맥이 존재해야 할 필요성이 있어 서블릿들 간 공통 저장소를 서블릿 컨텍스트라고 이름을 지은 듯하다.
웹 어플리케이션이 여러 개의 서블릿들을 기반으로 작동하므로, 서블릿 컨텍스트를 application 저장소라고도 말한다.
사용법은 아래 코드와 같다.
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hi")
public class Hello extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// request 객체를 통해 ServletContext 객체를 얻어와 application으로 정의
ServletContext application = request.getServletContext();
// 키는 String, 값은 Object(모든 객체) 타입
String key = "원하는 키값";
Object value = new Integer(5);
// 아래와 같이 application에 키,값 쌍을 저장
application.setAttribute(key, value);
// application에 저장한 데이터 중 특정 키에 대응하는 값을 반환
Object _val = application.getAttribute(key);
// 형변환하여 값을 사용
int val = Integer.parseInt(String.valueOf(_val));
System.out.println(val);
}
}
'백엔드 공부 메모 > 서블릿 & JSP' 카테고리의 다른 글
웹 어플리케이션의 상태 저장(2) (2) | 2023.11.19 |
---|---|
서블릿 필터 (0) | 2023.11.11 |
Request, Response 객체를 이용한 요청 처리(2) (0) | 2023.11.04 |
Request, Response 객체를 이용한 요청 처리(1) (0) | 2023.11.01 |
웹 사이트의 작동 방식과 서블릿 (0) | 2023.10.24 |