728x90
반응형
상태 유지 및 관리의 필요성
- 최초의 웹은 단순히 문서를 전달 받고 정보를 공유하는 목적으로 사용되었으며, 이 경우에는 상태 유지 및 관리가 굳이 필요하지 않다.
- 그러나 오늘날의 웹은 쇼핑몰에서 원하는 상품을 장바구니 혹은 카트에 담고 쇼핑이 완료되면 결제하고 결제가 완료되면 정상적으로 결제가 되었는지 확인을 하며, 예상 도착일을 본다.
- 또한, 한번의 로그인을 통한 다른 페이지 접근 할 경우 나에 대한 상태 정보가 유지된다.
- 이러한 상태 유지 및 관리와 사용자 인증 수단을 위해서라면 쿠키가 사용된다.(내가 만든 쿠키🍪~~ 너를 위해 구웠지!🍪)
쿠키
- 쿠키를 통해 사용자 식별 및 세션 유지를 통해 클라이언트와 서번 간의 상태 관리를 한다.
- 웹의 중요한 기술 중의 하나로 현재 가장 많이 사용되고 있는 인증 방식이다.
- 쿠키의 종류는 지속 쿠키, 세션 쿠키가 있으며, 일반적으로 말하는 쿠키는 지속 쿠키, 세션은 세션 쿠키이다.
쿠키 헤더 구조
- 서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키 값이 세팅된다.
- 해당 사이트 접근 시 마다 클라이언트는 Set-Cookie에 의해 세팅 된 값을 Cookie헤더에 세팅하며 요청 메세지를 전달한다.
- 서버는 이를 통해 상태 관리를 한다.
지속 쿠키(Persistent Cookie)
- 지속 쿠키는 웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장이 된다.
- 클라이언트 PC 사용자들은 해당 쿠키 정보를 열람할 수 있다.
지속 쿠키(Persistent Cookie) - 쿠키 발급 과정
- 로그인 기능을 예시로 들어서 과정을 설명해보겠다.
- 로그인 기능이므로 id(qwer1234)와 password(************)를 입력 후 요청을 하게 된다.
- id와 password가 정상적인 규격이 맞춰줘 있다면 로그인에 성공을 하게 될 것이다.
- 그렇게 되고 나서 응답값을 살펴보면 setCookie라는 헤더가 세팅이 되게 되고 id는 qwer1234이라는 쿠키값이 설정이 되게 된다.
- 그리고 이러한 부분을 응답으로 보내주게 되면은 클라이언트 측에서는 해당 사이트에 대한 id=qwer1234라는 쿠키값을 세팅하게 된다.
- 그 다음, 다시 사이트에 접근을 하게 되면 웹브라우저에서는 쿠키 헤더를 통해서 해당 사이트에 대한 쿠키값을 세팅을 해주게 된다.
- 그래서 이렇게 요청을 하게 되면 서버 측에서는 이 쿠키라는 헤더를 통해서 사용자 식별을 하게 된다.
지속 쿠키(Persistent Cookie) - 쿠키 폐기 과정
- 로그 아웃 기능을 예시로 들어서 과정을 설명해보겠다.
- 로그아웃 버튼을 통해 로그 아웃 요청이 되고 어플리케이션 서버 측에서는 응답을 보낼 때 새 쿠키를 보내게 된다.
- 삭제 시킬 값에 대해서 deleted라는 값을 id에 세팅을 해준다.
- 그렇게 되면 이 아이디라는 값이 사라져버리게 되는 로직을 가진다.
지속 쿠키(Persistent Cookie) 문제점
- 쿠키를 폐기하여도 해당 값을 알고 있으면 재사용이 가능한 문제점이 있다.
- 즉, 폐기 후에도 재사용이 가능하다는 것이다.
- 또한, 쿠키 값이 평문일 경우 변조희 위협이 있기 때문에 사용자 식별 및 인증 관리를 할 경우 반드시 암호화 과정을 거쳐야 한다.
- 또한, 쿠키의 유효기간에 따른 폐기 방법, 암호화 알고리즘에 대한 적절성 등을 잘 검토하여 쿠키 발급 로직을 구현해야 한다.
세션 쿠키(Session Cookie)
- 세션 쿠키는 웹 서버에서 발급 시 클라이언트 웹 브라우저 캐시에 저장된다.
- 정상적으로 로그인 시 웹 어플리케이션 서버는 서버 측에 해당 세션에 대한 정보를 저장한다.
- 이때 서버에서 세션을 저장하는 방법으로 메모리, 파일 시스템, 데이터베이스에 저장하는 방법들이 있으며, 일반적으로 메모리에 저장해 둔다.
- 그리고 세션은 문자가 암호화, 난독화 되어 있는 형태가 아닌 임의의 문자들이 나열된 것으로 공격자 측에서는 특정 사용자의 세션을 추측하기는 어렵다.
세션 쿠키(Session Cookie) - 세션 발급 과정
- 지속 쿠키를 기반으로 된 로그인 기능을 예시로 두고 설명해보겠다.
- 로그인을 최초에 하게 되고 만약 정상적인 id와 password를 입력했다면, 의미 없는 세션값이 이 로그인이라는 기능을 통해서 맵핑 정보가 담기게 된다.
- 그리고 세팅을 해뒀으면 이제 set cookie를 통해서 이 웹브라우저에 해당 세션을 세팅해줘야하므로 이 set cookie의 헤더 내에 세션값을 넣어두게 된다.
- 이 세션값은 의미있는 세션값으로 변한다. 이제 이것을 활용해서 사용자 식별을 하게 된다.
- 그렇게 하여 해당 사이트에 접근할 때마다 쿠키라는 헤더를 통해서 이 세션값을 세팅을 해주게 된다.
- 그러면 이제 어떤 페이지를 접근하던지 상관없이 사용자 식별이 된다.
세션 쿠키(Session Cookie) - 세션 폐기 과정
- 로그 아웃을 클릭하게 되면 쿠키랑은 초반에 동일하다. 하지만 처리 로직이 달라진다.
- 지속 쿠키 같은 경우에는 사용자 PC에 있는 쿠키값을 삭제했다면, 세션 같은 경우에는 서버에 있는 의미 있는 세션이었던 값을 지워버리게 된다.
- 그러면 이 세션은 의미가 없는 세션으로 변하게 된다.
- 이게 보안적으로 훨씬 뛰어나다.
- 이렇게 하면 문제가 되었던 폐기 후 재사용에 대한 위협은 세션에 없게 된다.
- 왜냐하면, 폐기를 하게 되면 정보가 완전히 없어지게, 사라지게 되기 때문이다.
그러면 세션 쿠키를 사용하면 되는건데 왜 지속 쿠키를 사용하는 건가..?
- 지속 쿠키의 필요성
- 세션 쿠키를 사용하면 보안 담당자, 개발자들이 편하다.
- 그러나 대규모 웹 서비스의 경우 수 많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져온다.
- 이러한 이유로 서버에 부담이 낮은 지속 쿠키 사용을 많이 선호한다.
- 편리성(지속 쿠키 < 세션 쿠키) / 서버 부하율(지속 쿠키 < 세션 쿠키)
- 웹 서비스 규모와 인프라 구성에 알맞게 사용해야 한다.
728x90
반응형
'Network' 카테고리의 다른 글
REST API Node란 (2) | 2024.10.07 |
---|---|
웹 아키텍처 분석 (3) | 2024.09.08 |
HTTP GET / POST (1) | 2024.09.08 |
웹의 핵심 기술 HTTP 프로토콜 (1) | 2024.09.08 |
자원을 지정하는 URL (2) | 2024.09.07 |