본문 바로가기
CS

쿠키와 세션

by kriorsen 2022. 8. 24.

1. 쿠키(Cookie)의 정의

쿠키는 서버가 클라이언트에 저장하는 작은 데이터 파일로 최대 4KB의 내용을 담을 수 있으며 key와 value의 형태로 정보를 저장한다는 특징이 있습니다.

 

2.HTTP의 특징과 쿠키를 사용하는 이유

HTTP는 클라이언트와 서버가 서로 정보를 주고받기 위해 필요한 통신 규약으로 무상태성(Stateless)과 비연결성(Connectionless)이라는 특징을 가지고 있습니다. 

 

비연결성은 하나의 요청을 보낸 후 그 요청에 대한 응답이 돌아오면 즉시 연결을 끊어버리는 특성을 말하며 무상태성은 서버가 클라이언트의 상태를 보존하지 않는 것입니다.

 

HTTP 무상태성

왼쪽 대화와 달리 오른쪽 예시에서 영화관 직원은 손님이 이전에 했던 요청을 기억하지 못하고 계속 추가적인 정보를 필요로 하고 있는 것을 볼 수 있습니다. 위 상황을 서버와 클라이언트에 대입해 보았을 때 HTTP의 특성 때문에 서버 측에서 request 메시지 간 관계 추론이  불가하기에 클라이언트에 대한 정보를 제공할 수 있는 쿠키가 필요한 것을 알 수 있습니다. 

 

3.영구 쿠키와 세션 쿠키

클라이언트에서 요청을 보낼 때 헤더에 쿠키가 없으면 서버가 쿠키를 생성하여 이를 응답으로 보내주고 사용자는 이 쿠키의 만료기간이 지나기 전까지 쿠키로 자신의 정보를 전달할 수 있습니다.

 

이때 쿠키의 만료기간은 Set-Cookie의 속성 중 expires로 설정할 수 있으며 만료일이 설정되지 않은 쿠키를 세션쿠키, 만료일이 지정된 쿠키를 영구쿠키라고 합니다. 영구 쿠키는 파일로 저장되며 만료 날짜가 지나지 않는 이상은 정보를 유지하는 반면 세션 쿠키는 브라우저 메모리에 저장되기 때문에 현재 세션이 만료되면 삭제됩니다. 

 

"현재 세션"이 끝나는 시점은 브라우저가 지정하며 대부분의 브라우저는 브라우저 창이 닫힌 것을 세션 종료로 간주하고 재시작 시 세션을 복원해 쿠키의 무기한 사용을 지원하는 브라우저도 존재합니다.

 

4.쿠키의 보안 취약점

쿠키는 클라이언트에 정보를 저장하기 때문에 통신 중 탈취를 당할 수 있고 공용 PC에서 쿠키값이 유출될 가능성도 있습니다. 중요한 정보는 세션(Session)을 이용해 서버에 저장하여 이러한 보안 취약점을 보완할 수 있습니다.

 

5.세션(Session)

쿠키의 단점을 보완한 세션은 방문자가 웹 서버에 접속해 있는 상태를 나타냅니다. 클라이언트 측에서 아이디와 비밀번호를 보내면 서버가 이 정보를 이용해 로그인이 가능 여부를 확인하고 사용자의 데이터를 DB에 저장합니다. 사용자를 위한 저장소 공간에는 각각의 고유한 아이디가 있고 이를 세션 아이디라고 칭합니다. 특정 사용자의 데이터가 담긴 공간의 아이디를 쿠키에 담아 응답을 보내주고 다음 요청부터 사용자는 이 세션아이디가 담긴 쿠키로 자신의 정보를 전달할 수 있습니다.

 

6.세션과 쿠키

쿠키는 사용자의 정보를 직접적으로 담고 있기 때문에 보안성이 낮다는 특징이 있습니다. 그럼에도 불구하고 쿠키를 사용하는 이유는 쿠키가 필요한 정보를 바로 제공하여 처리 속도가 상대적으로 빠르다는 특징이 있기 때문입니다. 세션은 서버의 처리가 필요하고 클라이언트 수에 따른 메모리 과부하 문제가 발생할 수 있기에 테마와 같은 개인 맞춤 데이터는 쿠키에 저장하고 높은 수준의 보안이 요구되는 정보는 세션을 이용해 데이터베이스에 저장하는 것이 적절합니다.