1. 쿠키와 세션을 사용하는 이유
- 쿠키와 세션은 HTTP 가 Connectionless와 Stateless라는 특징을 가지고 있어 등장하게 되었습니다.
- 비연결지향은 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성을 말합니다.
- HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없습니다. 이를 Stateless하다고 합니다.
- 만약 로그인을 하고 그 상태를 유지한 채로 웹 서비스를 제공하려면 어떻게 해야할까요? HTTP프로토콜에서 상태를 유지하기 위해 쿠키와 세션이라는 방법이 존재합니다.
2. 쿠키
1) 개념
- 쿠키는 클라이언트 로컬에 저장되는 Key-Value쌍의 작은 데이터 파일입니다.
- 클라이언트가 어떤 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일입니다.
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있습니다.
- 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly여부로 구성되어 있습니다.
2) 동작방식
1. 클라이언트가 서버에 요청을 합니다
2. 서버는 클라이언트의 요청에 대한 응답 헤더 set-cookie에 클라이언트 측에 저장하고 싶은 정보를 추가하여 응답합니다.
3. 이후 클라이언트는 서버에 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie 에 담아 보냅니다. 헤더에 쿠키값을 자동으로 추가하는 작업은 브라우저에서 처리해줍니다.
3) Cookie 방식의 단점
- 요청 시 쿠키의 값을 그대로 보내기 때문에 보안에 취약하다.
- 용량 제한이 있어 많은 정보를 담을 수 없다.
- 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저간 공유가 불가능하다.
- 쿠키의 사이즈가 커질수록 네트워크에 부하가 심해진다.
3. 세션
1) 개념
보안 이슈 때문에, 세션은 비밀번호 등 클라이언트의 민감 인증 정보를 브라우저가 아닌 서버 측에 저장하고 관리한다.
브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술입니다.
2) 동작방식
1. 클라이언트가 서버에 로그인 요청을 합니다
2. 서버는 클라이언트의 로그인 요청의 유효성을 확인하고(아이디와 비밀번호 검사) unique한 id를 sessionid라는 이름으로 서버 메모리(또는 데이터베이스) 상에 저장합니다.
3. 서버가 응답할 때 응답헤더에 set-cookie: sessionid를 추가하여 응답합니다.
4. 브라우저는 이후 서버에 요청할 때 전달받은 sessionid 쿠키를 요청헤더에 담아 전송합니다.
5. 서버에서는 요청헤더의 sessionid 값을 저장된 세션저장소에서 찾아보고 유효한지 확인후 요청을 처리하고 응답합니다.
3) Session 방식의 단점
- 쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않는다. 그러나 해커가 세션 ID를 탈취하여 클라이언트인 척 위장할 수 있다는 한계가 존재한다. (이는 서버에서 IP 특정을 통해 해결할 수 있기는 하다)
- 서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하가 심해진다.
4. 쿠키와 세션 비교
쿠키 | 세션 | |
저장 위치 | 클라이언트(= 접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정 (브라우저 종료되어도 만료시점 이전에는 삭제되지 않음) |
브라우저 종료 시 삭제 (기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개 하나의 도메인 당 20개 하나의 쿠키 당 4KB (=4096byte) |
서버가 허용하는 한 용량 제한 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 취약. 요청 시 쿠키의 값을 그대로 보내기 때문에 유출 및 조작당할 위험이 존재한다. |
쿠키에 비해 좋음 |
내용을 정리하며 여전히 풀리지 않은 궁금증.
온갖 블로그를 뒤져가며 내용을 정리해보고 있는데..
쿠키, 세션, 세션 쿠키, 웹스토리지(로컬 스토리지, 세션 스토리지) 개념이 막 나온다.
- 여기서 어떤 블로그가 '세션'이라고 말하는 것은 세션 쿠키인 것인가?
- 쿠키는 브라우저의 어디에 저장되는 건가?
- 세션은 브라우저의 어디에 저장되는 건가? (메모리에 저장된다고 하는 글을 봤는데, 사용하는 디바이스의 메모리를 말하는 건가?)
- 웹스토리지는 HTML5 에서 지원하는 새로운 기능이라고 한다. 그럼, 로컬 스토리지와 세션 스토리지는 각각 브라우저의 어디에 위치하는 저장소라고 보아야하나?
- 조금 근본적으로.. 브라우저는 어떤 것들로 구성되어 있는 프로그램(? 프로그램이 맞을까?) 인가.
이에 대한 참고자료를 찾았따. "브라우저는 어떻게 동작하는가?" 1독을 권함!
https://d2.naver.com/helloworld/59361
참고
'컴퓨터 사이언스 Computer Science > 웹 WEB' 카테고리의 다른 글
[WEB] 인증 방식 종류 2_Token 과 JWT (0) | 2022.08.05 |
---|
댓글