본문 바로가기

웹 기초

05. 쿠키와 세션

1. 쿠키(Cookie)

- 사용자 인증 수단, 상태유지 및 관리를 위해 쿠키가 사용됨

- 쿠키를 통해 사용자 식별 및 세션 유지를 통해 클라이언트와 서버 간의 상태 관리를 함

- 일반적으로 쿠키는 지속쿠키, 세션은 세션 쿠키를 뜻함

- 사운드나 이미지 파일을 일시적으로 저장하여 로딩을 빠르게 하는 캐시와는 다름

 

1) 쿠키 헤더 구조

- 서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키값이 세팅됨

- 해당 사이트 접근 시 마다 클라이언트는 Set-Cookie에 의해 세팅 된 값을 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) 세션 쿠키가 아닌 지속 쿠키를 사용 하는 이유는 무엇일까?

- 세션 쿠키를 사용하면 보안 담당자, 개발자들이 편함

- 하지만 대규모 웹 서비스의 경우 수 많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져옴

- 이러한 이유로 서버에 부담이 낮은 지속쿠키사용을 많이 선호함 (웹 서비스 규모와 인프라 구성에 알맞게 사용해야 함)

- 편리성: 지속쿠키 < 세션쿠키

- 서버 부하 율: 지속쿠키 > 세션쿠키

반응형