우리는 인터넷과 웹 브라우저를 사용하며 쿠키, 세션, 캐시를 사용합니다. 예를 들어, 웹사이트 로그인 유지와 같이 편리한 기능은 쿠키와 세션의 조합으로 이뤄집니다. 쿠키를 모두 지우고 새로고침하면 로그인이 풀리는 이유도 이 때문입니다. 이번 글에서는 쿠키와 세션, 캐시에 대해서 정리해보도록 하겠습니다.
HTTP 요청의 이해
HTTP는 스테이트리스(statelss) 속성을 갖습니다. 이는 이전의 요청과 다음의 요청이 연결되지 않는다는 것입니다. 따라서 특정 요청과 다른 요청을 연결하려면 각 요청들 사이에서 해당 정보를 안전하게 담아 전달할 수 있는 방법이 필요합니다. 여기에 사용되는 개념이 바로 쿠키와 세션입니다.
쿠키란?
쿠키는 사용자의 브라우저에 저장되는 정보로 웹사이트에서 진행되는 사용자의 활동을 기록합니다. 쿠키 또는 URL 파라미터(http://google.com/myPage?id=jeong)는 요청들 간에 데이터를 전달하는 데 적합합니다. 쿠키에는 웹사이트 사용자 설정, 쇼핑 카트에 물건 담기, 이벤트 안내 확인 여부 등 다양한 정보를 저장할 수 있습니다.Response Header
에 Set-Cookie
속성을 사용하여 쿠키를 만들 수 있으며, 키와 값의 형태로 하나의 쿠키 당 최대 4KB까지, 하나의 도메인 당 20개까지 저장할 수 있습니다.
쿠키는 빠르지만 사용자가 임의로 수정할 수 있으며, 다른 이들에게도 노출될 수 있습니다. 따라서 민감한 정보는 쿠키에 저장하지 않고 세션으로 서버에서 처리하는 게 일반적입니다.
세션이란?
앞서 언급한 것처럼, 쿠키에 저장하기에는 민감한 사용자의 정보는 서버의 세션에 저장합니다. 세션에는 만료 기간을 지정하여 보안을 강화할 수 있습니다.
세션은 쿠키와 유사하지만 데이터를 사용자의 브라우저가 아닌 서버에 보관한다는 차이점이 있습니다. 쿠키에 민감한 데이터를 저장하면 유출 또는 조작될 수 있기 때문에, 이를 서버에서 관리하는 것이 바로 세션의 개념입니다. 세션을 통해 사용자의 중요한 정보들을 서버의 메모리나 데이터베이스에 저장할 수 있습니다.
서버는 사용자를 구분하기 위해 만료 기간이 정해진 임시 키 하나를 전달하고, 브라우저는 이를 쿠키에 저장합니다. 브라우저는 HTTP
요청 마다 서버에 키를 전달하며, 서버는 이를 통해 세션 아이디를 확인하고 정보를 줍니다. 즉, 서버는 각 클라이언트에게 아이디를 주고, 해당 아이디의 클라이언트만 요청을 보내고 정보를 받을 수 있게 할 수 있습니다. 비유하자면 세션은 HTTP 요청을 주고 받을 때 일종의 신분증(ID)을 통해 인증과 인가를 진행하는 개념입니다.
세션은 서버에 데이터를 보관하기 때문에 안전하지만, 너무 많은 세션이 존재할 경우 서버 메모리에 부담이 될 수 있습니다.
캐시
캐시는 한 번 가져온 데이터를 램(RAM)과 같이 하드웨어에 임시로 저장하여 비용과 시간을 절감하는 것입니다. 캐시의 주된 목적은 스토리지 계층에 접근하지 않고, 데이터 검색 성능을 높이는 것입니다. 사용자가 여러번 방문하는 웹사이트의 데이터를 받아온 다음 이를 사용자의 컴퓨터나 중간 서버에 저장해 둡니다.
참고 자료:
- 세션과 쿠기: https://stackoverflow.com/questions/3804209/what-are-sessions-how-do-they-work
- 쿠키와 세션 보안에 관해 더 읽어볼 글:
https://coyagi.tistory.com/entry/%EC%8B%9C%ED%81%90%EC%96%B4%EC%BD%94%EB%94%A9-%EC%BF%A0%ED%82%A4-%EB%B0%8F-%EC%84%B8%EC%85%98%EA%B4%80%EB%A6%AC - 캐시: https://aws.amazon.com/ko/caching/
'Web | Internet' 카테고리의 다른 글
웹소켓 WebSocket 사용 방법 정리 (0) | 2022.04.06 |
---|---|
HTTP 상태 코드 의미 정리 (0) | 2022.02.09 |
의미론적 웹이란? (0) | 2021.12.28 |