[BEInternship] JWT 이해하기(1) - 쿠키와 세션

junghan·2023년 8월 24일
0

BE 인턴십

목록 보기
8/9
post-thumbnail


JWT는 쿠키, 세션이 가진 고질적인 문제를 해결하기 위해 사용되는 기술입니다.

HTTP의 특징

HTTP는 기본적으로 contactless, stateless를 지향한다.

HTTP는 contactless(클라이언트의 요청이 처리되면 연결이 끊어짐), stateless(서버가 클라이언트의 이전 상태를 저장하지 않음)라는 특징을 가지고 있어 인증이 필요한 페이지에 접근할 경우 서버는 클라이언트가 누구인지 매번 확인해야했다.

예를 들어 쇼핑몰에서 로그인을 하고 마음에 드는 제품을 장바구니에 담을 때마다 다시 로그인을 하며 내가 회원이라는 걸 알려줘야 했다는 것.

JWT 등장 이전의 인증은 어땠을까?

cookie와 session를 통한 인증

구글이나 다른 브라우저를 사용하다 보면 '쿠키(cookie)를 저장하겠습니까?' 라는 문장을 자주 볼 수 있습니다. 여기서 쿠키란 클라이언트가 웹사이트에 접속할 때 필요한 정보를 서버에서 발급하여 저장하는 것을 말합니다.

쿠키의 등장 배경에는 로그인 유지가 있습니다. 웹사이트를 이용할 때 쿠키가 없다면 ID/PW를 이용해 서버에 지속적인 요청을 날려야 하는데, 이러한 과정을 단축하기 위해 정보를 담아서 쿠키를 발급한다면 매번 요청하는 번거로움을 방지할 수 있습니다.

하지만 쿠키에는 단점이 존재합니다. 외부 요인에 의해 데이터를 탈취당했을 때 ID/PW와 같은 민감한 정보도 함께 노출되기 쉽습니다. 또한, 조작된 데이터에 대한 대처 방안이 없으므로 보안에 관련하여 취약한 부분이 많습니다.

session

세션은 새로운 기술이 아닌 쿠키의 단점을 보안하여 나온 기술입니다. 민감정보를 매번 ID/PW를 서버에 전달하여 인증을 경우, 탈취당하기 쉽다는 단점을 세션 스토리지(session storage)를 활용하여 보완했습니다.

기존의 쿠키는 http의 특징 중 하나인 무상태성(stateless)을 기반으로 하여 클라이언트단에서 정보를 관리했습니다. 클라이언트는 비교적 보안이 약하므로 탈취의 위험성을 가지고 있지만, 세션 스토리지는 서버 저장소에 정보를 보관하고, 쿠키에 담아 클라이언트가 요청할 때 마다 인증하는 방식이므로 쿠키보다 보안성이 좋은 기술입니다. 하지만 세션 또한 단점이 존재합니다.

우선 http의 장점인 무상태성을 위반합니다. 서버에 세션 저장소를 사용하므로 stateful한 특징을 가지고 있습니다. stateful할 경우, 서버 확장을 위해 scale-out을 하면 기존 서버에 있는 로그인 정보를 다른 서버에도 저장해야 하므로 중앙 세션 저장소를 필요로 합니다. 당연히 서버 비용 문제가 발생하게 됩니다.

유저가 증가하게 되면 메모리를 많이 차지하는 점도 단점입니다. 세션은 매번 서버에 호출하게 되는데 서버에 부하가 걸릴 수도 있고, 클라이언트와 서버 사이의 통신이기 때문에 쿠키에 비해 속도도 느린 단점이 존재합니다.

profile
42seoul, blockchain, web 3.0

0개의 댓글