Cookie 와 Session

무삭이의 개발일지·2023년 5월 22일
0

Cookie와 Session에 대해 알아보자 :)

: HTTP는 기본적으로 "무상태(stateless)"와 "비연결성(connectionless)" 특성을 가지고 있다. 이는 HTTP 프로토콜 자체가 클라이언트의 상태를 유지하지 않고 각각의 요청과 응답이 독립적으로 처리되는 것을 의미한다.

그럼 왜 Stateless로 만들었을까? 그냥 유지 시키면 간편한데
: 만약 엄청나게 많은 사람들이 한 사이트에 접속한다고 생각해보자. 그 사이트는 그 많은 사람들을 다 어떻게 수용할 수 있을까? 많은 사용자에게 서비스해야 하는 서버는 자원을 효과적으로 사용하기 위해 요청에 대한 응답을 하고 나면 연결을 해제하고 사용자 정보를 유지 하지 않도록 기본 설계되어 있다. 아마 그 많은 사람들을 stateful하게 유지 하면서 수용하게 된다면 성능 문제, 확장성 문제, 결함 내성 문제가 발생할 수 있다. 그렇기 때문에 Stateless로 유지하면서 다른 방식으로 사용자의 정보를 저장한다.

그 때 사용하는 것이 바로 쿠키다. 쿠키는 클라이언트 측에 사용자의 정보를 저장하는 작은 데이터 조각이다. 주로 사용자의 상태 정보나 선호 설정과 같은 데이터를 저장하는데 사용된다.('오늘 하루 팝업 보지 않기' 와 같은 기능을 수행하게 하려면 쿠키를 통해 가능하다.)
클라이언트가 처음 접속하면 서버는 쿠키를 서버에서 생성해 응답메시지 헤더에 쿠키를 포함해서 전달한다. 이때 쿠키는 일반적으로 JSESSIONID라는 이름으로 만든다. 클라이언트는 쿠키를 웹 브라우저에 저장한다. 클라이언트는 서버에 요청을 보낼 때마다 해당 쿠키를 함께 전송하고, 서버는 이를 통해 사용자를 식별한다.

쿠키는 유효 시간을 설정할 수 있으며, 설정하지 않았다면 브라우저가 종료될 때까지만 유효하다. 쿠키는 일반적으로 사용자의 개인 정보를 포함하지 않고, 주로 식별자나 세션 ID와 같은 정보를 저장한다. 그러나 쿠키는 클라이언트 측에 저장되므로 보안에 취약할 수 있다. 그렇기 때문에 보안 강화를 위해 암호화된 쿠키를 사용하거나 민감한 정보를 서버 측에 저장하고 쿠키에는 그에 대한 식별자만 저장하는 방법을 고려해야한다!!

Session(HTTPSession)

Session(세션) 또한 쿠키와 마찬가지로 클라이언트와 서버 간의 상태 정보를 저장하기 위해 사용된다. 쿠키가 클라이언트 측에 정보가 저장된다면 세션은 서버 측에 상태 정보를 저장한다. 서버는 클라이언트가 처음 접속을 하면 세션을 생성하고 이 세션에 고유한 ID를 부여한다. 이 세션을 클라이언트에게 쿠키를 통해서 전달하게 된다. 클라이언트는 받은 세션을 웹 브라우저에 저장된 쿠키 JSESSIONID에 저장하고 클라이언트가 요청을 보낼 때마다 쿠키를 보내는데, 서버는 쿠키를 받아 세션ID를 통해 사용자를 식별하고 세션을 통해 사용자의 정보 및 데이터를 확인할 수 있다.

세션은 쿠키와 달리 저장 용량과 데이터 타입에 제한이 없다. (쿠키는 저장 용량에 제한 ( 4kb ), 저장 데이터 타입은 문자열만 가능하다.) 그래서 세션은 로그인, 로그아웃, 사용자의 장바구니 정보 등과 같은 상태 정보를 유지해야 할 때 사용된다.

세션의 유효 시간은 일반적으로 브라우저 종료시 세션이 만료되거나, 사용자가 로그아웃을 하는 경우 종료된다. 세션은 서버 측에 저장되기 때문에 클라이언트가 종료되더라도 세션은 유지된다. 이는 클라이언트가 재접속시 이전의 세션을 계속 사용할 수 있도록 한다.

하지만 세션은 서버 측에 저장되므로 서버의 메모리를 사용하게 되고 많은 수의 사용자를 수용해야할 사이트에서는 세션 관리에 각별히 신경 써야 한다. 보안 측면에서도 세션에 중요한 개인 정보를 저장할 경우 암호화를 고려해야한다!!

profile
No. Try not. Do or Do not. There is no try.

0개의 댓글