HTTP는 hyper text transper protocol의 약자이다. 즉 하이퍼 텍스트를 주고받기 위한 규약을 의미한다.
HTTP의 특징
에는 다음과 같은 것들이 있다.
HTTP는 비연결성 프로토콜이며 무상태성을 띤다. 따라서 HTTP는 연결을 유지하지 않은 채 요청(request)와 응답(response)를 처리하고, 응답을 해준 후에는 연결을 끊어버린다(비연결성). 또한 HTTP는 이전 연결에 대한 정보를 유지하고 있지 않다(무상태성).
그렇기 때문에 HTTP 통신은 자원의 낭비를 줄이고 성능을 높일 수 있었지만, 서로 다른 요청 간 상태를 유지시켜 줄 수 없다. 따라서 상태 유지를 위한 별도의 수단으로 쿠키나 세션(혹은 URL 재작성)을 이용해야한다.
쿠키
는 클라이언트
에 데이터를 저장하는 방법이다.
쿠키를 자바에서 구현하는 방법은 아래와 같다.
Cookie cookie = new Cookie("key", "value");
response.addCookie(cookie);
Cookie cookies[] = request.getCookies(); // 쿠키는 여러개이기 때문에
cookie.setMaxAge(0); // 쿠키 유효기간 만료시킴 -> response.addCookie를 통해 다시 쿠키를 보내서 업데이트 시켜줘야함
세션
은 서버
에 데이터를 저장하는 방법이다. 세션의 경우, 데이터 자체는 서버 쪽에 저장해두고, 세션 아이디만을 클라이언트에 보내서 클라이언트는 이 아이디를 쿠키에 저장해둔다.
JSP에는 session이라는 내장 객체가 있기 때문에 아래와 같이 바로 사용해줄 수 있다.
String str = (String)session.getAttribute("ID"); // object 타입을 리턴하므로 캐스팅 필요
session.setAttribute("key", "value");
session.removeAttribute("ID"); // 세션을 만료x. 세션에 있는 데이터 중 일부 데이터 삭제
session.invalidate(); // 세션 만료 시킴
그러나 service 클래스 등 일반 자바 코드(Servlet 포함)에서 세션을 다룰 경우 아래와 같이 request 객체에서 getSession 메서드를 통해 session 객체를 구해줘야 한다.
HttpSession session = request.getSession();
뷰에서 비즈니스 로직이 길어지는 것은 지양해야하기 때문에, 대부분의 경우 위와 같이 session 객체를 구한 후 사용해준다.