클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

쿠키와 세션 1 - 쿠키의 탄생에서 죽음에 이르는 모든 과정 본문

웹 · 앱 개발/JSP & Servlet

쿠키와 세션 1 - 쿠키의 탄생에서 죽음에 이르는 모든 과정

huenuri 2024. 8. 29. 07:32

다음으로 공부할 단원은 쿠키와 세션이다. 수업 영상은 참 많은데 실제로 공부해보면 그렇게 공부할 건 많지 않은 것 같다. 쿠키와 세션 부분도 강의 영상이 많이 없어서 이 부분도 책을 참고하며 학습을 진행해보려고 한다.


 

 

 

 

쿠키(cookie)

우리가 일상적으로 사용하는 인터넷 서비스에서는 연결이 지속된다. 연결이 지속된다는 말은 온라인 쇼핑몰에서 찜해 놓은 상품 목록을 다른 웹 사이트를 방문했다 돌아와도 여전히 확인할 수 있다는 의미이다. 이렇듯 인터넷 서비스는 연결이 지속되어야 사용자들이 편리하게 웹사이트를 사용할 수 있다.

인터넷에서 사용 가능한 웹 서비스로는 FTP, HTTP 등이 있다. 이들 서비스는 일정한 규칙을 준수해야 하는데 이를 프로토콜이라고 한다.

 

FTP(File Transfer Protocol)는 원격 서버 사이에 파일을 교환하기 위한 TCP/IP 프로토콜이고, HTTP(Hyper Text Transfer Protocol)는 HTML 문서의 송수신을 위해 사용하는 프로토콜이다.

웹 서비스를 가능하게 하는 프로토콜 중 가장 핵심적인 HTTP 프로토콜은 비 연결 지향형 통신 프로토콜이다. 이 통신 방법은 클라이언트가 서버에 정보를 요청하면 웹 서버가 해당 페이지를 클라이언트에게 전송(응답)한 후 연결을 끊는다. 또 정보를 요청하면 서버는 이전 정보를 기억하지 않고 새로운 연결을 만든 후 응답한다. 이 과정을 과정을 반복하는데, 웹 서버는 이전에 전송한 정보를 전혀 기억하지 못하므로 무 상태 서버라고 한다.

 

 

 

HTTP 프로토콜은 사용자의 요청에 대한 응답만 한다. 쇼핑몰 같이 쇼핑을 하다가 마음에 드는 물건을 쇼핑 카트에 담았다가 언제든지 마음에 들지 않으면 취소할 수 있는 정 보들을 서버에 저장하는 것은 서버의 부하를 높여 웹 서비스의 속도를 느리게 하는 원인이 될 수 있다.이러한 HTTP의 비 연결지향형 서비스의 단점을 극복하기 위해 쿠키를 사용한다.

쿠키는 서버가 아닌 클라이언트 컴퓨터의 하드 디스크에 사용자의 정보를 저장하기 때문에 서버의 동작에 무리를 주지 않으면서 사용자의 정보를 적절하게 사용할 수 있다. 서버가 쿠키를 클라이언트에 저장해두면 쿠키에 대한 정보를 필요로 하는 웹 페이지가 웹 서버에 요청될 때 저장해놓은 쿠키에 대한 정보를 웹 서버에 다시 건네준다. 쿠키는 사용자측에 대한 정보를 보관해 두었다가 웹 서버의 요청에 의해 그 정보를 원하는 순간 사용할 수 있게 한다.

 

쿠키는 클라이언트에 저장된 적은 양의 정보이다. 크기는 4KB 이하로 제한되어 있고 300개까지의 데이터 정보 배열을 저장할 수 있다. 즉 쿠키를 사용할 수 있는 최대 용량은 4KB X 300개 = 1.2MB가 된다. 쿠키의 크기는 4KB 이하로 제한되어 있으므로 작은 정보 형태로 저장되고 오래된 정보는 자동으로 삭제된다.

참고로 이미지 정보는 대부분 용량이 크기 때문에 경로만 저장한다. 쿠키를 이용하기 위해서는 response 객체를 사용해서 쿠키 정보를 클라이언트에 저장해두었다가 이를 request 객체를 사용하여 가져온다.

 

쿠키를 저장하는 방법

  1. 쿠키 객체를 생성한다.
  2. 쿠키에 속성 값을 설정해준다.
  3. response 객체의 addCookie() 메소드를 호출하여 쿠키를 추가한다.

쿠키는 클래스 형태로 제공되므로 쿠키 객체를 생성한다. 생성할 때 생성자가 호출된다. 쿠키 생성자는 다음과 같이 두 개의 인자를 갖는다. 첫 번째 인자에는 쿠키의 이름을 지정하고 두 번째 인자에는 쿠키의 값을 설정한다.

Cookie(java.lang.String name, java.lang.String value)

 

쿠키에 저장할 값이 여러 개일 수 있기 때문에 이를 이름으로 구분하여 저장해둔다. 다음은 간단한 메시지를 testCookie란 이름으로 쿠키에 저장해두기 위해서 쿠키 객체를 생성하는 예이다.

Cookie info = new Cookie("testCookie", "I am First Cookie!");

 

Cookie 객체가 생성되었으면 쿠키 관련 메소드를 사용할 수 있다. 쿠키 객체가 info로 선언되었으면 info.쿠키관련메소드()를 호출하면 된다.

JSP에서 쿠키를 사용하는데 자주 사용되는 메소드를 정리한 표이다. 쿠키 관련 메소드는 크게 두 가지로 나뉜다. 쿠키에 새로운 값을 설정하는 set으로 시작하는 메소드와 쿠키에 설정된 값을 알아내는 목적으로 사용하는 get으로 시작하는 메소드이다.

 

 

 

이렇게 생성한 쿠키 객체의 정보는 클라이언트 측에 보내 저장해 두어야만 나중에 다시 사용할 수 있게 된다. 그러기 위해서는 response 객체에 쿠키 객체를 추가하면 된다.

response.addCookie(info);

 

 

 

쿠키를 생성하는 JSP

새로운 웹 프로젝트를 만든 후 여기에 쿠키를 생성하기 위한 페이지를 만든다.

 

 

 

쿠키가 제대로 생성되었는지 확인하려면 개발자 모드에 들어가서 application 탭을 선택한다. 그리고 쿠키 창에 들어가면 이와 같은 화면이 뜬다. 여기 보면 age, id, pwd라는 이름의 쿠키가 제대로 생성이 되었음을 볼 수 있다. 


 

 

쿠키 생성하기 실습

 

 

이 실습에서도 쿠키가 잘 만들어졌음을 볼 수 있다. 이번에는 서버가 클라이언트로부터 쿠키의 정보를 얻어오는 방법에 대해서 알아보기로 하자. 클라이언트에 설정된 쿠키를 이 읽어오기 위해서는 다음과 같은 단계를 거친다.

  1. 쿠키 객체를 얻어온다.
  2. 쿠키 객체에 설정된 값을 알아낸다.

request 객체의 getCookie() 메소드를 사용하면 클라이언트에 설정된 모든 쿠키 객체들을 얻어올 수 있다. 클라이언트에 설정된 쿠키가 여러 개라면 이를 다 제어할 수 있어야 하므로 getCookies 메소드의 리턴값은 배열 형태이다.

Cookie[] cookies = resquest.getCookies();

 


 

 

 

설정된 모든 쿠키를 얻어와 출력하기

 

 

조건을 만들어서 쿠키가 없을 때는 없다고 출력하도록 코드를 수정해보았다.

 

 

조금 전에 만든 쿠키까지 잘 출력이 되고 있다.


 

 

 

 

쿠키를 출력하는 실습

 

 

특정 쿠키를 더 이상 사용하지 못하게 하려면 쿠키의 유효기간을 만료시켜야 한다. 쿠키를 사용할 수 있는 유효ㅣ깐을 결정하는 메소드인 setMaxAge()에 유효 기간은 0으로 설정하면 만료된다.


 

 

 

id 쿠키 삭제하기

 

 

id 쿠키가 삭제되었음을 확인할 수 있다. 나머지는 그대로 있다.


 

 

 

쿠키를 진짜 삭제하는 실습

 

 

쿠키가 삭제되었음을 볼 수 있다. 이 코드는 새로운 쿠키 객체를 생성한 후 그 만료 기간을 0으로 설절한다. 그러면 쿠키가 생기자마자 삭제하게 되는 것이다. 이 방법을 사용하는 이유는 쿠키를 삭제하는 방법이 사실상 존재하지 않기 때문이다. 쿠키는 사용자가 임의로 선택해서 삭제하는 수밖에 없다. 가끔씩 보면 인터넷 쿠키 삭제가 있는데 이런 걸 말하는 것이다.

 


 

학습을 마치고

쿠기 관련 학습은 이것이 끝이다. 쿠키를 생성하고 출력하고 삭제하는 과정에 대해서 학습해보았다. 별로 어렵지 않은 내용이었지만 공부에 다시 집중하기까지 시간이 좀 걸렸다. 

이제 공부할 시간이 1시간밖에 남지 않았지만 세션에 대해서 공부해볼 것이다.