일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- select
- jsp
- CSS
- POI
- 개념
- jQuery
- spring
- Oracle
- 과정평가형
- web.xml
- 태그
- eGov
- json
- 정의
- controller
- JVM
- array
- javascript
- 함수
- 암호화
- TO_DATE
- mybatis
- html
- input
- 오류
- Java
- sql
- Ajax
- was
- eGovFramework
- Today
- Total
web developer
[java] 세션(Session)이란? 본문
세션(Session)이란?
세션은 웹 애플리케이션에서 사용자가 서버와의 상호작용 상태를 유지하기 위해 사용되는 서버 측 저장소입니다. HTTP는 기본적으로 상태를 유지하지 않는(stateless) 프로토콜이기 때문에, 매번 요청이 서버에 도착할 때마다 서버는 이전 요청이 무엇이었는지 기억하지 못합니다. 이를 해결하기 위해 세션과 쿠키 같은 메커니즘을 사용하여 사용자 상태를 유지합니다.
1. 세션의 주요 개념
1-1. 세션 생성 및 식별
웹 애플리케이션은 사용자가 사이트에 처음 접속할 때 세션을 생성하고, 서버는 고유한 세션 ID를 할당합니다. 이 세션 ID는 클라이언트(브라우저)에 쿠키로 저장되거나 URL 리라이터(URL Rewriting)를 통해 전달됩니다. 서버는 이후의 모든 요청에 대해 이 세션 ID를 참조하여 어떤 사용자인지 구분하고, 해당 사용자의 세션에 저장된 데이터를 참조할 수 있습니다.
1-2. 세션과 쿠키의 차이
세션은 서버에 상태 정보를 저장하는 반면, 쿠키는 클라이언트(브라우저)에 상태 정보를 저장합니다. 세션은 클라이언트 측에 쿠키 형태로 저장된 세션 ID만 필요로 하며, 실제 데이터는 서버에 저장되어 보안성이 높습니다. 쿠키는 클라이언트에 모든 데이터를 저장하므로 클라이언트 쪽에서 수정 가능성이 있어 보안에 취약할 수 있습니다.
2. 세션의 생명 주기(Lifecycle)
2-1. 세션 생성
세션은 request.getSession() 메서드를 통해 생성됩니다.
- 사용자가 처음 서버에 요청할 때 세션이 없으면 서버는 새로운 세션을 생성하고 고유한 세션 ID를 발급합니다.
- 이 세션 ID는 보통 쿠키를 통해 클라이언트에 전달되며, 브라우저가 종료되지 않는 한 계속 유지됩니다.
HttpSession session = request.getSession(); // 세션이 없으면 새로 생성
2-2. 세션 유지 및 데이터 저장
세션이 생성된 후 서버는 클라이언트와의 모든 요청에서 해당 세션을 사용하여 상태를 유지합니다.
- 사용자는 여러 요청에 걸쳐 데이터를 유지할 수 있습니다.
- 예를 들어, 로그인한 사용자 정보를 세션에 저장하면 페이지를 이동하거나 다른 작업을 하더라도 세션을 통해 사용자를 식별할 수 있습니다.
session.setAttribute("username", "Alice"); // 세션에 사용자 정보 저장
2-3. 세션 종료
세션은 특정 조건에서 만료됩니다:
- 세션 타임아웃: 서버에서 설정한 일정 시간이 지나면 세션이 자동으로 만료됩니다. 보통 사용자가 아무런 활동을 하지 않으면 일정 시간이 지나고 세션이 종료됩니다.
- 명시적 세션 종료: 프로그래머가 session.invalidate()를 호출하면 세션이 강제로 종료됩니다. 예를 들어, 사용자가 로그아웃할 때 세션을 무효화하는 것이 일반적입니다.
- 서버 종료: 서버가 재시작되거나 셧다운되면 모든 세션이 종료됩니다.
session.invalidate(); // 세션 강제 종료
3. 세션 관리 메서드들
3-1. request.getSession()
request.getSession() 메서드는 서버에 현재 클라이언트와 연관된 세션을 요청합니다. 세션이 존재하지 않으면 새로운 세션을 생성하고 반환합니다. 반대로 request.getSession(false)를 사용하면, 세션이 없을 때 새로 생성하지 않고 null을 반환하게 할 수 있습니다.
HttpSession session = request.getSession(); // 세션이 없으면 생성
이 메서드는 세션 객체에 데이터를 저장하는 역할을 합니다. 데이터는 이름과 값으로 매핑됩니다. 이를 통해 한 사용자의 여러 요청에 걸쳐 데이터를 유지할 수 있습니다.
session.setAttribute("username", "Alice"); // 세션에 사용자 이름 저장
setAttribute로 세션에 저장된 값을 가져올 때 사용합니다. 예를 들어, 로그인 상태에서 다른 페이지로 이동할 때 세션에 저장된 사용자 이름을 가져와 표시할 수 있습니다.
String username = (String) session.getAttribute("username"); // 세션에서 사용자 이름 가져오기
3-4. session.invalidate()
이 메서드는 현재 세션을 명시적으로 종료하는 데 사용됩니다. 세션을 무효화하면 더 이상 세션에 접근할 수 없고, 새로운 요청을 처리할 때 새로운 세션을 생성해야 합니다.
session.invalidate(); // 세션 종료
4. 세션의 장점
4-1. 상태 유지를 통한 사용자 경험 개선
세션은 로그인 정보, 쇼핑 카트 상태, 사용자 설정 등을 유지하기 위해 사용됩니다. 이를 통해 사용자는 한 페이지에서 다른 페이지로 이동할 때도 상태가 유지되어 사용자 경험이 개선됩니다.
4-2. 보안성
세션은 서버 측에 데이터를 저장하므로, 클라이언트가 직접 데이터를 수정할 수 없습니다. 이로 인해 보안성이 높습니다.
4-3. 서버 자원 효율성
세션 데이터는 서버에 저장되지만, 사용되지 않는 세션은 일정 시간이 지나면 자동으로 정리되므로 서버 자원을 효율적으로 관리할 수 있습니다.
5. 세션 사용 시 고려 사항
5-1. 메모리 사용
모든 사용자의 세션 정보는 서버에 저장되므로, 많은 사용자가 접속하는 대규모 웹 애플리케이션에서는 서버 메모리 사용량이 증가할 수 있습니다. 따라서 세션 데이터 크기를 최소화하는 것이 중요합니다.
5-2. 세션 타임아웃
세션 타임아웃 설정이 너무 짧으면 사용자가 불편해질 수 있고, 너무 길면 불필요한 자원이 사용될 수 있습니다. 적절한 타임아웃 설정이 필요합니다.
5-3. 보안
세션 ID가 유출될 경우 다른 사용자가 해당 세션에 접근할 수 있으므로, 세션 ID의 보안을 철저히 관리해야 합니다. 이를 위해 HTTPS 프로토콜을 사용하는 것이 권장됩니다.
6. 정리
- 세션은 웹 애플리케이션에서 사용자의 상태를 유지하기 위한 서버 측 저장 공간입니다.
- request.getSession()을 통해 세션을 생성하거나 가져올 수 있고, setAttribute()와 getAttribute()를 사용해 데이터를 저장하고 읽을 수 있습니다.
- 세션은 서버에 저장되므로 클라이언트 측 데이터 조작에 대한 위험을 방지하고, 상태 유지를 통해 사용자 경험을 개선하는 중요한 역할을 합니다.
'Language > Java' 카테고리의 다른 글
[java] AJAX 통신에서 Impl의 트랜잭션 예외 발생 시 예외 처리와 롤백 처리 (2) | 2024.09.24 |
---|---|
[java] try-catch를 이용한 직접 예외 처리와 @ControllerAdvice를 통한 공통 예외 처리 (1) | 2024.09.19 |
[java] JSON 데이터 파싱 (1) | 2024.09.10 |
[java] custom 페이징 처리와 페이지 네비게이션 구현 (0) | 2024.08.09 |
[java] SHA-256 암호화 [단방향] (0) | 2024.07.23 |