우아한테크코스 테코톡
디투의 쿠키와 세션
카테고리 : 우아한테크코스 테코톡
https://youtu.be/XgcCkcKGbys?si=fW8l8Ei2q5ntoE2f
디투의 쿠키와 세션
쿠키
- 쿠키는 웹사이트에 접속 했을 때 브라우저 안에 저장되는 아주 작은 데이터 파일
- 크게 세 가지를 저장하는데 사이트에 방문한 이력, 검색 기록 그리고 로그인 상태와 사용자에 대한 정보를 저장한다
쿠키의 특징
- 쿠키는 브라우저 단위로 생성
- 쿠키가 사용자 단위가 아니라 브라우저 단위로 생성된다 예를 들어 같은 기기로 같은 도메인 사이트에 접속을 했는데 크롬으로 접속해서 발행되는 쿠키와 사파리로 접속해서 발행되는 쿠키는 엄연히 다른 것이 된다
- 다른 도메인을 대신하여 쿠키 발급 불가
- 예를 들어 카카오 닷컴이 우아한 닷컴의 쿠키를 대신해서 발행할 수 없다
- 만료 시간까지 상태 정보 유지
- 로그인 유지와 같은 상태정보를 만료 시간까지 쿠키는 유지할 수 있다
- 또 이 때 만료 시간은 서버가 쿠키를 만들때 설정을 해줄 수 있다
쿠키 사용 이유
- 쿠키는 사용자의 편의를 위한 기술
- 많은 도메인 사이트들은 사용자를 추출을 해 가지고 사용자에게 맞춤형 서비스를 제공하고 싶어 하는데 근데 상태를 유지할 수 없는 HTTP 프로토콜의 특성상 불가능하기 때문에 쿠키를 이용해 상태를 저장하는 것이다
동작 방식
- 먼저 클라이언트가 서버측에 요청을 보냈는데 요청을 받은 서버는 브라우저에 대한 정보를 받은 다음에 브라우저에 대한 정보를 쿠키 안에 넣는다
- 넣고나서 클라이언트에게 응답과 함께 쿠키를 보내 주게 된다
- 응답을 받은 쿠키는 이 쿠키를 이용해서 계속해서 서버에게 리퀘스트를 보낸다
- 또 서버는 쿠키를 받는다
- 근데 쿠키에 업데이트 사항이 만약에 필요하다고 생각이 된다면 서버는 쿠키를 조금 바꿔가지고 클라이언트에게 응답으로 보내주고 만약에 그렇지 않다면 그대로 받아서 그대로 반환하게 된다
쿠키가 이용되는 곳
- 장바구니 기능
- 로그인 하지 않은 상태로 장바구니에 들어가서 물건 10개를 담았다고 가정을하는데 렉이 걸려 버려 가지고 브라우저가 닫혀버렸을때 다시 브라우저에 접속을 해보면 장바구니 안에 물건이 그대로 열 개 다 들어 있을때 쿠키가 이용된 것이다
- 오늘 이 창을 다시 보지 않기
- 도메인 사이트를 들어가다 보면 오늘 하루 이 창을 다시 보지 않기 라는 창을 볼 수 있었을텐데 이 때 체크박스에 체크를 한 상태로 요청을 받게 되면은 그날 하루만 창을 다시 보지 않을 수 있다 이 때 쿠키가 이용된 것이다
- 로그인 유지
- 클라이언트는 로그인을 하기 위해서 메일과 패스워드를 요청으로 보내게 된다
- 이메일이랑 패스워드를 보고 누군지 판단하고 유저아이디를 알려 준다
- 서버는 유저아이디를 알고 쿠키 안에 그대로 적어놓는다 추가적으로 만료 시간까지 적어놔서 클라이언트에 응답과 함께 보내준다
- 클라이언트 측에서는 이 쿠키를 받은 다음에 브라우저의 쿠키 저장소 안에 쿠키를 저장한다
- 클라이언트는 브라우저의 쿠키 저장소에 해당 도메인의 쿠키가 있는지 확인을 하는데 쿠키를 받았기 때문에 쿠키가 있는 것을 확인을 하고 쿠키를 가지고 접속을 시도 한다
- 쿠키 안에 유저아이디를 보고 쿠키에 적혀진 사용자 정보를 보고 확인한 후에 클라이언트한테 로그인 된 상태의 페이지를 보여주게 된다
- 이렇게 쿠키 안에 유저정보가 들어있기 때문에 로그인 유지를 할 수 있다
쿠키가 탈취 당하면?
- 쿠키가 탈취당하게 된다면 해커가 쿠키의 값을 임의로 바꿀 수 있다
- 해커가 쿠키 안에 로그인 쿠키 안에 사용자 정보가 들어있다면 이 사용자 정보를 이용해서 대신 로그인 할 수도 있다
- 만약 쿠키에 주민등록번호나 신용카드번호와 같은 중요 정보가 있었다면…
- 이를 위한 해결 방법이 있는데 쿠키와 세션을 같이 사용하는 방법이다
세션
- 세션은 웹사이트에 이용되는 사용자 정보를 서버에 저장하는 방법이다
- 쿠키는 웹사이트에 이용되는 사용자 정보를 브라우저 안에 저장하고 있었다 이거는 조금 다르게 서버에 저장하는 방법이다
쿠키 + 세션
- 클라이언트는 서버에게 이메일과 패스워드를 요청으로 보냅다
- 서버측에서 조금 다른 반응이 일어나는데 서버에 세션 디비라는게 생겼다
- 세션 디비에는 세션 아이디와 유저 아이디가 서로 매칭되어 한 컬럼을 이루고 있는데 클라이언트의 요청으로 받아진 이메일이랑 패스워드를 확인을 하고 검증이 된다면 유저 아이디를 세션 디비에서 검색을 한다
- 만약에 검색이 된다면 그 때 검색이 된 세션 아이디를 그대로 반환을 하지만 만약에 검색이 되지 않는다는 유저아이디에 맞는 세션 아이디를 새로 만들어 가지고 반환을 하게 된다
- 쿠키에 세션 아이디를 맞게 적어주면서 로그인에 대한 응답을 했다
- 그럼 클라이언트는 쿠키를 받아서 다시 클라이언트의 쿠키 저장소 안에 저장을 하게된다
- 쿠키 저장소 안에 저장되어 있던 쿠키를 그대로 다시 도메인 사이트에 접속을 할 때 요청과 함께 보내주게 된다
- 쿠키에는 세션 아이디가 적혀 있었다
- 서버는 이 세션 아이디를 보고 만약 세션이 만료되지 않았다면 세션 아이디를 보고 세션 아이디에 매칭되는 유저를 확인한다
- 로그인 된 상태의 페이지를 클라이언트에게 보여주게 된다
세션을 서버에 두는 이유
- 쿠키에 세션 아이디밖에 없다 쿠키에 세션 아이디 외에 사용자 정보가 없기 때문에 쿠키가 탈취 되더라도 상대적으로 안전하게된다
- 또 세션을 관리하는 사람들은 전문가이기 때문에 해커로부터 좀 더 안전성 있게 방어를 할 수 있다
단점
- 유저 정보가 서버에 있기 때문에 클라이언트 안에서 서버 정보를 계속 받아오는 것에 대해서 속도에 대한 비용이 발생 유저가 더 많아지게 된다면 속도는 더더욱 느려지게 된다
- 서버 자원을 사용을 하기 때문에 유저가 많아지게 된다면 메모리적인 문제가 발생할 수도 있다
- 토큰을 사용해서 해결 가능하다