쿠키와 세션

stoph·2023년 2월 12일
0

최근에 면접을 보면서 쿠키와 세션이 무엇인지 설명해달라는 질문을 받았는데 평소에 어렴풋이 알고 있었어서 제대로 답변을 하지 못했다.

워낙 기본적인 개념이기도 하고, 다음 번에는 제대로 대답할 수 있도록 쿠키와 세션에 대해서 정확하게 정리하기로 했다.

먼저 짚고 넘어갈 점

세션은 서버쪽에 데이터가 저장되고, 쿠키는 클라이언트쪽에 데이터가 저장되는 점 때문에 서로 비교가 되는 것 같은데 사실 세션을 사용하기 위해 쿠키를 이용하는 것이다.

둘은 서로 반대되는 개념이 아니므로 이를 먼저 유의하자.

쿠키

하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 일컫는다.

왜 필요한가

결론부터 이야기 하자면, 장치 간의 통신을 하는데에 가장 많이 쓰이고 있는 HTTP 프로토콜의 특성 때문에 등장하게 되었다.

  • 비연결성 (Connectionless)
    요청이 처리 되어 응답까지 완료 된 이후 연결을 유지하지 않는다.

  • 상태유지안함 (Stateless)
    이전에 들어왔던 요청에 대한 정보를 유지하지 않음

HTTP는 각각의 모든 요청을 독립적으로 처리하기 때문에 요청 간의 상호작용이 불가능하다.

하지만, 실제로는 이전의 요청 정보가 유지되어야 하는 경우가 많다.
예를 들어, 쇼핑몰의 장바구니는 다른 요청을 시도해도 담아놓았던 상품 정보가 그대로 유지되어야 한다.

이 처럼 요청 정보를 유지하기 위해서 어떠한 방법이 필요한데, 이를 해결하고자 등장한 것이 바로 쿠키이다.

쿠키의 생성과 동작

cookie1. 유저가 요청을 보낸다. (장바구니 정보 포함되어 있음)
2. 서버는 요청을 받고 장바구니 정보에 대한 쿠키를 생성한다.
3. 서버는 Set-Cookie 헤더에 쿠키를 세팅하여 응답한다.

이후에 유저는 요청할 때마다 쿠키를 같이 전달하고 서버는 쿠키에 담긴 정보를 참고하여 응답하게 된다.

쿠키의 특징

  • 쿠키는 유효기간이 존재하여 기간이 지난 쿠키는 정상적으로 동작하지 않는다.
  • 쿠키는 도메인마다 구분되어 존재한다. 따라서, 요청 시 가지고 있는 모든 쿠키가 전송되는 것이 아니라 해당 도메인에 대한 쿠키만 전송된다.

세션

반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다.

왜 필요한가

앞서 쿠키에서 쇼핑몰의 장바구니를 예시로 들어 설명했는데 이 뿐만 아니라 다양한 정보를 쿠키에 담을 수 있다.

예를 들어, 로그인이 필요한 서비스는 회원의 아이디 및 비밀번호를 쿠키에 담아서 매 요청마다 어떤 유저인지 추적 할 수 있다.

그런데 유저 정보와 같은 민감한 정보를 쿠키를 사용하여 다루게 되면 치명적인 보안 문제가 발생할 수 있다.

  • 쿠키 탈취 위험성
    쿠키는 유저의 브라우저 및 PC에 저장되고, 요청마다 서버에 전송된다. 유저의 PC가 해킹되어 탈취될 수도 있고, 요청 중에 네트워크 상에서도 쿠키가 탈취될 수 있다.

  • 의심스러운 요청 필터링 불가능
    쿠키는 유효기간이 만료되지 않으면 계속해서 사용할 수 있다.
    따라서, 해킹이 의심되는 요청이 들어와도 쿠키가 만료되지 않는 이상 이를 막을 방법이 없다.

이러한 쿠키의 보안적 측면의 문제를 해결하고자 등장한 것이 세션이다.

세션의 동작 원리

session1. 유저가 로그인 요청을 보낸다.
2. 서버는 유효한 유저인지 검증하고 해당 유저에 대한 고유의 세션 ID 값을 생성한다.
3. 생성된 세션 ID 값과 유저 정보를 세션 저장소(DB)에 보관한다.
4. 생성한 세션 ID 값이 담긴 쿠키를 생성한다.
5. Set-Cookie 헤더에 세션 ID 값이 담긴 쿠키를 세팅하여 응답한다.

이후에 유저는 요청할 때마다 세션 ID 값이 담긴 쿠키를 전달하고 서버는 세션 저장소에서 쿠키에 담긴 세션 ID 값을 참조하여 유저 정보를 추적한다.

세션의 장점

  • 유저에 대한 정보가 브라우저에 저장되지 않고 서버에만 저장되어 있기 때문에 탈취되어도 유저의 정보를 확인할 수 없다.
  • 해킹이 의심되는 요청이라면 세션 저장소에서 해당 세션 ID 값을 삭제하여 요청을 무력화 할 수 있다.

세션의 단점

  • 보통 세션 저장소로 데이터베이스를 이용하기 때문에 이 데이터베이스를 잘 유지하고 관리해야 하는 비용이 든다.
  • 매 요청시 마다 세션 ID 값을 참조하기 위한 DB I/O가 발생하게 된다.
  • 유저의 수가 늘어날 수록 세션을 저장하는 데이터베이스를 확장해야 한다.

0개의 댓글