쿠키와 세션

이창훈·2024년 7월 18일
post-thumbnail

Cookie의 등장

HTTP의 가장 큰 특징은 무상태성과 비연결성입니다. 예를 들어, 사용자가 홈페이지에 로그인하고 새로 고침을 하면 로그인이 풀린 상태가 됩니다. 이는 HTTP가 클라이언트가 요청을 하면 서버가 응답하고, 응답이 끝나면 연결이 종료되기 때문입니다. 이러한 구조에서는 클라이언트의 이전 통신 상태가 유지되지 않으며, 서버가 다수의 클라이언트와 연결을 계속 유지하면 자원이 낭비됩니다. 이 문제를 해결하기 위해 쿠키(Cookie)가 등장했습니다.

쿠키는 사용자가 웹사이트를 방문할 때, 사용자의 웹 브라우저를 통해 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일입니다. 서버는 클라이언트의 로그인 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담아 전달합니다. 쿠키는 Key-Value 형식으로 저장됩니다.

이후 해당 클라이언트는 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie에 담아 서버로 보냅니다. 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트를 식별할 수 있습니다.

단점

보안에 취약함: 쿠키의 값이 브라우저에서 확인할 수 있어 유출 및 조작 당할 위험이 존재합니다.
용량 제한: 쿠키에는 용량 제한이 있어 많은 정보를 담을 수 없습니다.
브라우저 간 호환성 문제: 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저 간 공유가 불가능합니다.
네트워크 부하: 쿠키의 사이즈가 커질수록 네트워크에 부하가 심해집니다.

Session의 등장

쿠키의 가장 큰 단점은 사용자의 정보가 그대로 노출된다는 점입니다. 이 문제를 해결하기 위해 세션(Session)이 등장했습니다. 세션은 기존에 쿠키에 저장된 사용자의 정보를 서버의 메모리에 저장하고, 생성된 ID를 쿠키에 담아 클라이언트에게 전달합니다. 클라이언트가 요청을 보낼 때 이 ID를 쿠키를 통해 전달하면, 서버는 ID의 유효성을 판별해 클라이언트를 식별합니다. 세션의 정보는 사용자가 브라우저를 종료하면 삭제됩니다.

Session


세션은 서버 측에서 사용자 정보를 관리하기 위해 사용됩니다. 클라이언트가 서버에 접속하면, 서버는 고유한 세션 ID를 생성하고 이를 클라이언트의 쿠키에 저장하여 전달합니다. 이후 클라이언트는 요청할 때마다 이 세션 ID를 서버에 전송합니다. 서버는 세션 ID를 통해 클라이언트를 식별하고, 저장된 사용자 정보를 바탕으로 요청을 처리합니다.

장단점

보안 강화: 쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않습니다. 그러나 세션 ID로 해커가 서버에 접근하면 사용자의 정보에 쉽게 접근할 수 있습니다.
효율성: 각 사용자마다 고유한 세션 ID가 발급되어, 요청이 들어올 때마다 회원 정보를 확인할 필요가 없습니다.
서버 부하: 서버의 메모리를 사용하므로 요청이 많아지면 서버에 부하가 심해질 수 있습니다.

✅ 쿠키와 세션의 차이점

쿠키는 클라이언트의 브라우저에 저장되지만, 세션은 서버에 저장됩니다. 또한 쿠키는 브라우저를 종료해도 정보가 남아있지만, 세션은 브라우저를 종료하면 정보가 삭제됩니다.

✅ 쿠키와 세션이 필요한 이유

HTTP는 클라이언트가 요청을 하고 서버가 응답을 하면 연결이 종료됩니다. 이를 통해 서버는 많은 리소스를 절약할 수 있지만, 가지고 있던 정보도 사라져서 다시 사이트에 접속할 때 데이터를 다시 받아와야 합니다. 이를 해결하기 위해 쿠키가 만들어졌습니다. 쿠키는 데이터를 직접적으로 클라이언트에 저장하기 때문에 보안에 취약합니다. 이러한 점을 보완하기 위해 세션이 만들어졌습니다. 세션은 서버의 메모리에 사용자가 필요한 정보를 저장하고, 생성된 데이터의 ID를 쿠키를 통해 클라이언트에 전달합니다.


참고자료 : https://github.com/devSquad-study/2023-CS-Study/blob/main/Network/network_cookie_and_session.md

profile
한화시스템 BEYOND SW CAMP 2기

0개의 댓글