1. 쿠키(Cookie)
- 사용자 인증 수단, 상태유지 및 관리를 위해 쿠키가 사용됨
- 쿠키를 통해 사용자 식별 및 세션 유지를 통해 클라이언트와 서버 간의 상태 관리를 함
- 일반적으로 쿠키는 지속쿠키, 세션은 세션 쿠키를 뜻함
- 사운드나 이미지 파일을 일시적으로 저장하여 로딩을 빠르게 하는 캐시와는 다름
1) 쿠키 헤더 구조
- 서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키값이 세팅됨
- 해당 사이트 접근 시 마다 클라이언트는 Set-Cookie에 의해 세팅 된 값을 Cookie 헤더에 세팅하여 요청 메시지를 전달
- 서버는 이를 통해 상태를 관리
2) 지속 쿠키 (Persistent Cookie)
- 웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장
- 클라이언트 PC 사용자들이 해당 쿠키 정보 열람 가능
- 쿠키를 폐기해도 해당 값을 알고 있으면 재사용이 가능한 문제점 존재.
- 쿠키 값이 평문일 경우 변조의 위협이 있기 때문에 사용자 식별 및 인증 관리를 할 경우 반드시 암호화 과정을 거쳐야 함
- 쿠키의 유효기간에 따른 폐기방법, 암호화 알고리즘에 대한 적절성 등을 잘 검토하여 쿠키 발급 로직을 구현해야 함
- 쿠키의 동작 방식
1. 클라이언트가 페이지를 요청 |
2. 요청을 받은 서버에서 쿠키를 생성 |
3. HTTP 헤더에 쿠키를 포함 시켜 클라이언트에게 응답 (Set-Cookie) |
4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음 |
5. 클라이언트가 서버에 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄 (Cookie) |
6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답 |
3) 세션 쿠키 (Session Cookie)
- 웹 서버에서 발급 시 클라이언트 웹 브러우저 캐시에 저장되며 정상적으로 로그인 시 웹 어플리케이션 서버는 서버 측에 해당 세션에 대한 정보를 저장
- 이때 서버에서 세션을 저장하는 방법으로 메모리, 파일시스템, 데이터베이스에 저장하는 방법이 있음. 일반적으로 메모리에 저장
- 세션은 문자가 암호화, 난독화 되어 있는 형태가 아닌 임의의 문자들이 무작위로 나열된 것으로 공격자 측에서는 특정 사용자의 세션을 추측하기 어려움
- 세션의 동작 방식
1. 클라이언트가 서버에 처음으로 Request를 보냄 (첫 요청이기 때문에 session id는 존재하지 않음) |
2. 서버에서는 session id 쿠키 값이 없는 것을 확인하고 새로 발급해서 응답 |
3. 이후 클라이언트는 전달받은 session id 값을 매 요청마다 Header Cookie에 넣어서 요청 |
4. 서버에서는 session id를 확인하여 사용자를 식별 |
5. 클라이언트가 로그인을 요청하면 서버는 session을 로그인한 사용자 정보로 갱신하고 새로운 session id를 발급하여 응답 |
6. 이후 클라이언트는 로그인 사용자의 session id 쿠키를 요청과 함께 전달하고 서버에서도 로그인된 사용자로 식별 가능 |
7. 클라이언트 종료 (브라우저 종료) 시 session id 제거, 서버에서도 세션 제거 |
4) 세션 쿠키가 아닌 지속 쿠키를 사용 하는 이유는 무엇일까?
- 세션 쿠키를 사용하면 보안 담당자, 개발자들이 편함
- 하지만 대규모 웹 서비스의 경우 수 많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져옴
- 이러한 이유로 서버에 부담이 낮은 지속쿠키사용을 많이 선호함 (웹 서비스 규모와 인프라 구성에 알맞게 사용해야 함)
- 편리성: 지속쿠키 < 세션쿠키
- 서버 부하 율: 지속쿠키 > 세션쿠키
'웹 기초' 카테고리의 다른 글
06. 웹 아키텍처 분석 (0) | 2020.03.11 |
---|---|
04. HTTP 프로토콜 (0) | 2020.03.10 |
03. 자원을 지정하는 URL (0) | 2020.03.09 |
02. 웹을 구성하는 3대 요소 - HTTP, HTML, URL (0) | 2020.03.09 |
01. 웹 용어 기초 - WWW, 하이퍼텍스트, 웹브라우저 (0) | 2020.03.09 |