ServerApp + let = Servlet 이다.
즉, Web 서버는 작은 서버 알갱이들로 이루어진 전체이다.
HttpSession, ServletRequest 보관소는 다르다.
v3은 ServletRequest 스코프에 저장된 값이기 때문에,
해당 요청 내에서만 접근 가능하고 다른 요청과 공유되지 않는다.
Session을 공유하면 쿠키를 공유하는 것이다.
시크릿창을 이용하면 Session을 공유하지 않는 새 창을 띄울 수 있다.
포워드(인클루드)를 할 때 서블릿이 받은 파라미터를
Servlet에도 전달한다. 때문에 포워드/인클루드 서블릿들은 응답을 완료할 때 까지
이 객체들을 공유한다.
★ 정리
즉, 기본적으로 Session은 해당 브라우저에서 공유가 되고 Sevlet은 해당 응답에 대해서만
공유되고, 다른 Servlet 요청에 대해서는 공유되지 않지만 포워드/인클루드를 통한 Servlet은
해당 응답을 완료할 때까지 객체를 공유한다.
● 세션 (Session) 공유:
세션은 해당 브라우저(사용자 세션) 내에서 데이터를 공유합니다.
같은 사용자가 여러 요청을 보낼 때 세션을 통해 데이터를 유지하고 공유할 수 있습니다.
● 서블릿 (Servlet) 공유:
서블릿은 해당 요청과 응답 범위 내에서 데이터를 공유합니다.
다른 요청 사이에서는 데이터를 공유하지 않으며, 각 요청의 생명주기 동안에만 데이터가 유지됩니다.
● 포워드/인클루드를 통한 서블릿 공유:
포워드와 인클루드된 서블릿은 같은 요청 범위 내에서 데이터를 공유합니다.
원래 요청과 함께 같은 ServletRequest 및 ServletResponse 객체를 공유하며,
응답이 클라이언트로 전송될 때까지 공유가 유지됩니다.
#쿠키
쿠키와 세션은 웹 애플리케이션에서 사용자 상태 및 데이터를 유지하고 관리하는 데 사용되는 메커니즘입니다.
각각의 장단점과 사용 사례가 있습니다.
**쿠키 (Cookies):**
쿠키는 작은 데이터 조각을 클라이언트의 웹 브라우저에 저장하는 방식입니다. 주로 사용자 선호 설정, 사용자 로그인 정보, 장바구니 내용 등을 유지하고 전송할 때 활용됩니다. 쿠키는 클라이언트 측에서 저장되기 때문에, 서버와의 통신이 필요 없이 브라우저에서 사용됩니다.
**쿠키의 장점:**
- 클라이언트 측에서 데이터를 저장하고 관리하기 때문에 서버 리소스를 아낄 수 있습니다.
- 간단한 구현과 사용 방법을 가지고 있어 쉽게 활용할 수 있습니다.
- 만료 기간을 설정하여 일정 기간 동안 유지할 수 있습니다.
**쿠키의 단점:**
- 쿠키의 용량은 제한적이며, 보안상의 이유로 중요한 정보를 저장하기에는 적합하지 않을 수 있습니다.
- 사용자가 쿠키를 비활성화하거나 삭제할 수 있기 때문에 항상 데이터의 유지를 보장할 수 없습니다.
**쿠키와 세션의 차이:**
- 저장 위치: 쿠키는 클라이언트에 저장되고, 세션은 서버에 저장됩니다.
- 용량 제한: 쿠키는 용량이 제한적이지만, 세션은 일반적으로 더 많은 데이터를 저장할 수 있습니다.
- 보안: 세션이 쿠키보다 보안 측면에서 더 강력합니다. 중요한 정보를 저장할 때는 세션이 더 적합합니다.
- 속도: 세션은 서버 측에서 관리되므로 서버에 부하가 발생할 수 있지만, 쿠키는 클라이언트 측에서 관리되기 때문에 서버 부하가 줄어듭니다.
쿠키와 세션은 상황에 따라 적절하게 선택하여 사용하는 것이 중요합니다. 보안과 성능 요구사항을 고려하여 적절한 메커니즘을 선택하고 구현하는 것이 좋습니다.
쿠키 사용 범위 지정
예시)
v1, v2는 경로가 해당되지 않기 때문에
v3 의 경로에만 해당되어 v3의 값만 쿠키가 저장되어 출력된다.
**세션 (Session):**
세션은 서버 측에서 사용자의 상태 및 데이터를 관리하는 방식입니다.
세션은 서버에 데이터를 저장하고 클라이언트에는 세션 식별자를 쿠키 등으로 전달하여 세션을 관리합니다.
주로 로그인 상태, 사용자 데이터, 장바구니 등을 유지하고 전송할 때 활용됩니다.
**세션의 장점:**
- 서버 측에서 데이터를 관리하기 때문에 쿠키보다 보안성이 좋습니다.
- 용량의 제한이 없고 중요한 정보를 저장하기에도 적합합니다.
**세션의 단점:**
- 서버 리소스를 사용하므로 동시 접속자 수가 많을 경우 부하가 발생할 수 있습니다.
- 세션 관리를 위한 식별자를 클라이언트에게 전달해야 하므로 약간의 오버헤드가 발생할 수 있습니다.
쿠키가 없다면 세션 로그인이 불가능하다.
왜냐하면 쿠키에 세션ID를 보관하기 때문이다.
이미 존재한다면, 세션ID를 쿠키에 다시 저장하지는 않는다.
# 세션 식별자를 쿠키로 전달하는 과정
1. 클라이언트가 서버로 최초의 요청을 보낸다.
2. 서버는 해당 클라이언트에 대한 새로운 세션을 생성하고 세션 식별자(session ID)를 생성한다.
3. 서버는 생성한 세션 식별자를 쿠키로 설정하여 클라이언트에게 응답한다.
4. 클라이언트는 이 세션 식별자를 쿠키로 저장한다.
5. 이후 클라이언트가 서버로 요청을 보낼 때마다 저장한 쿠키의 세션 식별자를 함께 전달한다.
6. 서버는 전달받은 세션 식별자를 사용하여 해당 클라이언트의 세션 상태를 관리하고 처리한다.