본문 바로가기
프로그래밍 기초/JAVA

쿠키와 세션, 캐시

by junsday 2016. 10. 26.

웹 서버를 처음 개발하면서 부딪혔던 부분 중 하나가 로그인 유지이다.

Http는 TCP처럼 연결지향형이 아니다.  웹 브라우저가 웹 서버에 요청을 보내면 웹 서버는 요청을 한 웹 브라우저에 요청한 정보를 보내주고 끝이다. 웹 페이지에 접속해 있는 동안 웹서버와 연결이 되어 있는 상태가 아니기 때문에 게임 서버처럼 스레드풀(Thead pool)을 만들어 접속한 클라이언트를 관리할 필요가 없다. 


1. 쿠키와 세션


그렇다면 웹 서버는 어떻게 각각의 클라이언트를 관리할까?

예를 들어 우리가 네이버나 구글 같은 페이지에 로그인을 했다고 치자. 우리는 아이디와 패스워드를 입력하고 서버로 보낼 것이며, 서버는 브라우저에서 보낸 아이디와 패스워드를 DB와 비교하여 로그인이 되었다고 브라우저에 알릴 것이다. 이번에는 메일을 확인하기 위해 메일함을 보여달라는 요청을 보내면 서버는 해당 유저의 정보에 맞는 메일들을 보여주기 위해 DB를 뒤져야 하는데 항상 연결되어 있는 상태가 아니기 때문에 방금 온 요청이 누가 보낸 요청인지 알 방도가 없다. 때문에 지금 요청을 보낸 클라이언트들을 구분하기 위해 필요한 것이 바로 쿠키와 세션이다.

쿠키와 세션은 클라이언트의 정보를 담고 있는데 쿠키는 클라이언트(웹 브라우저)에 세션은 웹 서버에 생성이 된다. 

쿠키는 따로 생성해주지 않아도 자동으로 웹 브라우저에 생긴다. 쿠키의 생성은 인터넷익스플로러, 구글 크롬, 파이어폭스 등의 웹 브라우저에서 해준다. 웹 서버에서는 세션을 생성해주어야 한다. 클라이언트에서 요청을 보낼 때 쿠키를 함께 보내는데 브라우저로 부터 받은 쿠키와 서버에 생성해 놓은 세션의 값을 비교하여 로그인이 되었는지 아닌지를 판별할 수 있다.


쿠키를 서버에서 조작하지 않는다면 웹 브라우저를 닫았다 켰을 때 로그아웃이 되어있을 것이다. 우리가 웹 브라우저를 닫았다가 켰을 때에도 로그인이 유지되기 원한다면 서버에서 쿠키의 생존시간을 조절해주면 된다.


2. 캐시


캐시는 쿠키와 비슷한 개념이지만 활용도가 다르다. 캐시는 쿠키와 같이 브라우저에 생성이 되는데 쿠키에는 보통 로그인 정보 (ID, PW)가 저장되는 반면 캐시에는 자주 쓰이는 이미지 파일 등 비교적 큰 데이터 파일들이 저장이 된다. 웹 페이지 하나를 띄우기 위해 서버에서 보내는 데이터의 양은 적지 않다. 네이버를 예로 들자. 로그인 창의 로그인 버튼이나, 메일, 지식IN 등의 버튼의 이미지는 거의 바뀌지 않는 반면 그에대한 내용들(예를 들어 뉴스)은 실시간으로 변경이 된다. 이 때 쉽게 바뀌지 않는 이미지 파일이나 데이터들이 캐시에 저장이 된다. 우리가 웹 페이지를 서버로부터 받았을 때 어느 부분에 띄워야 할 이미지나 데이터 등을 처음 접속했을 당시에 받아서 캐시에 저장을 해놓고 캐시에서 갖다 쓴다. 매번 서버에서 보내준다면 비교적 많은 양의 데이터가 오고갈 것이지만 캐시에 저장을 해 둔다면 비교적 적은 양의 데이터를 사용하며 웹페이지를 띄울 수 있을 것이다.


스마트폰이 많이 보급된 요즘 메모리정리를 한답시고 캐시, 쿠키등을 지워주는 프로그램이 있다. 물론 그것들을 지우면 당장에 어느 정도 매모리 영역은 확보할 수 있다. 하지만 우리가 자주 접속하는 페이지에 대한 캐시를 자주 지워준다면 매번 서버에서 받아와야 하기 때문에 매번 피같은 데이터를 소모해야 할 것이다. 그 데이터를 받아오는데 얼마만큼의 데이터를 사용하는지는 모르지만 매일매일 캐시와 쿠키를 지워주는 것은 데이터를 더 많이 쓰는 지름길이지 않을까 생각한다.

'프로그래밍 기초 > JAVA' 카테고리의 다른 글

[Java8] Default Method와 Static method  (1) 2017.06.20
[Java8] 함수형 프로그래밍  (0) 2017.06.20
서블릿(Servlet)이란?  (0) 2016.10.26
interface와 abstract class의 차이  (0) 2016.10.26

댓글