세션이란 무엇인가?
- 세션은 서버에서 유지되는 사용자의 상태 정보를 의미합니다.
왜 세션을 써야 하는가? - 인증의 필요성
- HTTP 프로토콜의 특징으로 인해 필요합니다.
- 비연결성 : 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊는 방식입니다.
- 무상태 : 커넥션이 끊는 순간 이후로 어떠한 상태정보를 유지하지않는 특성입니다.
서버는 클라이언트 기억하지 못함 -> 계속 기억시켜 줌 :: 이것이 인증
세션 장단점
장점
- 보안성:
- 세션은 클라이언트 측에 민감한 데이터를 저장하지 않고, 서버에서만 데이터를 관리하므로 보안성이 높습니다. 쿠키에는 세션 ID만 저장되고, 실제 데이터는 서버에서만 접근 가능합니다..
- 데이터 무결성:
- 세션 ID가 서버에서 관리되기 때문에, 클라이언트가 데이터를 조작할 수 없음. 이를 통해 데이터 무결성이 보장됩니다..
- 서버에서 관리:
- 세션 데이터를 서버에서 관리하므로, 서버 측에서 세션을 무효화하거나 삭제할 수 있음. 이로 인해 로그아웃 처리나 세션 만료 관리가 용이합니다.
- 데이터 용량 문제 없음:
- 서버에서 데이터를 관리하기 때문에 저장 용량에 제한이 없고, 클라이언트에 불필요한 데이터를 전송하지 않습니다.
단점
- 서버 부담 증가:
- 모든 세션 데이터를 서버가 저장하고 관리하므로, 서버 자원이 소모됨. 사용자 수가 증가할수록 세션 관리에 따른 서버 부하가 커질 수 있습니다..
- 확장성 문제:
- 세션은 서버에 저장되기 때문에, 서버 확장(로드 밸런싱)이 어려워질 수 있습니다. 여러 서버가 세션 데이터를 공유해야 하는 경우, 별도의 세션 저장소(redis 같은)를 설정해야 하며, 복잡성이 증가합니다.
쿠키 - 세션 : 헷갈리지 말아야 할 것들
- 저장 위치
- 쿠키: 클라이언트(브라우저)에 저장됩니다. 브라우저가 닫혀도 만료 시간이 설정된 경우 쿠키는 유지될 수 있습니다.
- 세션: 서버에서 저장됩니다. 클라이언트에는 세션 ID만 쿠키로 저장되며, 실제 데이터는 서버에 존재합니다.
- 데이터 저장 방식
- 쿠키: 이름-값 쌍으로 텍스트 데이터만 저장 가능합니다. 클라이언트가 데이터를 직접 접근, 수정할 수 있습니다.
- 세션: 서버가 세션 ID를 통해 복잡한 데이터 구조나 상태를 저장하고 관리합니다. 클라이언트는 세션 데이터에 직접 접근하지 못합니다.
- 보안성
- 쿠키: 클라이언트에 저장되므로 보안 위험이 높습니다. 민감한 정보를 직접 쿠키에 저장하면 탈취 또는 변조될 수 있습니다.
- 세션: 클라이언트에는 세션 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();
'스프링 > 개념' 카테고리의 다른 글
의존성 주입(DI)과 주입 방식 (0) | 2024.09.30 |
---|---|
@Data 어노테이션에 관하여 (0) | 2024.09.30 |
Cookie 와 Cookie Login (0) | 2024.09.23 |
엔티티(Entity) - 왜 기본 생성자가 필요할까? (0) | 2024.09.10 |
엔티티 매니저와 영속성 컨텍스트 (0) | 2024.09.10 |