[기술 면접] 6. 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?

쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?

저번 시간에 이어, 이번엔 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 알아보겠습니다. 이번 시간까지만 철저하게 준비하셔도 네트워크 관련 질문은 거의 다 대비했다고 볼 수 있습니다. 이번 질문은 서비스 플랫폼 회사 K사, L사에서 마주한 질문입니다.

쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?



Q: 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?

쿠키는 사용자 정보같은 데이터를 브라우저에 저장하여 유지하고 세션서버에서 해당 데이터를 보관합니다. 그리고 JWTJSON 형식의 토큰 기반 인증 시스템입니다.



Q: 쿠키(cookie) 생성 과정을 설명해주세요.

쿠키의 생성과 저장은 구현에 따라 다르지만, 원리는 동일합니다. 생성 과정부터 말씀드리면,

  1. 서버가 클라이언트로부터 요청을 받았을 때, 클라이언트에 관한 정보를 토대로 쿠키를 구성합니다.
  2. 서버는 클라이언트에게 보내는 응답의 header에 쿠키를 담아 보냅니다.
  3. 클라이언트가 응답을 받으면, 브라우저는 쿠키를 Cookie directory에 저장합니다.

추가로, 쿠키는 클라이언트(브라우저)에 key-value 쌍의 파일 형태로 저장됩니다. 즉, 유효시간 내에서는 브라우저가 종료 되어도 계속 유지됩니다. 서버에서 response header에 set-coockie속성을 사용해서 Cookie를 만들어 보내고, 사용자가 따로 작업 하지 않아도 브라우저가 쿠키를 request header에 담아서 서버에 전송합니다.



Q: 쿠키(cookie)의 단점은 무엇인가요?

개인정보 등을 탈취당할 수 있습니다.



Q: 세션(session)은 어떻게 사용되죠?

센션은 기본적으로 쿠키를 이용하여 구현됩니다. Client를 구분하기 위해 각 Client에게 session ID를 부여하고 Client는 쿠키에 session ID를 저장합니다. 사용자 정보를 브라우저에 저장하는 쿠키와 달리 세션은 서버측에 저장하여 관리합니다. 세션은 유효시간을 두어 일정 시간 응답이 없다면 끊을 수 있고, 브라우저가 종료될 때까지 인증상태를 유지할 수 있습니다. 사용자 정보를 서버에 두기 때문에 쿠키보다 보안은 좋지만, 서버 자원을 차지하기 때문에 서버에 과부하를 줄 수 있고 성능 저하의 요인이 될 수 있습니다.



Q: 쿠키(cookie)와 세션(session)의 차이점을 설명해주세요

쿠키클라이언트(브라우저) 로컬에 key-value 쌍으로 저장되는 데이터 파일입니다. 유효시간 내에서는 브라우저가 종료되어도 계속 유지됩니다.

세션브라우저가 종료되거나, 서버에서 해당 세션을 삭제할 수 있기 때문에 쿠키보다 보안성이 좋습니다. 또한 서버에 데이터를 저장하므로 서버 용량이 허용하는 한에서 제한 없이 데이터를 저장할 수 있다는 장점이 있지만, 서버의 부하가 커진다는 단점이 있습니다.



Q: 쿠키(cookie)와 세션(session)을 사용하는 이유가 무엇인가요?

HTTP의 connectionless(비연결성), stateless(비상태성)라는 특징 때문입니다. Client가 요청을 했을 때 그 요청에 맞는 응답을 보낸 후 연결을 끊고, Server는 Client에 대한 상태 정보를 유지하지 않기 때문에 알 수 없습니다. 하지만 쿠키와 세션을 적절하게 사용한다면, Client의 상태 정보를 임시 저장하여 특정 기간 동안 사용할 수 있습니다.

만약 쿠키와 세션을 사용하지 않는다면, 로그인 했음에도 불구하고 페이지를 이동할 때마다 계속 로그인을 해야하며, 장바구니, “오늘 더 이상 이 창을 보지 않음” 등의 편의성을 제공할 수 없습니다.



Q: 세션 없이 쿠키만 존재한다면 어떤 문제가 발생할까요?

유출 문제가 발생했을 때 서버에서 해당 세션을 제거함으로써 해당 상황을 모면하는 것이 불가능할 것으로 보입니다. – invalidate



Q: 세션이 보안도 좋은데 왜 쿠키를 사용할까요?

세션은 서버의 자원을 사용하기 때문에 서버가 느려질 수 있고, 서버 자원이 부족할 수 있습니다. 서버 자원의 낭비를 방지하고 속도를 높히기 위해 상황에 따라 쿠키를 사용합니다.



Q: 쿠키의 사용 예를 말씀해주세요.

  1. 쇼핑몰의 장바구니 기능
  2. 로그인 시 아이디와 비밀번호 저장(또는 자동로그인)
  3. 팝업에서 “오늘 더 이상 이 창을 보지 않음” 체크



Q: JWT에 대해서 아시나요?

Json Web Token으로, 인증에 필요한 정보들을 암호화시킨 토큰입니다.



Q: JWT의 장점과 단점을 말씀해주세요.

  • 장점으로는 인증 정보에 대한 별도의 저장소가 필요 없으며(서버의 무상태) 자체적으로 위변조를 막을 수 있습니다. 또한 다른 로그인 시스템에 접근 및 권한 공유가 가능하므로 확장성이 우수합니다.
  • 단점으로는, 쿠키와 세션보다 길이가 길기 때문에, 요청이 많아질 수록 네트워크 부하가 심해지며, Payload는 암호화되지 않기 때문에 중요 정보는 담을 수 없습니다. 추가로 토근은 유효기간이 만료될 때까지 계속 사용할 수 있기 때문에, 탈취 시 대처가 어렵습니다.



마치며

쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 알아보았습니다. 이번 시간까지 내용을 종합해보면, 신입 개발자 기준 Computer Science의 네트워크 부분을 전반적으로 대비하셨다고 볼 수 있습니다. 한 번만 보고 지나치면 쉽게 잊을 수 있으니, 복습을 통해 면접을 대비하시길 권해드립니다.

image 64

Leave a Comment