스프링/개념

Session 과 Session Login

문상휘파람 2024. 9. 23. 17:14

세션이란 무엇인가?

  • 세션은 서버에서 유지되는 사용자의 상태 정보를 의미합니다.

왜 세션을 써야 하는가? - 인증의 필요성

  • HTTP 프로토콜의 특징으로 인해 필요합니다.
    • 비연결성 : 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊는 방식입니다.
    • 무상태 : 커넥션이 끊는 순간 이후로 어떠한 상태정보를 유지하지않는 특성입니다.

서버는 클라이언트 기억하지 못함 -> 계속 기억시켜 줌 :: 이것이 인증


세션 장단점

장점

  1. 보안성:
    • 세션은 클라이언트 측에 민감한 데이터를 저장하지 않고, 서버에서만 데이터를 관리하므로 보안성이 높습니다. 쿠키에는 세션 ID만 저장되고, 실제 데이터는 서버에서만 접근 가능합니다..
  2. 데이터 무결성:
    • 세션 ID가 서버에서 관리되기 때문에, 클라이언트가 데이터를 조작할 수 없음. 이를 통해 데이터 무결성이 보장됩니다..
  3. 서버에서 관리:
    • 세션 데이터를 서버에서 관리하므로, 서버 측에서 세션을 무효화하거나 삭제할 수 있음. 이로 인해 로그아웃 처리나 세션 만료 관리가 용이합니다.
  4. 데이터 용량 문제 없음:
    • 서버에서 데이터를 관리하기 때문에 저장 용량에 제한이 없고, 클라이언트에 불필요한 데이터를 전송하지 않습니다.

단점

  1. 서버 부담 증가:
    • 모든 세션 데이터를 서버가 저장하고 관리하므로, 서버 자원이 소모됨. 사용자 수가 증가할수록 세션 관리에 따른 서버 부하가 커질 수 있습니다..
  2. 확장성 문제:
    • 세션은 서버에 저장되기 때문에, 서버 확장(로드 밸런싱)이 어려워질 수 있습니다. 여러 서버가 세션 데이터를 공유해야 하는 경우, 별도의 세션 저장소(redis 같은)를 설정해야 하며, 복잡성이 증가합니다.

쿠키 - 세션 : 헷갈리지 말아야 할 것들

  1. 저장 위치
    • 쿠키: 클라이언트(브라우저)에 저장됩니다. 브라우저가 닫혀도 만료 시간이 설정된 경우 쿠키는 유지될 수 있습니다.
    • 세션: 서버에서 저장됩니다. 클라이언트에는 세션 ID만 쿠키로 저장되며, 실제 데이터는 서버에 존재합니다.
  2. 데이터 저장 방식
    • 쿠키: 이름-값 쌍으로 텍스트 데이터만 저장 가능합니다. 클라이언트가 데이터를 직접 접근, 수정할 수 있습니다.
    • 세션: 서버가 세션 ID를 통해 복잡한 데이터 구조나 상태를 저장하고 관리합니다. 클라이언트는 세션 데이터에 직접 접근하지 못합니다.
  3. 보안성
    • 쿠키: 클라이언트에 저장되므로 보안 위험이 높습니다. 민감한 정보를 직접 쿠키에 저장하면 탈취 또는 변조될 수 있습니다.
    • 세션: 클라이언트에는 세션 ID만 전달되고, 중요한 데이터는 서버에서 관리되기 때문에 보안성이 더 높습니다.

Springboot 세션 사용법

* 세션 생성(얻어오기). 세션은 HttpServletRequest의 getSession() 메서드를 사용하여 얻을 수 있음. 세션이 존재하지 않는 경우, 새로운 세션이 생성. 기존 세션만 얻고자 한다면 request.getSession(false)를 사용하면 된다.

HttpSession session = request.getSession();

 

 

* 세션 속성 관리

 

1. setAttribute(String, Object): 키와 값을 사용해 세션 속성을 생성하거나 대체.

session.setAttribute("attributeKey", "Sample Value");

 

 

2. getAttribute(String): 주어진 이름(키)으로 속성 값을 읽을 수 있음.

session.getAttribute("attributeKey");

 

 

3. removeAttribute(String): 주어진 이름의 속성을 제거.

session.removeAttribute("attributeKey");

 

 

4. 사용자가 로그아웃할 때 세션의 모든 데이터를 무효화하려면 invalidate() 메서드 사용.

session.invalidate();

Ref. https://www.baeldung.com/java-servlet-cookies-session