사용자를 식별하는 방법
클라이언트의 IP 주소 활용
만약 사용자가 확실한 IP 주소를 가지고 있고 그 주소가 바뀌지 않는다면 문제없이 동작하지만, 여러 약점을 가지고 있다. 먼저 사용자 자체를 가리킨다기 보다는 사용하는 컴퓨터를 가리키는 것이기 때문에 여러 사용자가 같은 컴퓨터를 사용한다면 식별이 불가하다. 또한 많은 ISP가 사용자가 로그인했을 때 동적으로 IP 주소를 할당하기 때문에 사용자는 매번 다른 주소를 받게 되어 웹 서버가 사용자를 식별하지 못할 수 있다. 그 외에도 프락시 서버로 인한 경우이거나 실제 IP 주소를 방화벽 뒤로 숨기게 되는 경우 등으로 인해 IP 주소를 활용하는 것이 적절하지 않을 수 있다.
사용자 로그인
사용자 이름과 비밀번호 인증을 통해 명시적으로 사용자에게 식별을 요청할 수 있다. 그리고 401 상태 코드를 통해 로그인 여부를 확인할 수도 있다. 그리고 Authorization 헤더를 통해 사용자에 대한 식별을 유지할 수 있다. 하지만 매번 사이트에서 로그인을 해야한다는 불편함과, 기존에 다른 곳에서 사용하던 id가 다른 사이트에서는 이미 사용되고 있는 등 사용자가 관리하는 것에 어려움을 줄 수 있다는 문제가 있다.
뚱뚱한 URL
URL마다 버전을 기술하여 사용자를 식별하고 추적할 수도 있다. 사용자의 상태 정보를 포함하고 있는 URL을 뚱뚱한 URL이라고 한다. 하지만 브라우저에 이러한 정보가 모두 보이기 때문에, 사용자는 혼란을 겪을 수 있고, 이 링크를 공유하는 과정 자체가 자신의 개인 정보를 의도와는 상관없이 공유하게 되는 문제도 생긴다. 또 URL에 따른 HTML 페이지를 다시 그려야 하기 때문에 서버 부하도 일으킬 수 있다. 그 외에도 만약 뚱뚱한 URL에서 이탈했다가 다시 접근하는 경우, 혹은 북마크 없이 로그아웃 하는 경우, 지금까지의 진척상황들이 모두 초기화되고 다시 처음부터 시작하게 될 가능성도 있다.
쿠키
사용자를 식별하고 세션을 유지하는 방법이다. 쿠키는 세션 쿠키와 지속 쿠키로 나뉘며, Discard 파라미터가 설정되어 있거나 Expires 혹은 Max-Age 파라미터가 없는 경우에는 세션 쿠키가 된다.
보통 브라우저는 쿠키를 생성한 서버에만 쿠키에 담긴 정보를 전달한다. Set-Cookie 시에는 Domain 속성을 통해 어떤 도메인에 쿠키를 세팅할 것인지 제어할 수 있다. Path 속성은 없는 경우 전체에 세팅될 것이며, 특정 경로를 기입하는 경우 해당 경로를 포함한 하위 경로에서만 쿠키를 읽어들일 수 있다.
쿠키는 Version 0 쿠키와 Version 1 쿠키로 나뉘는데, 보통 Version 0 쿠키를 더 많이 사용하고 있다. Version 0 Set-Cookie 헤더에서는 쿠키의 이름과 값을 기술하며 쿠키 옵션 속성들에 대해 세미콜론으로 이어 기술한다. expires, path, secure, domain 등이 있다. Version 1 쿠키는 0 버전보다 조금 더 복잡한 편이다. 파기 주기에 상관없이 브라우저가 닫히면 쿠키를 강제로 삭제할 수 있으며 도메인, 포트, 경로 필터가 있으면 Cookie 헤더에 담겨 되돌려 보낸다. 그리고 그 외에도 절대 날짜 값 대신 Max-Age를 통해 쿠키의 생명주기를 초 단위의 상대 값으로도 지정할 수 있다. Port, Discard, Comment, Version 등이 포함된다.
쿠키와 세션 추적, 캐싱
쿠키는 사용자를 추적하는 데 사용된다. 온라인 쇼핑을 하는 중에 쇼핑카트를 유지하기 위해 세션 쿠키를 사용하기도 한다. 새로운 URL로 리다이렉트 될 때 서버가 세팅하고자 하는 세션 쿠키가 있다면 해당 쿠키를 기술하게 되고, 클라이언트는 다시 이 쿠키들을 첨부해서 다음 요청들을 보내게 된다.
캐싱을 하게 될 때는 주의해야 하는데, Set-Cookie 헤더를 캐시하는 것은 주의해야 한다. 같은 것을 여러 사용자에게 보낼 경우 사용자 추적에 실패하기 때문이다. 그 외에도 캐시되지 말아야 할 문서가 있을 경우 명시적으로 Cache-Control: no-cache="Set-Cookie"를 기술하고 명확히 표시해야 한다.
'개발' 카테고리의 다른 글
[HTTP 완벽 가이드] 12장 기본 인증 (1) | 2025.01.02 |
---|---|
[HTTP 완벽 가이드] 10장 HTTP/2.0 (0) | 2025.01.02 |
[HTTP 완벽 가이드] 9.3~9.4.6 부적절하게 동작하는 로봇과 로봇 차단 방법 (0) | 2024.12.24 |
[항해플러스] 프론트엔드 3기 장단점 솔직 후기 (5) | 2024.10.22 |
[항해플러스] 클린코드 (진짜진짜 더러운 코드 개선하기) (1) | 2024.10.18 |