쿠키
개념
- 사용자의 브라우저에 저장, 즉 클라이언트의 일부 공간에 저장된다.
- 통신할때, HTTP 헤더에 포함되는 텍스트 데이터 파일 이름, 값 만료기간(지정 가능), 경로 정보가 있고 키와 값으로 구성되어 있다.
- 쿠키는 세션에 태워 서버에서 인증 및 인가 과정을 거친다.
- 보안성이 낮다.
- 브라우저 종료시에도 유지된다.
주요 용도
- 사용자 인증 : 로그인 상태를 유지하기 위해 사용된다. 서버는 세션 ID나 인증 토큰을 쿠키에 저장하고, 클라이언트는 이 쿠키를 서버에 매 요청 시 전송하여 인증 상태를 유지한다
- 사용자 설정 저장 : 사용자의 선호도나 설정을 저장하여 다음 방문 시 동일한 설정을 적용할 수 있다
- 추적 : 사용자 행동을 추적하여 개인화된 콘텐츠나 광고를 제공할 수 있다.
세션
개념
- 서버에 저장되는 또 다른 쿠키
- 주로 중요한 데이터를 저장하는데 사용된다.
- 사용자 브라우저에 저장되는게 아닌 서버에 직접 저장되므로, 데이터를 탈취하는 것이 어렵다.
- 보안성이 높다.
- 브라우저 종료시에 삭제된다.
주요 용도
- 사용자 인증 : 사용자가 로그인하면 서버에서 세션을 생성하고, 세션 ID를 클라이언트에 반환하여 인증 상태를 유지한다.
- 상태 유지 : 사용자의 상태나 데이터를 여러 페이지 요청 간에 유지할 수 있다.
쿠키와 세션 작동 방식
- 사용자 로그인
- 사용자가 로그인 폼을 통해 로그인 정보를 서버에 제출한다
- 서버는 로그인 정보를 검증하고, 사용자가 인증된 경우, 서버 측에서 세션을 생성한다.
- 세션 ID 발급 및 쿠키 저장
- 서버는 세션 ID를 생성하고 이를 쿠키에 저장하여 클라이언트(브라우저)에게 전송한다
- 클라이언트는 서버로부터 받은 쿠키를 브라우저에 저장한다. 이 쿠크닌 보통 세션 ID가 포함된다.
- 요청 시 세션 ID 전달
- 사용자가 다음 요청을 서버로 보낼 때, 브라우저는 자동으로 세션 쿠키를 포함하여 서버에 요청을 보낸다
- 서버에서 세션 검증
- 서버는 요청에서 세션 ID를 추출하고, 이 ID를 통해 서버의 세션 저장소에서 사용자 정보를 조회한다
- 서버는 이 정보를 기반으로 사용자의 인증 및 인가를 확인한다.
- 인증 및 인가
- 서버는 사용자의 세션을 확인하고, 요청된 자원에 대한 접근 권한을 검증한다
- 사용자가 권한이 있는 경우, 요청을 처리하고 결과를 클라이언트에 반환한다. 그렇지 않으면 적절한 오류 응답을 반환한다.
보안 고려사항
- 세션 하이재킹
- 세션 ID가 도난당할 경우 다른 사용자가 세션을 가로채어 사용할 수 있다.
- 이를 방지하기 위해 HTTPS를 사용하고, 세션 ID를 주기적으로 변경하는 것이 좋다.
- 쿠키 속성 설정
- 쿠키에 Secure 및 HttpOnly 속성을 설정하여 쿠키가 HTTPS 연결에서만 전송되도록 하고, 자바스크립트에서 접근할 수 없도록 한다
- 세션 만료
- 세션이 일정 시간 동안 활동이 없으면 자동으로 만료되도록 설정하여 보안을 강화한다.
캐시
개념
- 리소스 파일들의 임시 저장소.
- 같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다.
- 이전에 사용되었던 데이터는 다시 사용될 가능성이 높다.
- 이러한 이유 때문에 다시 사용될 가능성이 높은 데이터들을 빠르게 접근 가능한 저장소에 저장한다.
주요 용도
- 성능 향상 : 자주 사용되는 데이터나 결과를 저장하여 요청 처리 시간을 단축한다
- 트래픽 감소 : 서버에 대한 요청 수를 줄여 서버 부담을 경감한다
- 네트워크 대역폭 절약 : 네트워크를 통해 반복적으로 데이터를 전송할 필요가 없으므로 대역폭을 절약한다.
캐시의 종류
- 브라우저 캐시 : 클라이언트 측에서 웹 자원(HTML, CSS, JavaScript, 이미지 등)을 저장한다.
- 서버 캐시 : 서버 측에서 데이터나 페이지를 저장하여 빠르게 응답할 수 있도록 한다. 예를 들어, Redis, Memcached 등이 있다.
- CDN 캐시 : 콘텐츠 전송 네트워크(CDN)를 사용하여 지리적으로 분산된 서버에 데이터를 저장하고, 사용자에게 빠르게 제공한다.