• 티스토리 홈
  • 프로필사진
    chantleman
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
chantleman
  • 프로필사진
    chantleman
    • 분류 전체보기 (328)
      • 프로젝트 (1)
      • react (2)
      • 코딩테스트 (133)
        • lv0 (101)
        • lv1 (10)
        • lv2 (7)
        • lv3 (15)
      • 오류 (14)
      • 리눅스 (5)
      • 자바 (75)
        • spring (7)
      • js (35)
      • 오라클 (39)
        • PLSQL (3)
      • cs (5)
      • 도커 aws (3)
      • 단축키 (3)
      • 나만봐 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 서블릿 저장소 Request, Session, Context 차이와 사용법
        2025년 04월 21일
        • chantleman
        • 작성자
        • 2025.04.21.:30

         

         

         

         

         

        웹 개발을 하다 보면 사용자 정보, 설정값, 임시 데이터 등 다양한 정보를 저장하고 공유해야 하는 상황이 자주 생긴당


        그럴 때 우리는 request, session, context(ServletContext) 같은 저장소를 사용하게 되는데

         

        하지만 이 세 가지, 비슷한 것 같으면서도 각자 저장 범위, 생명주기, 사용 목적이 달라서 헷갈리기 쉽당 ...

         

         

         


         

         

        1. Request 객체

         

        ✅ 특징

        • 저장 범위: 현재 HTTP 요청(Request) 내에서만 유효
        • 생명주기: 클라이언트가 요청 → 서버가 응답할 때까지 (응답 후 소멸)
        • 사용 예시: 페이지 간 포워딩, form 입력값 전달, 일회성 에러 메시지 등

         

        ✅ 예시

        // A.jsp
        request.setAttribute("msg", "Hello from A.jsp");
        RequestDispatcher dispatcher = request.getRequestDispatcher("B.jsp");
        dispatcher.forward(request, response);
        
        // B.jsp
        <%= request.getAttribute("msg") %>

         

         

         

        🧠 핵심 요약

        • 같은 요청 내에서만 데이터 공유 가능
        • 응답이 끝나면 데이터도 사라짐

         

         

         

         

         

         

        2. Session 객체

         

        ✅ 특징

        • 저장 범위: 같은 사용자(브라우저)의 여러 요청 간 공유
        • 생명주기: 브라우저 종료 또는 일정 시간 미사용(세션 만료) 시까지
        • 사용 예시: 로그인 상태 유지, 장바구니, 사용자 설정 저장 등

         

        ✅ 예시

        // 로그인 처리 서블릿
        HttpSession session = request.getSession();
        session.setAttribute("userId", "hihi");
        
        // 다른 페이지
        <%= session.getAttribute("userId") %>

         

        🧠 핵심 요약

        • 사용자 단위로 데이터를 저장
        • 여러 페이지/요청에서도 데이터 유지 가능

         

         

         

         

         

        3. Context 객체 (ServletContext, Application)

         

        ✅ 특징

        • 저장 범위: 웹 애플리케이션 전체 (모든 사용자, 모든 서블릿)
        • 생명주기: 서버가 켜질 때 생성 → 서버가 꺼질 때 소멸
        • 사용 예시: 공통 설정값, 전역 자원(예: 전체 방문자 수) 저장 등

         

        ✅ 예시

        // 방문자 수 증가
        ServletContext context = getServletContext();
        Integer count = (Integer) context.getAttribute("visitorCount");
        if (count == null) count = 0;
        context.setAttribute("visitorCount", count + 1);

         

         

         

        🧠 핵심 요약

        • 애플리케이션 전역에서 공유
        • 모든 사용자, 서블릿, JSP 간 데이터 공유 가능

         

         


         

         

        구분 저장 범위 생명주기 주요 용도
        Request 하나의 요청 내 요청 - 응답까지 일회성 데이터 전달
        (폼값, 메시지 등)
        Session 같은 사용자 브라우저 종료 or 세션 만료까지 로그인 정보, 장바구니 등
        사용자별 데이터
        Context
        (ServletContext)
        모든 사용자, 모든 서블릿 서버 종료까지 전역 설정, 공통 자원 공유

         

         

         

        언제 어떤 저장소를 써야 할까?

         

        • ❓ 폼 전송 후 결과 메시지를 보여주고 싶다  →  request
        • ❓ 로그인한 사용자의 정보를 계속 유지하고 싶다  →  session
        • ❓ 모든 사용자에게 적용되는 설정값이 있다  →  context

         

         

         

         

        웹 애플리케이션에서 데이터를 저장할 때는

        "누구와", "얼마동안", "어디서" 데이터를 공유할 것인가?

         

        이 세가지 기준을 잘 생각해서 request, session, context 중에 적절한 저장소를 선택하면 된당 !

         

         

        728x90

        '자바' 카테고리의 다른 글

        자바 기초  (0) 2024.12.22
        MyBatis ResultMap - Collection, Association  (0) 2024.11.20
        iterator  (1) 2024.11.09
        selectkey  (1) 2024.10.15
        forward, sendredirect  (0) 2024.10.15
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바