본문 바로가기
목차
[노트장] 적으며 정리해 보는 이론/유저기능

[유저기능] 쿠키(Cookie)

by 졸린부엉이 2024. 5. 17.

◼쿠키

서버 응답(리스폰스)나, 클라이언트 코드에 따라 브라우저에 저장되는 작은 단위의 문자열 파일들을 말합니다.

인증서로 사용하며 쿠키로 저장하며, 서버에서 정한 만료일이나 보알 설정 등 다양한 내용들이 쿠키에 들어있습니다.

 

[출처] 코드잇 유저기능

 

쿠키 인증의 원리

  • 사용자 로그인 요청: 사용자가 브라우저를 통해 서버에 로그인 요청을 보냅니다. 이때 사용자는 아이디와 비밀번호를 입력합니다.
  • 서버 인증: 서버는 받은 자격 증명(아이디와 비밀번호)을 확인하고 사용자가 유효한 사용자임을 인증합니다.
  • 쿠키 생성: 서버는 사용자 인증이 성공하면 세션 ID와 같은 인증 토큰을 포함한 쿠키를 생성합니다.
  • 쿠키 전송: 서버는 Set-Cookie 헤더를 사용하여 이 쿠키를 클라이언트(브라우저)에 전송합니다.
  • 쿠키 저장: 브라우저는 서버로부터 받은 쿠키를 저장합니다.
  • 자동 쿠키 전송: 이후 브라우저는 같은 도메인으로의 모든 요청에 대해 이 쿠키를 자동으로 포함시켜 서버로 전송합니다. 이렇게 하면 사용자는 다시 로그인할 필요 없이 지속적으로 인증된 상태를 유지할 수 있습니다.

 

클라이언트 측의 편의성

  • 자동 쿠키 처리: 브라우저는 쿠키의 저장과 전송을 자동으로 처리합니다. 개발자는 쿠키를 직접 관리할 필요 없이 사용자 세션을 유지할 수 있어 편리합니다.
  • 유저 기능 개발의 간편함: 개발자는 복잡한 인증 로직을 구현할 필요 없이 서버에서 설정한 쿠키를 이용해 사용자의 상태를 쉽게 확인하고 관리할 수 있습니다.

 

 

요약하자면,
클라이언트는 서버와 상호작용하는 모든 프로그램을 의미하지만, 브라우저는 그 중 하나로 웹 페이지를 표시하고 사용자의 요청을 처리하는 역할을 합니다. 쿠키 인증은 브라우저가 쿠키를 자동으로 관리하고 전송해주기 때문에 클라이언트 개발자가 인증 상태를 간편하게 유지할 수 있도록 도와줍니다.

 

 

 

 

클라이언트와 브라우저의 차이

클라이언트
클라이언트는 서버와 상호작용하는 모든 프로그램 또는 디바이스를 의미합니다. 웹 애플리케이션의 경우, 클라이언트는 보통 사용자가 이용하는 웹 브라우저를 지칭합니다.그러나 "클라이언트"는 더 넓은 범위에서 사용될 수 있습니다. 예를 들어, 모바일 앱, 데스크탑 애플리케이션, 또는 API 호출을 하는 다른 서버도 클라이언트로 간주될 수 있습니다.

브라우저
브라우저는 웹 페이지를 탐색하고 표시하기 위해 사용되는 소프트웨어 애플리케이션입니다. 대표적인 웹 브라우저로는 크롬(Chrome), 파이어폭스(Firefox), 사파리(Safari), 엣지(Edge) 등이 있습니다.브라우저는 클라이언트의 한 종류로, 주로 사용자 인터페이스를 통해 웹 서버와 상호작용합니다.

 

 

 


 

 

 

 

 

◼로그인 상태 유지와 쿠키 

쿠키를 이용한 인증에서 로그인 상태가 유지되는 방식은 다음과 같습니다:


로그인 상태가 유지

  • 로그인 후 쿠키 설정: 사용자가 로그인하면 서버는 사용자에게 인증 토큰(예: 세션 ID)을 포함한 쿠키를 Set-Cookie 헤더와 함께 브라우저에 전송합니다.
  • 쿠키 저장: 브라우저는 이 쿠키를 저장합니다. 쿠키에는 만료 시간, 도메인, 경로 등의 속성이 포함될 수 있습니다. 만약 쿠키의 만료 시간이 설정되어 있다면 그 시간 동안만 유효합니다.
  • 자동 쿠키 전송: 사용자가 같은 도메인으로 다시 접속할 때 브라우저는 자동으로 저장된 쿠키를 요청 헤더에 포함시켜 서버로 전송합니다.
  • 서버의 인증 확인: 서버는 요청에 포함된 쿠키를 확인하고, 쿠키가 유효하다면 사용자를 다시 인증된 상태로 간주합니다.

 

[서버의 인증확인 의문] 쿠키를 확인하는 기준이 언제이며, 유효하다고 판단하는 방법은? 지속적인 인증된 상태로 접근은 무슨 의미인가요?
[답]
쿠키 확인 기준:
요청 시점: 서버는 클라이언트(브라우저)로부터 요청을 받을 때마다 쿠키를 확인합니다.
쿠키 유효성: 서버는 쿠키에 저장된 세션 ID 또는 인증 토큰을 확인하여 유효한지 판단합니다.
유효성 판단 기준은 서버의 세션 저장소나 데이터베이스에 해당 세션 또는 토큰이 존재하고, 만료되지 않았는지 확인하는 것입니다.

유효하다고 판단하는 방법:
세션 ID 확인: 쿠키에 포함된 세션 ID가 서버의 세션 저장소에 존재하는지 확인합니다.
만료 시간: 쿠키 또는 세션의 만료 시간이 지나지 않았는지 확인합니다. 만약 만료 시간이 지나지 않았다면 유효한 것으로 간주됩니다.기타 검증: 추가적으로 IP 주소, 사용자 에이전트 등을 확인하여 보안을 강화할 수 있습니다.

지속적인 인증된 상태로 접근:
로그인 상태 유지: 사용자가 이미 인증된 상태로 계속 웹사이트를 이용할 수 있는 것을 의미합니다. 다시 로그인할 필요 없이, 브라우저가 쿠키를 자동으로 전송하여 서버가 사용자를 인증합니다.
사용자 편의성: 사용자는 웹사이트를 떠나거나 브라우저를 닫더라도 쿠키가 유효한 한 계속 로그인된 상태를 유지할 수 있습니다. 이는 특히 사용자가 자주 방문하는 사이트에서 매우 편리합니다.
요약하자면, 브라우저는 도메인에 맞는 쿠키를 자동으로 전송하고, 서버는 이 쿠키를 확인하여 사용자의 인증 상태를 유지합니다. 만료 시간이 길게 설정된 쿠키 덕분에 사용자는 다시 로그인할 필요 없이 계속 인증된 상태로 사이트를 이용할 수 있습니다.

 

 


 

 

사용자가 사이트를 나갔다가 다시 접속하는 경우

  • 첫 로그인 후 사이트를 떠남: 사용자가 사이트를 떠나거나 브라우저를 닫더라도 쿠키는 브라우저의 저장소에 남아 있습니다.
  • 다시 주소 입력 후 접속: 사용자가 나중에 동일한 사이트에 접속하면, 브라우저는 자동으로 해당 사이트의 쿠키를 포함하여 서버로 요청을 보냅니다.
  • 로그인 상태 유지: 서버가 이 쿠키를 확인하고 유효한 것으로 판단하면, 사용자는 다시 로그인할 필요 없이 지속적으로 인증된 상태로 접근할 수 있습니다.
[첫 로그인 후 사이트를 떠남 의문]
브라우저의 저장소에 남는다는 것은 어디를 의미하는가?
[답] 
쿠키 저장소: 일반적으로 쿠키는 브라우저가 자체적으로 관리하는 쿠키 저장소에 저장됩니다.
각 도메인별로 쿠키가 분리되어 저장되며, 브라우저의 설정 메뉴에서 쿠키를 확인하거나 삭제할 수 있습니다.


[첫 로그인 후 사이트를 떠남 의문] 쿠키가 남아 있다면, 로그인은 되어있는 상태인가, 로그아웃된 상태인가?
[답] 
쿠키가 남아 있는 동안 로그인 상태가 유지되는지 여부는 쿠키의 종류와 서버에서 설정한 정책에 따라 다릅니다.

세션 쿠키(Session Cookie):
저장 위치: 브라우저의 메모리에 저장됩니다.유효 기간: 브라우저를 닫을 때 삭제됩니다.로그인 상태: 브라우저를 닫으면 로그아웃됩니다.

영구 쿠키(Persistent Cookie):
저장 위치: 브라우저의 디스크에 저장됩니다.유효 기간: 설정된 만료 시간까지 유효합니다.로그인 상태: 브라우저를 닫아도 만료 시간까지는 로그인 상태가 유지됩니다.

>> 예시로 이해하기
1. 세션 쿠키의 경우:
사용자가 웹사이트에 로그인하여 세션 쿠키를 받습니다.브라우저를 닫으면 세션 쿠키가 삭제됩니다.다시 브라우저를 열고 사이트에 접속하면 로그인 상태는 유지되지 않습니다.
2. 영구 쿠키의 경우:
사용자가 웹사이트에 로그인하여 만료 시간이 설정된 영구 쿠키를 받습니다.브라우저를 닫아도 쿠키는 브라우저의 저장소에 남아 있습니다.다시 브라우저를 열고 사이트에 접속하면 쿠키가 서버로 전송되어 로그인 상태가 유지됩니다.

요약
브라우저의 저장소: 브라우저의 쿠키 관리 시스템에 저장됨.세션 쿠키: 브라우저를 닫으면 삭제되어 로그아웃됨.영구 쿠키: 만료 시간까지 브라우저를 닫아도 삭제되지 않아 로그인 상태 유지됨.
따라서, 사용자가 사이트를 떠나거나 브라우저를 닫더라도, 영구 쿠키가 남아 있다면 로그인 상태가 유지됩니다. 세션 쿠키라면 로그아웃 상태가 됩니다.

 


 


중요한 쿠키 속성

  • 만료 시간(Expiry Time): 만약 쿠키에 만료 시간이 설정되어 있으면, 그 시간 동안만 쿠키가 유효합니다. 예를 들어, 만료 시간이 30분으로 설정된 경우, 마지막 활동 시점으로부터 30분 동안만 로그인 상태가 유지됩니다.
  • 세션 쿠키(Session Cookie): 만약 쿠키가 세션 쿠키로 설정되어 있다면, 브라우저를 닫을 때 쿠키가 삭제됩니다. 이런 경우 브라우저를 다시 열고 사이트에 접속하면 로그인 상태가 유지되지 않습니다.
  • 영구 쿠키(Persistent Cookie): 만료 시간이 설정된 쿠키는 브라우저를 닫아도 유지되며, 만료 시간이 지나기 전까지는 로그인 상태를 유지할 수 있습니다.
[영구 쿠키 의문] 인스타그램 계정이나 유튜브 계정처럼 로그아웃하지 않으면 계속 접속해 있는 경우는 쿠키에 만료 기간을 적지 않아서인가요?
[답] 아닙니다. 인스타그램이나 유튜브 같은 서비스에서 사용자가 로그아웃하지 않고도 계속 접속해 있는 상태를 유지하는 이유는 쿠키의 만료 기간을 길게 설정했기 때문입니다.

영구 쿠키(Persistent Cookie): 이런 쿠키들은 특정 만료 시간이 설정되어 있어서 그 기간 동안 브라우저가 닫히더라도 쿠키가 유지됩니다. 만료 기간이 길게 설정된 경우 사용자가 오랜 기간 동안 다시 로그인할 필요 없이 접속 상태를 유지할 수 있습니다.
리프레시 토큰(Refresh Token): 일부 서비스는 쿠키 만료 시간이 짧더라도 백그라운드에서 자동으로 새 쿠키를 발급받는 방식으로 사용자의 로그인 상태를 유지합니다.


따라서, 로그인 상태가 유지되는지 여부는 쿠키의 만료 시간 및 속성에 따라 다릅니다. 만료 시간이 설정되어 있고 그 시간 내에 접속하면 로그인 상태가 유지됩니다. 세션 쿠키라면 브라우저를 닫고 다시 열었을 때 로그인 상태가 유지되지 않습니다.

 

 

 

 


 

 

 

◼보안(중요!) 

 

Secure

http의 보안을 위한 https에서 적용되는 것이며, 'Secure;' 작성으로 리스폰스가 암호화가 됩니다.

Set-Cookie: cookie_name=cookie_value; Secure;

 

 

 

HttpOnly

클라이언트가 JS코드로 해당 쿠키의 접근을 막습니다. 자바스크립트 코드로는 가지고 올 수 없고, 그냥 쿠키를 설정한 웹사이트에 리퀘스트로 보낼 는 있습니다.  'HttpOnly;' 작성하면 됩니다.

Set-Cookie: cookie_name=cookie_value; Secure; HttpOnly;

 

 

 

 

 

 

[참고] 챗GPT

[출처] 코드잇 유저기능