[네트워크] 쿠키와 세션
현재 웹이나 모바일 환경에서 서버와 통신을 할 때 가장 많이 쓰이는 방식은 HTTP 입니다.
HTTP 프로토콜은 Connectionless, Stateless 한 특성을 가지기 때문에 서버는 클라이언트가 누구인지 매번 확인해야합니다.
이러한 단점을 보완하기 위해 사용하는 것이 쿠키와 세션입니다.
먼저 간단하게 Connectionless 와 Stateless 가 무슨 뜻인지 살펴보겠습니다.
Connectionless
- 비연결지향형
- 클라이언트의 요청 이후 서버가 그 요청에 알맞은 응답을 보낸 다음에 연결을 끊는 처리 방식
Stateless
- 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식
- 연결을 끊는 순간 클라이언트와 서버 통신이 끝나며 상태정보는 유지하지 않음
HTTP 는 위와 같은 특징을 가지지만, 실제로는 데이터를 유지해야하는 경우가 많습니다.
예를 들어 어떤 서비스를 이용할 때 페이지를 이동할 때마다 사용자를 인증하기 위하여 매번 로그인을 다시 해야한다면 굉장히 불편할 것입니다.
따라서 저희는 어떤 상태 정보를 유지하기 위해서 쿠키와 세션을 사용합니다. 쿠키는 클라이언트에 저장되고, 세션은 서버에 저장됩니다.
쿠키 (Cookie)
쿠키는 클라이언트의 로컬에 저장되며 키와 값이 들어있는 작은 데이터 파일입니다.
HTTP 에서 클라이언트의 상태 정보를 로컬에 저장했다가 필요 시에 정보를 참조하거나 재사용할 수 있게 됩니다.
쿠키는 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해진다면 클라이언트가 종료되어도 인증이 유지된다는 특징이 있습니다.
구성 요소
- 이름
- 값
- 유효시간
- 도메인
- 경로
동작 방식
- 클라이언트가 서버에 로그인 요청을 합니다.
- 서버는 클라이언트의 로그인 요청의 유효성을 확인하고, Response Header 에 set-cookie: ... 를 추가하여 응답을 전송합니다.
- 클라이언트는 이후 서버에 요청할때 전달받은 쿠키를 자동으로 Request Header 에 추가하여 요청합니다. 쿠키의 기한이 정해져있지 않고 이를 직접 지우지 않는다면 쿠키는 반 영구적으로 남아있게 됩니다.
사용 예시
- 어떤 사이트에서 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?"
- 팝업에서 "오늘 더 이상 이 창을 열지않음" 체크박스
세션 (Session)
세션은 쿠키를 기반으로 하지만, 사용자 정보 파일을 클라이언트에 저장하는 쿠키와는 달리 세션은 서버측에서 관리합니다.
서버에서는 클라이언트를 구분하기 위해 세션 ID 를 부여하며 브라우저가 종료되기 전까지 클라이언트의 인증상태를 유지하게 해줍니다. 물론 이때 접속시간에 제한을 두어 일정시간동안 응답이 없다면 정보가 유지되지 않게 설정이 가능합니다.
사용자 정보를 서버에 보관하기 때문에 쿠키보다는 보안이 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 되어 성능에 저하가 생길 수 있습니다.
동작 방식
- 클라이언트가 서버에 로그인 요청을 보냅니다.
- 서버는 로그인 요청의 유효성을 확인한 뒤 Unique 한 ID 를 session ID 라는 이름으로 저장합니다.
- 서버 응답 시 Response Header 에 set-cookie: ... 를 추가하여 응답을 보냅니다.
- 클라이언트는 이후 서버에 요청할 때 전달받은 쿠키를 자동으로 Request Header 에 추가하여 요청합니다.
- 서버에서는 Request Header 의 session ID 값을 저장된 세션 저장소에서 찾아보고 유효한지 확인 후 요청을 처리하고 응답을 전송합니다.
사용 예시
- 로그인과 같이 보안상 중요한 작업 수행할때 사용
쿠키와 세션의 차이점
쿠키 | 세션 | |
저장 위치 | 클라이언트 (= 사용자 PC) | 서버 |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되어도 만료시간이 지나지 않으면 유지됨) |
브라우저 종료시 삭제 (기간 지정 가능) |
보안 | 탈취나 변조 가능 | 세션은 ID 값만 가지고 있고 서버에도 저장이 되어있기 때문에 상대적으로 안전 |
속도 | 파일에서 읽기 때문에 상대적으로 빠름 | 요청마다 서버에서 처리하기 때문에 상대적으로 느림 |
위와 같이 세션이 쿠키에 비해 보안도 높은 편이지만 쿠키를 사용하는 이유는, 세션은 서버에 저장되어 서버자원을 이용하기 때문에 사용자가 많을 경우 소모되는 자원이 많기 때문입니다.
이런 자원관리 차원에서 쿠키와 세션을 적절한 요소에 사용하여 서버 자원의 낭비를 방지하고 속도를 높일 수 있습니다.
참고 링크
https://hahahoho5915.tistory.com/32
https://interconnection.tistory.com/74
'Studies > Computer Science' 카테고리의 다른 글
[운영체제] 캐시 (Cache) (0) | 2022.08.19 |
---|---|
[Linux] Linux & Unix (0) | 2022.08.18 |
[네트워크] JSON & XML (0) | 2022.07.05 |
[네트워크] TCP & UDP (0) | 2022.06.06 |
[네트워크] RESTful, REST API (0) | 2022.06.03 |