#쿠키와 세션의 차이

Programming 2017. 10. 25. 22:32

쿠키와 세션은 '데이터를 저장한다'는 개념이 비슷하고, '클라이언트의 요청에 따른 서버의 아이디 발급'이라는 면에서 생성 과정도 비슷하다. 심지어 둘 다 클라이언트 쪽에 파일의 형태로 저장되기도 한다. 

그러나 둘의 용도는 그 특징을 봤을 때 차이점이 분명하다.

쿠키의 경우에는 데이터의 관리 여부가 서버에서 보장되지 않는다. 서버는 그저 데이터를 클라이언트 쪽에 던질 뿐이고, 데이터의 지속성 여부나 정합에 관해 어떠한 정보도 제공하지 않는다. 따라서 쿠키는 유용한 '정보'가 될 수도 있지만, 그저 의미없는 한낯 '데이터'에 불과할 수도 있다.

그러나 세션은 이미 지속성과 정합이 보장되어야 한다. 서버에서는 클라이언트를 별도 고유 아이디(session-id)로 관리하고, 이것에 '지속시간'을 부여함으로써 정합을 보증한다. (물론 요즘에는 서버에 식별 데이터를 따로 저장하지 않고 JWT(JSON Web Token) 같이 헤더를 통해 식별 데이터를 주고 받기도 하지만, 이는 식별 데이터가 탈취되어 보안 문제가 발생할 수도 있다.)

그래서 세션이 쿠키와 차별되는 대표적인 특징이 바로 '식별성'과 '지속시간'이라 할 수 있으며, 비록 세션도 데이터의 저장이라는 기능을 수행하기는 하지만, 쿠키와는 달리 데이터의 '영속성'은 강 건너 불구경 하듯 거의 신경쓰지 않는다고 보면 된다. 그렇기 때문에 세션에 데이터를 저장하겠다는 행위는 그 자체가 이미 틀린 행위가 된다. 애초에 '저장'은 '삭제'와는 대척점에 있는 것인데, 시간이 지나면 데이터가 증발되는 세션에 데이터를 둔다는 건 아무리 봐도 크게 어색하다. 그리고 개인정보 같이 민감한 데이터는 식별성을 바탕으로 아무나 접근할 수 없도록 해야 하니, 쿠키에 저장하는 것은 금고에 돈을 넣어두고 문을 닫지 않은 격이라고 할 수 있다. 

 

그렇다면 세션을 영구적으로 해버린다?

아아.. 이러지 말자. 이런 걸로 장난치지 말자. 영구 세션은 세션이 아니다. 세션의 목적은 클라이언트와 서버의 연결을 관리하기 위함인데, 연결이 절대 끊기지 않는다면 그건 세션이 아니다.

그렇다면 영구 쿠키는!? 

이것도 좀 웃긴 얘기다. 쿠키 자체가 이미 파일의 형태이므로 애초에 영구를 가정한다. 이 덕분에 서버에서 받은 정보를 쿠키에 기록해두고 다음에 다시 동일한 정보를 서버에 요청할 필요가 없어 트래픽을 줄일 수 있다. 이 쿠키가 일정 시간이 지난 후에 지워진다는 것은 그건 개발할 때의 정책 문제이긴 하지만, 사실상 쿠키는 그 특징을 고려하였을 때 애초부터 시간이라는 개념을 끼워 넣을 필요가 없다. 굳이 넣어야 한다면 말리지는 않겠지만, 보통 이런 경우라면 개인정보 같이 민감한 데이터가 대부분일 것이다. 그러니까 보안 이슈가 있는 정보라면, 쿠키로 가져다 쓸 때 보안 문제로 골머리가 좀 앓아야 할 것이다.

브러우저에서는 세션 아이디를 쿠키에 저장한다는데?

그래도 된다. 어차피 세션 아이디라는 게 시간이 지나면 가치가 사라지는 '휘발성' 정보이기 때문이다. 쿠키에 뭐가 적혀 있든 '정보'가 의미 없다면 아무 짝에 쓸모없는 '데이터'에 불과하다.

 

아래는 ChatGPT의 설명.

쿠키(Cookie)와 세션(Session)은 모두 웹 개발에서 사용되는 개념으로, 사용자와 웹 서버 간의 상태를 유지하고 인증 등의 작업을 수행하는 데 사용됩니다.

하지만 쿠키와 세션은 목적과 동작 방식에서 차이가 있습니다.

쿠키는 클라이언트 측(사용자의 브라우저)에 저장되는 작은 데이터 파일입니다. 쿠키는 웹 서버에서 생성되어, 사용자가 웹 사이트를 방문할 때 브라우저에 저장됩니다. 이후 사용자가 동일한 웹 사이트를 방문할 때, 브라우저는 쿠키를 웹 서버에 전송하여 이전에 설정된 상태나 정보를 가져올 수 있습니다.

세션은 서버 측에서 관리되는 상태 정보입니다. 클라이언트가 웹 서버에 접속하면, 서버는 해당 클라이언트를 위한 세션을 생성합니다. 이후 클라이언트가 서버로 요청을 보낼 때마다, 서버는 해당 세션 정보를 참조하여 클라이언트에 대한 상태 정보를 유지하고 관리합니다. 세션은 일정 시간이 지나면 자동으로 삭제됩니다.

쿠키와 세션은 각각의 장단점이 있기 때문에 상황에 따라 적절한 방법을 선택하여 사용해야 합니다. 예를 들어, 쿠키는 클라이언트 측에서 관리되기 때문에 서버 부하를 줄일 수 있습니다. 반면에 세션은 서버 측에서 관리되기 때문에 보안이 강화되고, 클라이언트 측에서 쿠키를 삭제하는 경우에도 상태 정보를 유지할 수 있습니다.

둘을 관리의 주체에 따라 설명하는데, 아아.. 이 설명 별로 와닿지는 않는다. 개발자들이 이 설명을 얼마나 깊이 이해할 수 있을까.. ㅠ 

'Programming' 카테고리의 다른 글

# 스토어드 프로그램 예외 발생 정리  (0) 2017.10.27
#대칭키와 공개키  (0) 2017.10.26
#프로세스 스케줄링  (0) 2017.10.19
#페이지 교체 알고리즘  (0) 2017.10.18
#클럭 알고리즘과 2차 기회 알고리즘  (1) 2017.10.18
admin