![[기술 면접] 6. 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요? 1 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?](https://i0.wp.com/allhoneytip.com/wp-content/uploads/2023/08/%EC%A0%9C%EB%AA%A9%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94__%EB%B3%B5%EC%82%AC%EB%B3%B8-12-001-optimized.png?resize=300%2C300&ssl=1)
저번 시간에 이어, 이번엔 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 알아보겠습니다. 이번 시간까지만 철저하게 준비하셔도 네트워크 관련 질문은 거의 다 대비했다고 볼 수 있습니다. 이번 질문은 서비스 플랫폼 회사 K사, L사에서 마주한 질문입니다.
![[기술 면접] 6. 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요? 2 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?](https://i0.wp.com/allhoneytip.com/wp-content/uploads/2023/08/image-63-optimized.png?resize=1024%2C414&ssl=1)
Q: 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요?
쿠키는 사용자 정보같은 데이터를 브라우저에 저장하여 유지하고 세션은 서버에서 해당 데이터를 보관합니다. 그리고 JWT는 JSON 형식의 토큰 기반 인증 시스템입니다.
Q: 쿠키(cookie) 생성 과정을 설명해주세요.
쿠키의 생성과 저장은 구현에 따라 다르지만, 원리는 동일합니다. 생성 과정부터 말씀드리면,
- 서버가 클라이언트로부터 요청을 받았을 때, 클라이언트에 관한 정보를 토대로 쿠키를 구성합니다.
- 서버는 클라이언트에게 보내는 응답의 header에 쿠키를 담아 보냅니다.
- 클라이언트가 응답을 받으면, 브라우저는 쿠키를 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: 쿠키의 사용 예를 말씀해주세요.
- 쇼핑몰의 장바구니 기능
- 로그인 시 아이디와 비밀번호 저장(또는 자동로그인)
- 팝업에서 “오늘 더 이상 이 창을 보지 않음” 체크
Q: JWT에 대해서 아시나요?
Json Web Token으로, 인증에 필요한 정보들을 암호화시킨 토큰입니다.
Q: JWT의 장점과 단점을 말씀해주세요.
- 장점으로는 인증 정보에 대한 별도의 저장소가 필요 없으며(서버의 무상태) 자체적으로 위변조를 막을 수 있습니다. 또한 다른 로그인 시스템에 접근 및 권한 공유가 가능하므로 확장성이 우수합니다.
- 단점으로는, 쿠키와 세션보다 길이가 길기 때문에, 요청이 많아질 수록 네트워크 부하가 심해지며, Payload는 암호화되지 않기 때문에 중요 정보는 담을 수 없습니다. 추가로 토근은 유효기간이 만료될 때까지 계속 사용할 수 있기 때문에, 탈취 시 대처가 어렵습니다.
마치며
쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 알아보았습니다. 이번 시간까지 내용을 종합해보면, 신입 개발자 기준 Computer Science의 네트워크 부분을 전반적으로 대비하셨다고 볼 수 있습니다. 한 번만 보고 지나치면 쉽게 잊을 수 있으니, 복습을 통해 면접을 대비하시길 권해드립니다.
![[기술 면접] 6. 쿠키(Cookie), 세션(Session), JWT(JSON Web Token)에 대해 아시나요? 3 image 64](https://i0.wp.com/allhoneytip.com/wp-content/uploads/2023/08/image-64-optimized.png?resize=578%2C491&ssl=1)
답글 남기기