HTTP는 비상태성(Stateless) 프로토콜로 상태 정보를 유지하지 않는다. 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 큰 장점이지만 통신할 때마다 매번 연결 설정을 해야 하며, 이전 요청과 현재 요청이 같은 사용자의 요청인지 알 수 없다는 단점이 존재한다. 쿠키와 세션을 통해서 HTTP의 Stateless한 문제점을 해결할 수 있다.
expires
속성을 정의하여 만료 날짜를 지정할 수 있다.import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
public class CookieExample {
public void createCookie(HttpServletResponse response) {
Cookie cookie = new Cookie("username", "john_doe");
cookie.setMaxAge(60 * 60 * 24); // 1 day
response.addCookie(cookie);
}
public void readCookie(javax.servlet.http.HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
System.out.println("Username: " + cookie.getValue());
}
}
}
}
}
import javax.servlet.http.HttpSession;
public class SessionExample {
public void createSession(javax.servlet.http.HttpServletRequest request) {
HttpSession session = request.getSession();
session.setAttribute("username", "john_doe");
}
public void readSession(javax.servlet.http.HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
String username = (String) session.getAttribute("username");
if (username != null) {
System.out.println("Username: " + username);
}
}
}
}
쿠키와 세션은 HTTP의 비상태성 문제를 해결하는 데 유용한 도구이다. 쿠키는 클라이언트에 저장되고 서버 자원을 사용하지 않지만, 보안에 취약하고 저장 용량이 제한적이다. 반면 세션은 서버에 저장되어 보안이 우수하고 용량 제한이 없지만, 서버 자원을 사용하게 된다. 상황에 따라 적절한 방법을 선택하여 사용해야 한다.