BE/JAVA

[JAVA] HttpSession 사용하는 방법. (+ 세션과 쿠키 차이점)

콩다영 2024. 5. 9.
728x90

Java에서 세션(session) 사용하는 방법.

 

▶ 세션(session)이란?

세션은 클라이언트와 서버 간의 연결을 유지하는 데 사용되는 메커니즘 중 하나입니다.

클라이언트가 서버에 연결하면 서버는 해당 클라이언트에 대한 고유한 세션을 생성하고 이를 유지합니다.

이를 통해 클라이언트의 상태를 유지하고 여러 요청 간에 정보를 공유할 수 있습니다.

 

 

추가적으로, 처음에 접하다 보면 세션과 쿠키의 차이를 많이들 혼동합니다.

세션(Session)과 쿠키(Cookie)의 차이를 정리해보고 넘어갑시다 !

 

세션과 쿠키는 웹 애플리케이션에서 사용자의 상태를 유지하는 데 사용되는 두 가지 주요 메커니즘입니다.

 

 

▷ 쿠키 (Cookie)

- 클라이언트의 로컬 브라우저에 저장.

- 클라이언트에서 서버로 요청할 때마다 쿠키는 자동으로 서버로 전송된다.

- 클라이언트 측에서 관리되므로 서버 측에서 쉽게 조작할 수 없다.

- 쿠키는 클라이언트에 저장되기 때문에 보안에 취약할 수 있다.

- 주로 사용자 로그인 상태 유지, 사용자 설정 에 활용.

 

▷ 세션 (Session)

- 서버 측에서 관리되며, 세션 데이터는 서버에 저장된다.

- 클라이언트와 서버 간의 통신에는 세션 식별자가 사용되며, 이 식별자는 쿠키를 통해 클라이언트에게 전달된다.

- 세션은 서버 측에서 관리되기 때문에 보안에 더 강력하다.

  클라이언트는 세션 데이터에 직접 접근할 수 없다.

- 주로 사용자 인증, 장바구니 정보 등에 활용.

 

 

이러한 차이점을 이해하면 쿠키와 세션을 올바르게 사용하여 웹 애플리케이션의 상태를 효율적으로 유지할 수 있습니다. 아래는 세션을 사용하는 방법에 대한 예시 코드를 정리했습니다 !

 

 

◈ 세션 생성 및 속성 추가

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class SessionExample extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // 세션 가져오기. 만약 세션이 없으면 새로 생성
        HttpSession session = request.getSession();
        
        // 세션에 사용자 이름 속성 설정
        session.setAttribute("username", "kongda");
        
        // 다른 속성 설정
        session.setAttribute("age", 20);
    }
}

 

◈ 세션 속성 읽기

// 세션에서 사용자 이름 속성 읽기
String username = (String) session.getAttribute("username");

// 세션에서 나이 속성 읽기
int age = (int) session.getAttribute("age");

 

◈ 세션 속성 제거

// 세션에서 사용자 이름 속성 제거
session.removeAttribute("username");

 

◈ 세션 만료 설정

// 세션 만료 시간 설정 (단위: 초)
session.setMaxInactiveInterval(60 * 30);  //30분

// 세션 만료 시간 연장 (ex: 추가 10분)
session.setMaxInactiveInterval(session.getMaxInactiveInterval() + (60 * 10));

 

 

 

HttpSession 클래스의 주요 메서드

  • getAttribute(String name) : 주어진 이름에 해당하는 세션 속성 값을 반환합니다.
  • setAttribute(String name, Object value) : 주어진 이름으로 세션에 속성을 추가하거나 기존 속성 값을 대체합니다.
  • removeAttribute(String name) : 주어진 이름에 해당하는 세션 속성을 제거합니다.
  • getMaxInactiveInterval() : 세션의 최대 비활성 시간을 반환합니다.
  • setMaxInactiveInterval(int interval) : 세션의 최대 비활성 시간을 설정합니다.

 

 

Java Session 사용 시 주의할 점

Java 웹 애플리케이션에서 세션을 사용하는 것은 사용자의 상태를 유지하고 데이터를 저장하는 데 유용합니다. 하지만 세션을 사용할 때 몇 가지 주의할 점이 있습니다. 이를 효율적으로 관리하기 위해 다음과 같은 주의사항을 고려해야 합니다.

 

 

- 세션에 저장되는 데이터의 크기에 제한이 있습니다. 너무 많은 데이터를 세션에 저장하면 서버 메모리 부하가 증가할 수 있으므로 세션에는 필요한 최소한의 데이터만 저장하는 것이 좋습니다.

- 클라이언트가 세션을 유지하는 동안 서버 측 자원이 사용됩니다. 따라서 세션의 만료 시간을 적절히 설정하여 사용자가 비활동 상태일 때 세션을 자동으로 삭제하거나 만료되도록 해야 합니다.

- 세션에는 민감한 정보가 포함될 수 있으므로 세션 식별자를 안전하게 관리해야 합니다. 

  세션 식별자를 포함한 쿠키는 보안을 위해 HTTPS를 통해 전송되어야 합니다.

- 동일한 세션에 대한 동시 요청이 발생할 수 있습니다. 이에 대한 적절한 동시성 제어가 필요할 수 있습니다.

- 세션 데이터에 대한 적절한 캐싱 전략을 사용하여 성능을 최적화해야 합니다. 불필요한 세션 데이터를 캐시에 저장하지 않도록 주의해야 합니다.

 

 

이러한 주의사항을 고려하여 세션을 적절하게 관리하면 안정적이고 효율적인 웹 애플리케이션을 개발할 수 있습니다.

 

 

728x90
반응형

댓글