1. 쿠키란 ?
클라이언트에 저장되는 Key-Value 형태의 작은 데이터 파일을 뜻함.
2. 무엇을 저장할까 ?
1) 사이트에 방문한 이력
2) 검색 기록
3) 로그인 상태
3. 쿠키의 특징
1) 브라우저 단위로 쿠키를 생성 한다.
(사용자 단위가 아니다)
같은 기기로 동일한 도메인 사이트를 접속 했는데, 크롬의 쿠키와 사파리의 쿠키가 다르다.
예시로 네이버를 크롬으로 접속 할 때, 로그인이 되어 있는데, Edge로 접속 하면 로그인이 되어 있지 않다.
2) 다른 도메인을 대신 해서 쿠키를 발급 받을 수 없다.
3) 만료 시간 까지 상태 정보를 유지 한다.
만료 시간은 서버가 쿠키를 만들 때, 설정해 줄 수 있다.
4. 쿠키를 사용 하는 이유 ?
웹사이트 재방문 시 효율적으로 서비스를 제공 하기 위함 >> 클라이언트의 편의성 제공
HTTP 프로토콜의 특성상 상태를 유지 할 수 없으므로, 쿠키를 사용 해서 사용자 정보를 저장 한다.
5. 동작 방식
클라이언트는 서버에게 쿠키를 요청 한다.
요청을 받은 서버는 브라우저에 대한 정보를 받아서, 브라우저에 대한 정보와 함께 클라이언트에게 쿠키를 전달 한다.
응답을 받은 쿠키로 계속 해서 클라이언트는 서버로 요청을 보낸다.
만약에 무언가 쿠키의 정보를 업데이트 하게 되면, 서버는 업데이트된 쿠키를 다시 클라이언트 에게 보내 주게 된다.
6. 쿠키는 언제 사용 할까 ?
1) 장바구니
2) 로그인 유지
3) 오늘 하루 이 창을 다시 보지 않기
어떤 아이디를 찾아 달라고 이메일과 패스워드를 서버에게 요청 한다.
DB를 치고 유효한 회원이면 서버는 정보 (이메일 / 패스워드) 를 가지고 그 정보를 쿠키에 담게 된다.
그리고 서버 에서 쿠키의 만료 시간 까지 설정 해서, 클라이언트에게 응답과 함께 쿠키 데이터를 전송 한다.
그러면 클라이언트는 쿠키를 받고, 브라우저의 쿠키 저장소에 쿠키를 저장 하게 된다.
이후, 시간이 흘러, 클라이언트가 쿠키가 발행된 특정 웹사이트를 재접속 하게 될 때,
클라이언트는 쿠키 저장소에 해당 웹사이트의 쿠키가 있는지를 확인 하게 된다.
그러면 데이터 (이메일 / 패스워드) 가 담긴 쿠키를 가지고 특정 웹사이트는 사용자 정보를 보고
클라이언트에게 로그인된 상태의 페이지를 보여 주게 된다.
7. 문제점
만약 쿠키가 다른 사용자에게 도난 당하면 ?
1) 쿠키 값을 임의로 바꿀 수 있게 된다.
2) 로그인 정보가 담긴 쿠키 라면 다른 사용자가 대신 로그인을 할 수 있게 된다.
3) 만약 쿠키에 중요한 정보가 들어 있다면, 도용 등의 많은 피해가 발생 할 수 있게 된다.
이렇게 쿠키는 보안에 취약 하다는 단점을 지니고 있다.
8. 해결 방법
쿠키와 세션을 같이 사용 하는 방법으로 취약한 보안성을 해결 할 수 있다.
세션 이란 ?
웹 사이트에 이용 되는 사용자의 정보를 서버에 저장 하는 방법
9. 쿠키와 세션을 같이 사용 할 때의 동작 방식
로그인의 경우 라고 가정할 때,
로그인 관련 테이블에 세션에 정보를 담을 특정한 칼럼을 포함 하는 설계를 하게 될 것이다.
사용자가 로그인을 시도할 때, 클라이언트의 요청으로 받아진 이메일 + 패스워드를 확인 해서,
서버에서 검증이 된다면 유저 아이디를 세션 정보가 존재 하는 테이블에서 검색을 하게 된다.
만약에 검색이 되면, 그 때 검색이 된 세션 정보를 "세션 아이디" 라고 한다면,
그 세션 아이디 칼럼의 값을 그대로 반환 하게 되고,
만약에 검색이 되지 않으면, "세션 아이디" 칼럼의 값을 새로 만들어서, 반환 하게 된다.
그리고 쿠키에 이 세션 정보 값 까지 저장을 하게 되어, 브라우저의 쿠키 저장소에 저장을 하게 된다.
정리하자면, 처음 클라이언트는 서버로 이메일 + 패스워드 데이터를 보냈지만,
서버는 클라이언트 에게 이메일 + 패스워드에 해당하는 "세션 아이디" 값을 보내 주게 된다.
다시 로그인을 할 때 서버로 쿠키에 들어 있는 세션값만 보내게 된다. (보안에 유리)
10. 세션을 서버에 두는 이유 ?
쿠키에 sessionId 외에 정보를 기록 하지 않음으로써 안전성을 확보 할 수 있다.
11. 단점
1)
유저 정보가 서버에 있기 때문에 처리 속도에 대한 비용 발생
클라이언트가 계속 서버 정보를 받아야 하기 때문에, 유저가 많아질수록 서버의 자원을 사용하므로,
처리 속도에 대한 비용이 발생 할 수 밖에 없게 된다.
2)
서버의 자원을 사용 하기 때문에, 유저가 많아질수록 저장 공간에 대한 비용이 발생 하게 된다.
'개념 > Web' 카테고리의 다른 글
네트워크 액세스 계층 - 이더넷 (0) | 2023.12.20 |
---|---|
TCP와 UDP (0) | 2023.12.20 |
DNS (Domain Name System) (1) | 2023.12.19 |
네트워크 포트 (Port) 번호 (0) | 2023.12.19 |
HTTPS (0) | 2023.10.25 |