back/Servlet

Servlet) 서버 저장 공간(Session) 및 xml 파일 대신 어노테이션 활용 방법

pogun 2025. 2. 28. 02:22

Servlet에서 데이터 저장 공간 개념 정리

: Servlet에서는 데이터를 저장할 수 있는 세 가지 주요 저장소가 있다.

1. 서버(Server) 저장 공간

1-1. Session (세션)

- 서버에서 클라이언트별로 데이터를 저장하는 공간

- session.setAttribute(key, value)로 데이터 저장

- session.getAttribute(key)로 데이터 가져오기

- 특정 시간 동안 유지 (setMaxInactiveInterval(초 단위) 설정 가능)

- 로그인 정보 등 사용자별 데이터 저장에 적합

 

1-2. Cache (캐시)

- 서버에서 임시 데이터를 저장하는 공간

- 자주 사용되는 데이터를 빠르게 불러오기 위해 사용됨

- 보통 애플리케이션 전체에서 공유됨


2. 클라이언트(Client) 저장 공간

2-1. Cookie (쿠키)

- 클라이언트(웹 브라우저)에 저장되는 데이터

- name=value 형태로 저장

- 서버가 클라이언트에게 쿠키를 저장하라고 명령하면, 클라이언트가 브라우저에 저장

- 로그인 유지, 방문 기록 저장 등에 사용됨


코드 설명

1. HelloServlet.java (Servlet 어노테이션 기반)

package com.mulcam.edu.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

// XML 설정 없이 @WebServlet 어노테이션을 사용하여 서블릿 매핑
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doProc(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doProc(req, resp);
    }

    public void doProc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Hello World");

        // Session을 사용하여 데이터 저장
        HttpSession session = req.getSession(); // 세션 생성 또는 기존 세션 가져오기
        session.setMaxInactiveInterval(2 * 60 * 60); // 세션 유지 시간 설정 (2시간)
                                                     // 365 * 24 * 60 * 60

        // 세션에 데이터 저장
        session.setAttribute("name", "이몽룡");

        // 세션에서 데이터 가져오기
        String name = (String) session.getAttribute("name");
        System.out.println(name);

        // DTO 객체도 세션에 저장 가능
        // session.setAttribute("human", new HumanDto("성춘향", 15));
        // HumanDto human = (HumanDto) session.getAttribute("human");
        // System.out.println(human.getName());
    }
}

설명:

어노테이션 기반 (@WebServlet("/hello"))

    - web.xml을 따로 설정하지 않고 서블릿을 등록

    - http://localhost:9000/sample5/hello로 접근 가능

 

세션(Session) 사용

    - session.setAttribute("name", "이몽룡"); → 세션에 값 저장

    - session.getAttribute("name"); → 세션에서 값 가져오기

    - 세션 만료 시간 2시간 설정


2. index.html (클라이언트에서 Servlet로 이동)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    <!-- HelloServlet 이동 -->
    <a href="hello">hello Servlet 이동</a>

</body>
</html>

설명:

: 브라우저에서 "hello" 서블릿으로 이동하는 링크 제공

: 사용자가 클릭하면 http://localhost:9000/sample5/hello로 이동하여 Servlet 실행


전체 흐름 정리

1. 클라이언트 (index.html)에서 /hello로 이동

2. HelloServlet 실행

    - "Hello World"를 콘솔에 출력

    - 세션 생성 및 데이터 저장 (name = 이몽룡)

    - 저장된 값을 가져와 콘솔에 출력

3. 클라이언트는 화면 변화를 감지하지 못하지만, 서버에서 세션에 데이터가 저장됨

 

실행 결과 (web에서 클릭 시 콘솔에 값을 출력)