메이쁘

[WEB CS] Cookie, Session, Cache (쿠키, 세션, 캐시) 에 대해, 그리고 차이점에 대해 알아보자! 본문

Technology/Web - Spring

[WEB CS] Cookie, Session, Cache (쿠키, 세션, 캐시) 에 대해, 그리고 차이점에 대해 알아보자!

메이쁘 2020. 7. 19. 14:25

안녕하세요.

 

웹 개발할때 듣는 쿠키, 세션, 그리고 캐시에 대해 

 

정의와 사용 이유, 동작 원리에 대해 알아보겠습니다.

 

 

 

쿠키와 세션이 대비되는 차이점이 있고,

 

캐시는 쿠키와 용도가 비슷하지만 조금은 차이가 있습니다.

 

 

하나씩 알아볼까요?

 

 

 

 

 

Cookie (쿠키)


  -  웹 브라우저별도의 쿠키 저장소에 보관하는 데이터

  

  -  웹 서버에서 웹 브라우저에게 정보(데이터)를 전송하며, 정보의 유효기간을 지정할 수 있습니다.

 

  -  유효기간동안 웹 브라우저의 쿠키 저장소에 쿠키가 저장되고, 유효기간을 지정하지 않으면 웹 브라우저가 닫힐 때 삭제됩니다.

    *** 유효기간 미지정 시 메모리에 기록되기 때문에 웹 브라우저 종료 시 날라갑니다.

 

 

  -  바꿔말하면, 유효기간 이내에는 웹 브라우저를 닫아도 삭제가 되지 않습니다.

    *** 클라이언트의 하드 디스크에 저장

 

 

    *** 사실, 웹 서버나 웹 브라우저 둘 다 생성이 가능한데, JSP는 웹 서버에서 만듭니다.

 

 

  -  쿠키는 변수(이름 : 값) 를 텍스트 파일로 저장해둔 것입니다.

    *** 쿠키 구성요소 : 이름, 값, 유효기간, 도메인, 경로

 

  -  쿠키 값은 UTF-8로 인코딩 / 디코딩 해서 사용합니다.

 

 

 

쿠키 동작 방식

위 그림은 쿠키 동작 방식 입니다.

 

 

먼저, 웹 브라우저가 웹 서버에 웹 페이지를 요청하면, 웹 서버에서는 웹 페이지를 보내주면서 쿠키도 끼워 보내줍니다.

 

그럼, 웹 브라우저는 별도 쿠키 저장소(유효기간 여부에 따라 저장 위치가 달라짐) 에 쿠키를 저장해둡니다.

 

이 쿠키는 해당 웹 페이지를 킬 때 마다 쿠키를 불러올 수 있으며, 쿠키 정보를 담아 웹 서버에 웹 페이지를 요청할 수 있습니다.

 

 

쿠키는 기본적으로 쿠키를 생성한 웹 서버에만 전송합니다. 하지만, '.naver.com' 과 같이 '.' 으로 시작하면 같은 도메인을 사용하는 모든 서버에 전달할 수 있습니다.

 

  ex)  blog.naver.com , mail.naver.com , cloud.naver.com 에 전부 전달 가능

 

즉, 경로 값을 통해 도메인의 기준 경로(+ 하위 경로들까지 전부) 를 지정할 수 있습니다.

 

 

 

쿠키의 단점

  -  보안성이 낮습니다. 왜냐하면, 다른 사람이 해당 컴퓨터를 사용하거나 해킹하여 접속한다면 충분히 하드 디스크에서 쿠키를 열어볼 수 있기 때문입니다.

 

  -  클라이언트는 총 300개의 쿠키를 저장할 수 있는데, 하나의 도메인(웹 페이지) 당 20개의 쿠키만 가질 수 있습니다. 그래서, 20개가 초과되면 가장 오래된 쿠키부터 자동 삭제됩니다.

 

  -  하나의 쿠키는 4KB(4096 byte) 까지 저장할 수 있습니다.

 

 

 

쿠키의 장점

  속도가 빠릅니다. 왜나하면, 서버에 정보를 요청하지 않고 바로 꺼내올 수 있기 때문입니다.

 

  -  서버 부하가 낮습니다. (서버에 정보를 요청하는 빈도 수가 줄어드니까!)

 

 

 

 

이러한 장단점과 특징을 가지고 있어 주로 아이디 자동저장(비밀번호는 위험해서 저장하지 않음), 오늘 팝업 보지 않기, 사용자 이전 스크롤링 위치, 장바구니 등 에 사용됩니다.

 

 

 

Session (세션)


  -  웹 서버 내 웹 컨테이너에 클라이언트의 상태 또는 값을 저장해둔 것

 

  -  웹 컨테이너는 하나의 웹 브라우저마다 한 세션을 생성합니다. 즉, 하나의 웹 브라우저가 여러 JSP를 요청해도 웹 컨테이너는 하나의 세션만 생성해 사용합니다.

 

  -  브라우저가 닫히거나 서버 내에서 세션 삭제 시 사라집니다. (하지만, 유효 기간 지정 가능!)

    *** 세션이 유효시간을 갖지 않으면, 나중에 세션 객체가 웹 컨테이너에 쌓이게 되서 메모리가 부족해질 수 있습니다.

 

 

  -  세션의 구성 요소 : 세션 ID, 세션 생성 시간, 세션의 최근 접근 시간

 

  -  그래서 웹 브라우저 (클라이언트) 가 웹 서버에 요청할 때 세션이 만들어지는데, 웹 서버에서 클라이언트를 구분하기 위해 세션 ID를 만듭니다.

 

  -  하지만, 같은 클라이언트가 요청했는지, 다른 클라이언트가 요청했는지 스스로 구분할 수 없기 때문에 세션을 만들면서 별도로 웹 브라우저에 세션 ID 값이 담긴 쿠키를 만들어 저장합니다.

그래서, 웹 서버에 요청할때 쿠키도 같이 보내서 웹 서버가 세션 ID를 비교하여 세션 값을 꺼내 읽어올 수 있게 됩니다.

 

  -  주로 세션은 로그인 정보 유지(유효 기간 별도 지정) 에 사용됩니다.

 

 

 

쿠키, 세션 차이 정리

  Cookie (쿠키) Session (세션)
저장 위치 웹 브라우저 (클라이언트) 웹 서버
저장 기간 유효기간 설정 가능.
미지정 시 웹브라우저 종료와 함께 삭제
유효기간 설정 가능.
기본적으로, 브라우저 종료 시 삭제
저장 방식 하드 디스크 내 텍스트 파일 웹 컨테이너 내 객체
용량 제한 총 300개의 쿠키
하나의 도메인 당 20개의 쿠키
(쿠키 초과 시 가장 오래된 쿠키부터 제거됨)
하나의 쿠키 당 최대 4KB
서버 허용 범위 내 가능
(용량 제한 없음)
속도 세션보다 빠름 쿠키보다 느림
보안성 보안성이 낮음
(하드에서 꺼내 읽을 수 있음)
보안성이 높음
(서버가 해킹당하거나 통신 중간에 세션 ID를 탈취당하지 않으면)

 

 

 

Cache (캐시)


웹 브라우저가 동일한 JSP에 연속으로 요청할 경우 첫 번째 요청의 결과를 로컬 PC의 캐시에 저장해둔 다음, 두 번째 요청 시 WAS에 접근하는 것 대신에 로컬 PC의 캐시를 꺼내는 것 입니다.

 

캐시 보관된 데이터를 사용할 시 WAS에 접근하는 것 보다 훨씬 빠르게 응답 결과를 웹 브라우저에 출력할 수 있습니다.

 

 

요청의 결과 값은 보통 이미지 또는 사진 파일(jpg, png 등), css, js, 배너 등 변경 사항이 크지 않고, 용량이 큰 파일들을 가리킵니다. 

 

만약, 캐시가 없다면 제 티스토리에 접근할 때 마다 커버 이미지, 상단 메뉴, 하단 상태 줄에 사용되는 모든 파일들을 서버에 요청하고 응답받아야 합니다. 그렇게 되면 웹 페이지 출력 속도가 느려질 뿐 아니라 웹 서버의 부하가 커지게 됩니다. (많이 비효율적입니다..!)

 

 

왜 캐시를 사용하는 지 알겠나요?

 

*** 하지만, 자주 변경되는 데이터를 캐시 방식으로 개발한다면 그것 또한 골치입니다. 클라이언트가 이전 캐시를 삭제하지 않는 한 변경된 데이터를 출력하는 것이 아니라 이전 데이터만 출력되기 때문이죠.

 

 

 

 

기타 궁금하신 사항이나 틀린 부분, 오타 지적은 항상 감사합니다.

 

댓글로 남겨주세요.

 

 

 

감사합니다!

 

Comments