본문 바로가기

Dev.World/개발상식&언어

[개발상식] 10. Cookie / Session / Cache



웹 사이트를 사용하는 사용자는 HTTP GET방식이나 HTTP POST방식을 사용하여

웹 서버로 페이지를 요청하게 되고, 웹 브라우저는 웹 서버에서 응답받은  HTML을 파싱하여 렌더링하게 된다.

이러한 일련의 주기를 '라운드 트립'이라고 한다.

그런데 HTTP 프로토콜은 상태를 저장할 수 없는 프로토콜이다.
즉, 클라이언터의 요청이 왔을 때 웹 서버는 해당 요청에 대한 응답인 HTML 을 보내주고 연결을 끊어버린다는 말이다.
그렇기에 라운드 트립 시 페이지에 있는 컨트롤의 사용자 입력정보나 페이지 정보들이 모두 손실되게 된다.
동적인 웹사이트에서는 사용자의 요청이나 컨트롤의 입력정보를 유지할 필요가 있기 때문에
여러 상태관리를 할 수 있는 기능들을 제공한다.
상태관리의 정보를 저장하는 장소에 따라 두가지로 분류할 수 있다.
1) 상태 정보를 클라이언트에 저장하는 방식 - 쿠키(+뷰 상태,쿼리 문자열, ...)
2) 상태 정보를 웹 서버에 저장하는 방식 - 세션(+데이터베이스, ...)


Cookie(쿠키)
클라이언트에 대한 정보를 클라이언트의 PC의 하드에 보관하기 위해서
웹 사이트에서 클라이언트의 웹브라우저에 전송하는 정보를 말한다.
특정 웹페이지에 대한 유저의 행동 패턴을 주로 저장하는 작은 사이즈의 텍스트 파일, 즉 정보 패킷의 일종인 것이다.
주로 저장되는 정보는 특정 웹사이트나 웹페이지에 얼마나 자주 또는 몇 번 방문했는지
그리고 특정 배너를 클릭을 했는지 했으면 얼마나 자주 했는지
검색 시 어떤 키워드를 사용했는지에 대한 정보이다.
웹 서버 쪽에서 유저를 식별하기 위한  Session Tracking의 방법으로 사용.
쿠키 정보는 오직 그 쿠키를 작성한 웹 서버만이 Access 가능하다.
쿠키는 사용기한이 정해져 있어서 기한이 만료되면 자동으로 삭제된다.
쿠키는 서버에서 생성하여 클라이언트의 브라우저에서 관리하기 때문에
요청시 쿠키를 생성하고 브라우저를 닫을 때 쿠키를 파괴한다.
쿠키는 이름과 이메일 주소와 같이 유저를 식별해주는 정보를 저장할 수 있다.
사생활 침해의 소지가 있다.

세션쿠키와 영구적 쿠키
세션쿠키 : 쿠키에 만료일이 포함되지 않은 경우, 메모리에 저장되며 디스크에 기록되지 않는다. 브라우저를 닫는 순간(서버에서 만료) 영구적으로 손실
영구쿠키 : 쿠키에 만료일이 포함되어 있는 경우. 브라우저를 종료해도 사용자의 하드에 저장. 만료 시기가 되면 삭제.

Session(세션)
일정 시간동안 같은 사용자(같은 브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고,
그 상태를 일정하게 유지시키는 기술
즉 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라 칭한다.

세션과 쿠키의 비교
세션은 서버 쪽에 정보를 저장하고 쿠키는 클라이언트 쪽에 정보를 저장한다.
세션은 각각의 클라이언트마다 고유의 ID를 부여한다.
Session 객체들마다 저장해 둔 Data를 이용한다.
자신만의 고유한 페이지를 열어 놓아서 생길 수 있는 보안상의 문제 해결능력이 있다.


Cache(캐시)
데이터나 값을 미리 복사해 임시로 저장해두는 장소를 말한다.

"간혹 가다 DB 데이터가 변경되었음에도 변경 되기 전 데이터가 계속 출력되는 경우가 있다.
이 경우는 데이터를 조회했을 때 DB에 가서 데이터를 가져 오지 않고 캐시에 저장된 데이터를 가져오기 때문이다."

디스크 캐시(디스크 버퍼)
책이 책꽂이에 잘 정리되어 있기는 하지만 책상에 앉아서 글을 쓰다가 책꽂이에서 필요한 책을 찾으려면 시간이 오래걸린다.
그래서 책을 한 번 찾아오면 필요한 내용을 본 뒤에 책상 위에 놓아둔다. 같은 책을 참고할 일이 생길 가능성이 크기 때문이다.
하지만 책상의 넓이가 한정되어 있기 때문에 책상이 좁아지면 덜 필요할 것 같은 책을 다시 책꽂이에 갖다 둬야한다.
책꽂이하드디스크라면
책상캐시이다.
하드와 캐시는 성격이 다른 두 가지 저장 장소이다.
책꽂이는 용량이 큰 대신 시간이 많이 걸리고 책상은 시간이 적게 걸리는 대신 용량이 작다.

읽기 캐시는 읽어들인 내용을 캐시에 저장해 두었다가 다음에 읽을 때 사용하는 것이고,
쓰기 캐시는 쓸 때도 디스크에 바로 쓰지 않고 캐시에만 임시로 써두는 것이다.
쓰기 캐시를 사용하면 방금 쓴 내용을 다시 변경할 때 디스크에 두 번 쓸 필요가 없다.
컴퓨터 프로그램은 같은 작업을 반복하는 구조로 되어 있는 경우가 대부분이기 때문에 명령어를 한번 메모리에서
읽어들여서 캐시에 넣어 두면 속도를 크게 높일 수 있다.

웹 브라우저 캐시
네트워크에도 캐시 기술을 응용할 수 있다.
HTTP를 이용하는 애플리케이션을 개발하다보면 효율적인 네트워크 송수신을 위해 서버 클라이언트에서 캐쉬를 이용하는 것이 필수적.
1) 브라우저 캐시
클라이언트 애플리케이션들이 내부적으로 갖고 있는 캐시이다.
2) 프록시 캐시
실제 서버가 있는 곳이 아닌 네트워크 관리자에 의해 네트워크 상에 설치되는 캐시로 latency와 트래픽을 줄이는데 이용된다.
3) 게이트웨이 캐시
서버의 관리자에 의해 설치 및 운용되는 캐시이다.
서버의 앞단에 설치되어 요청에 대한 캐시 및 효율적인 분배를 통해 서버의 응답 성능을 좋게한다.

한번 본 웹페이지를 사용자의 컴퓨터에 저장해두면 다음에는 훨씬 빨리 볼 수 있다.
하지만 웹페이지는 바뀌기 마련이다. 그래서 서버가 웹 페이지를 이루는 파일들의 유효기간을 알려준다든가
캐시에 저장된 내용을 사용하더라도 변경이 있었는지 여부를 서버로부터 확인한다든가 하는 보완책이 필요한 것이다.
웹페이지 리소스 파일들(오디오, 비디오, 이미지 등)의 임시 저장소.

같은 웹페이지 접속 시 페이지 로딩 속도를 개선해주는 역할을 하는 것이 캐시이다.


캐시와 쿠키는 유저의 컴퓨터에 임시로 저장되있는 점은 같지만 그 사용 목적이 다르다.




-..-