쿠키와 세션

June Lee·2021년 3월 29일
0

Web

목록 보기
1/2
post-custom-banner

HTTP란?

HTTP는 hyper text transper protocol의 약자이다. 즉 하이퍼 텍스트를 주고받기 위한 규약을 의미한다.

HTTP의 특징에는 다음과 같은 것들이 있다.

  1. 서버와 클라이언트에 의해 해석이 된다.
  2. TCP/IP를 이용한 응용 프로토콜이다.
  3. 비연결성 프로토콜이다.
  4. 무상태성(Statelessness)을 띤다.

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 객체를 구한 후 사용해준다.

profile
📝 dev wiki
post-custom-banner

0개의 댓글