티스토리 뷰
이번에 우연히 신입사원 필기시험 문제 하나 정도를 만들어 달라는 요청을 받았다. 막연히 생각을 하였다. 그러나 아이디어가 떠오르지 않았다. 그래서 참고를 할까하고 인터넷 검색을 하였다. 검색 하던 중 WEB 개발자로써 괜찮은 문제를 발견하였다.
세션과 쿠키의 차이점을 서술하시오
그리고 바로 밑에 문제가 원하는 정답의 척도가 있었다.
- 서버와 클라이언트 차이에 대해 서술하면 정답으로 인정
- 라이프 사이클에 대한 설명이 있다면 금상첨화
- 세션이 보안적으로 안전 하다는 것에는 이견이 있으나, 여기서는 그렇게 기술해도 정답으로 인정
세션과 쿠키는 WEB개발을 하다 보면 많이 사용한다. 어느 정도 이해는 하고 있으나, 누군가에게 이론적으로 설명을 하려고 하니 적잖이 당혹스러운 느낌이 들었다. 그래서 “세션과 쿠키의 차이점”을 정리해 보았다.
※ 아래 내용부터 세션과 쿠키에 대한 설명을 합니다. 다만 세션과 쿠키를 제어 할 수 있는 프로그래밍 설명은 존재하지 않습니다.
▶ 세션
HTTP통신은 기본적으로 무상태(stateless) 프로토콜이다. TCP처럼 항상 클라이언트와 서버가 통신을 하고 있는 상태가 아니다. 그렇다보니, 이전에 통신한 클라이언트(웹브라우저)가 어떤 것인지 확인을 하려면 표시가 필요하다. 그래서 HTTP통신을 할 때는 세션ID를 사용한다. 처음에 클라이언트(웹브라우저)가 접속을 하면 서버는 세션ID를 생성하고 set-cookie를 이용하여 클라이언트에 전달한다. 클라이언트는 세션ID를 쿠키에 저장한다. 이 후 다음 통신이 발생 할 때 세션ID를 request header에 등록하여 이전에 접속한 클라이언트와 동일하다는 것을 서버에 알려준다.
간략하게 이야기를 하자면, 세션은 일정시간동안 동일한 클라이언트(웹브라우저)인지 확인 할 수 있는 방법이다. 일정시간이란 클라이언트가 웹브라우저를 통해 웹서버에 접속하고 웹브라우저를 닫을 때 까지를 말한다.
▶ 쿠키
쿠키도 세션과 동일하게 HTTP통신의 무상태(stateless)프로토콜을 보완하고자 사용한다. 클라이언트 로컬 메모리에 필요한 정보들을 저장한다. 그리고 필요한 시점에 가지고와서 사용한다. 우리가 일반적으로 만날 수 있는 ”오늘 하루동안 보지 않기”라는 팝업 하단에 있는 체크 기능이 쿠키를 활용한 기능이다. 쿠키의 경우 한 도메인당 20개 정도 저장 할 수 있다. 또한 하나의 쿠키당 4KB 크기까지 저장이 가능하다.
▶ 세션과 쿠키의 차이점
첫 번째, 보관하는 위치가 다르다. 쿠키의 경우 사용자의 로컬에 보관된다. 세션의 경우 서버의 메모리에 보관하게 된다.
두 번째, 라이프 사이클이 다르다. 쿠키의 경우 사용자 로컬에 저장되므로 웹브라우저가 종료되어도 다음 접속 시 쿠키 데이터가 보존 되어있다. 다만 만료기간이 존재한다. 따라서 항상 무한하지는 않다. 세션의 경우 웹브라우저 종료와 동시에 저장된 세션 값들은 만료되어 파기가 된다.(그러나 꼭 그런 것 같지는 않다. 브라우저를 닫은 후 재 접속을 하여도 세션이 살아 있는 경우도 있다. 나도 궁금한 부분이라서 나중에 한번 정리를 하도록 하겠다.)
세 번째, 보안 측면에서는 세션이 좀 더 안전하다. 쿠키의 경우 사용자 로컬에 저장이 되므로 쿠키 정보가 탈취 및 변질 될 염려가 있다. 또한 request header에 존재하는 정보를 스나이핑 당할 수도 있다. 그러나 세션의 경우 서버에 존재하므로 탈취 염려가 조금 낮다고 볼 수 있다. 그러나 쿠키에 세션ID를 가지고 있어서 세션ID가 탈취 될 경우 세션 하이재킹이 가능하여 사용자의 정보가 마냥 안전하다고 볼 수는 없다.
따라서 세션 하이재킹이 이루어지지 않게 하기 위해서는 response header에 세션ID 값을 암호화 여부를 true로 설정을 한다. 이후 클라이언트에 송신한다.
무상태(stateless) 프로토콜의 단점을 보완하기 위해서 사용하고 있는 것이 세션과 쿠키이다. 기본적으로 WEB개발자이면 세션과 쿠키 정도는 구분하고 사용할 수 있어야 하지 않을까 생각한다.
- Total
- Today
- Yesterday
- AWS Lambda
- 프로그램
- 프로그래밍
- web
- string method
- Polly
- byte 정수형
- Lambda
- 주식
- AWS
- Java 기초
- 경제
- java long
- AWS DynamoDB
- Crawling
- python 문자열
- 크롤링
- java byte
- string 매서드
- python format
- Dynamodb
- java float
- 개발
- Java
- 펀드
- 경제용어
- 경재
- Python
- java 정수형
- java double
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |