본문으로 바로가기

[Interview] 쿠키와 세션에 대해 말씀해주세요.

쿠키와 세션에 대해 말씀해주세요.

◆ 실제로 답한다면 ...

쿠키와 세션은 http 프로토콜 특성상 사용하는 것들입니다.

http는 stateless, connectionless 기반이기 때문에 서버와 클라이언트는 서로 누구인 지 알아야 할 무언가가 필요합니다.

이럴 때 사용하는 것이 쿠키와 세션입니다.

 

쿠키의 경우 클라이언트, 즉 브라우저에서 관리됩니다.

http 요청을 보낼 때 header에 실어 보내지며 유효기간이 있습니다.

쿠키의 경우 브라우저에서 관리되기 때문에 외부에 노출이 됩니다.

따라서 개인정보와 같은 민감한 정보는 저장하지 않습니다.

간단한 예시로 처음 쿠키에 사용된 오늘 방문했는지, 오늘 다시 보지 않기 등 기능에 사용됩니다.

 

세션의 경우 서버에서 관리됩니다.

클라이언트마다 세션 아이디를 부여하여 관리합니다.

따라서 연결된 클라이언트가 많이 있다면 서버에 부담이 갑니다.

그러나 보안 면에서 쿠키보다 뛰어나기 때문에 로그인 유지와 같은 기능에 사용됩니다.

로그인 시 세션 아이디를 브라우저에 보내 쿠키에 저장하여 이후 로그인이 되었는 지 아닌 지 비교합니다.

 

간단하게 정리하자면

쿠키의 경우 브라우저에 저장되어 외부에게 노출될 위험이 있지만 서버에 부담이 덜 하고,

세션의 경우 서버에 저장되어 보안이 더 뛰어나지만 클라이언트가 많아질 수록 서버에 부담이 갑니다.

따라서 jwt로 대체가 가능한 경우 jwt를 사용하기도 합니다.

 

◆ jwt (꼬리 질문)

Q. jwt에 대해 말씀하셨는데 jwt를 사용하면 어떠한 장점이 있나요? (꼬리 질문 1)

jwt에는 해당 사용자가 가지고 있는 권한이 들어있기 때문에 따로 세션을 관리하지 않아도 됩니다.

서버는 받은 jwt와 가지고 있는 비밀키를 통해 무결성을 검증하고 사용자에게 권한을 인가합니다.

따라서 서버는 사용자마다 세션 id를 가지고 있지 않아도 되기 때문에 서버의 부담이 줄어듭니다.

 

Q. jwt가 세션보다 좋으면 jwt만 사용하면 되는 것 아닌가요? (꼬리 질문 2)

그러나 jwt는 서버 입장에서 먼저 할 수 있는 작업이 없습니다.

예를들어 세션의 경우 사용자의 로그인을 강제로 끊어버릴 수 있지만 jwt는 해당 작업이 어렵습니다.

따라서 완벽하게 해결책은 아니고 jwt와 세션 잘 비교하며 상황에 따라 맞는 것을 사용하는 것이 좋은 것 같습니다.

 

추가 궁금증을 위한 검색 keyword

  • 세션
  • 쿠키
  • jwt

마지막

해당 내용은 틀릴 수도 있습니다. 틀린 내용이 있으면 조언 부탁드립니다.

반응형