쿠키와 세션

백승용·2020년 12월 16일
1

쿠키

http 요청은 Connectionless와 Stateless라는 특징이 있어 모든 사용자의 요청마다 연결과 해제의 과정(Connectionless)을 거치면서 연결 상태를 유지하지 않고(Stateless) 상태정보를 저장하지 않으면서 서버의 자원을 크게 절약할 수 있다. 하지만 사용자의 정보를 식별할 수 없어서 같은 사용자가 여러번 요청하면 매번 새로운 사용자로 인식하는 단점이 있습니다.

웹 사이트를 생각해보면 로그인 한번만 하면 여러 페이지를 이동하면서 로그인을 하지 않아도 된다. 이런 http의 Stateless와 Connectionless의 특성들을 보완한 기술이 쿠키와 세션입니다.

쿠키란 서버가 일방적으로 클라이언트에 전달하는 작은 데이터를 말합니다.
쿠키는 서버가 사용자의 웹 브라우저에 저장하는 데이터를 말합니다.

브라우저마다 저장되는 쿠키는 다릅니다. (크롬으로 남긴 쿠키는 인터넷 익스플로어에서 사용할 수 없습니다.) 서버에서는 브라우저가 다르면 다른 사용자로 인식합니다.

서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단이고 해당 도메인에 대해 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청 시 헤더에 쿠키를 함께 전달한다.
클라이언트가 서버에 요청을 하면 서버가 응답할 때 쿠키에 저장하고자 하는 정보를 Header의 Set-Cookie로 함께 전달합니다.

쿠키 사용으로 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야할 정보들을 저장하고 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있고 사용자의 행동과 패턴을 분석하고 기록한다.

쿠키 단점으로 쿠키에 대한 정보를 매번 헤더에 추가하여 보내기 때문에 상당한 트래픽을 발생시키고 결제 정보 등을 쿠키에 저장하였을 때 쿠키가 유출되면 보안에 대한 문제점도 발생할 수 있습니다.

다음은 쿠키 옵션인데 외우자!!!
resave : 세션에 요청이 들어간 후에 세션에 변동이 있든 없든 무조건 저장하겠다는 옵션, 디폴트 값은 true이나 false로 하는 것을 권장한다.

  • 세션이 변경되지 않아도 계속 저장됨(덮어쓰기)
    saveUninitialized : 세션이 session store에 저장되기 전에 uninitialized 된 상태로 만들어서 저장한다.
  • 세션을 초기값이 지정되지 않은 상태에서도 미리 만들어 저장함

세션

세션은 쿠키를 이용합니다. 어떤 웹 브라우저가 서버에 요청을 하면 서버는 세션 아이디를 할당해서 응답할 때 함께 전달합니다. 웹 브라우저는 이 세션 아이디를 쿠키에 저장해두고 매 요청마다 세션 아이디를 함께 전달합니다. 서버는 세션 아이디를 바탕으로 사용자를 식별하고 사용자의 데이터를 서버에 저장하여 관리합니다.

[세션 동작 순서]
1. 클라이언트가 서버에 처음으로 Request를 보냄 (첫 요청이기 때문에 session id가 존재하지 않음)
2. 서버에서는 session id 쿠키 값이 없는 것을 확인하고 새로 발급해서 응답
3. 이후 클라이언트는 전달받은 session id 값을 매 요청마다 헤더 쿠키에 넣어서 요청
4. 서버는 session id를 확인하여 사용자를 식별
5. 클라이언트가 로그인을 요청하면 서버는 session을 로그인한 사용자 정보로 갱신하고 새로운 session id를 발급하여 응답
6. 이후 클라이언트는 로그인 사용자의 session id 쿠키를 요청과 함께 전달하고 서버에서도 로그인된 사용자로 식별 가능
7. 클라이언트 종료 (브라우저 종료) 시 session id 제거, 서버에서도 세션 제거

[세션 특징]

  • 세션 아이디는 브라우저 단위로 저장되고 브라우저 종료시 소멸됩니다.
  • 로그인한 사용자에 대해서만 세션을 생성하는 것이 아닙니다. 따라서 로그아웃하면 새로운 사용자로 인식해서 새로운 세션이 생성됩니다.
  • 사용자가 로그인 했는지, 닉네임 등의 사용자가 요청 할 때 마다 필요한 청보들을 세션에 담아두면 사용자 디비에 접근할 필요가 없어서 효율적입니다.


참조 : https://app.getpocket.com/read/2654107716

0개의 댓글