티스토리 뷰

Web

쿠키와 세션(cookie, session)

토마's 2018. 2. 24. 13:09

안녕하세요. 쿠키와 세션은 개발자 뿐만 아니라 일반 사용자들도 종종 들어왔을 법한 단어들입니다. 그래서 이번에 저도 쿠키와 세션에 대해서 정리할 겸 웹에서의 쿠키와 세션에 대한 내용을 포스팅하려고합니다.


1. 쿠키와 세션 사용이유?


쿠키와 세션이 사용되어지는 이유로는 HTTP(HyperText Transper Protocol) 프로토콜의 특징이자 약점을 보완하기 위해서 사용되어졌습니다.

HTTP 프로토콜은 비연결지향(Connectionless)하고 상태정보유지않함(Stateless)하다라고 이야기 하는데, 


1) 비연결지향(Connectionless) : 

클라이언트가 요청(request)을 서버에 보내면 서버는 클라이언트 응답(response)를 하면서 서로 접속을 끊는 특성입니다.


2) 상태정보유지않함(Stateless) : 

접속을 끝내는 순간 클라이언트와 서버의 통신은 끝나고 상태 정보는 유지하지 않는 특성입니다.


즉, 비연결지향이라는 특성으로 인해 통신 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 큰 장점이나, 통신할 때 마다 새로운 커넥션을 만들기 때문에 클라이언트는 요청하는 내가 누구인지 계속적인 인증이 필요하다는 단점이 있습니다. 쿠키와 세션이 없을 경우 브라우저에서 페이지를 옮길 때마다 로그인을 계속해야되는 불편함이 있습니다.



2. 쿠키(Cookie)


- 쿠키는 클라이언트의 로컬에 저장되는 키와 값이 들어있는 작은 데이터파일 입니다.

- 쿠키는 이름, 값, 만료 날짜(쿠키 저장 기간), 경로 정보가 들어있습니다.

- 쿠키는 일정 시간 동안 데이터를 저장할 수 있어서 로그인 상태를 유지합니다.

- 쿠키는 클라인언트의 상태 정보를 본인 하드디스크에 저장하였다가 필요할 때 참조 및 재사용합니다.


1) 쿠키의 원리

브라우저에서 웹 페이지 접속 -> 클라이언트가 요청한 웹 페이지를 받으면서 쿠키를 클라이언트 로컬(하드)에 저장 -> 클라이언트가 재 요청시 웹 페이지 요청과 함께 쿠키도 전송 -> 지속적으로 로그인 정보를 가지고 있는 것처럼 사용 가능


2) 쿠키의 사용사례

- 방문한 웹 페이지에 "아이디와 비밀번호를 저장하시겠습니까?"라고 나타나는 것은 쿠키로 저장할지를 물어보는 것

- 팝업창에서 "오늘 이창을 다시 보지 않음"을 체크

- 쇼핑몰에서 장바구니 같은 기능을 사용하는 경우 저장형태가 쿠키입니다.


3) 쿠키의 제약사항

- 클라이언트에 총 300개 까지 쿠키를 저장할 수 있습니다.

- 하나의 도메인 당 20개의 값만 가질 수 있습니다.

- 하나의 쿠키 값은 4096Byte 까지 저장 가능합니다.


* 하나의 도메인에서 설정한 쿠키 값이 20개를 초과하면 가장 적게 사용된 쿠키부터 지워집니다. 또한, 쿠키는 기존에 설정한 값이 있는 곳에 값을 저장하거나 배열 형태의 쿠키에 단일 값을 저장하려고 할 때 아무런 경고 없이 덮어쓰기 때문에 주의해야됩니다.



3. 세션(Session)


- 세션은 클라이언트와 웹 서버 간의 네트워크 연결이 지속적으로 유지되고 있는 상태를 말합니다.

- 즉, 사용자가 브라우저를 열어 서버에 접속한 뒤 접속을 종료할 때 까지를 말합니다.

- HTTP 프로토콜 은 비접속형 프로토콜이며, 매 접속시 마다 새로운 네트워크 연결이 이루어지는데,  세션이 연결 유지를 가능하게 해줍니다.

- 클라이언트가 웹 서버에 요청(Request)를 보내면 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데, 이 ID를 세션이라고 합니다.

- 세션 ID는 임시로 저장하여 페이지 이동시 사용되거나, 클라이언트가 재 접속 했을 때 클라이언트를 유일하게 구분하는 수단이 됩니다.


1) 세션의 원리

클라이언트가 서버에 접속시 세션 ID를 발급 -> 서버에서는 발급해준 세션 ID를 쿠키를 사용해 저장(JSESSIONID) -> 클라이언트는 다시 접속할 때, 이 쿠키(JSESSIONID)를 이용해서 세션 ID 값을 서버에 전달


즉, 세션을 구별하기 위해서 ID가 필요하고 그 ID만 쿠키를 사용해서 저장해 놓은 뒤, 쿠키는 자동으로 서버에 전송되어 해당 서버에서 세션 ID에 따른 처리를 수행


2) 세션의 장점

- 각 클라이언트에게 고유 ID를 부여합니다. (정확한 구분)

- 세션 ID로 클라이언트를 구분해서 클라이언트의 요청(request)에 맞는 서비스를 제공할 수 있습니다.

- 사용했던 또는 봤던 정보들을 서버에 저장하기 때문에 보안면에서 쿠키보다 우수합니다.


3) 세션의 단점

- 서버에 저장되는 세션때문에 서버에서 처리를 수행하는 부하와 저장 공간이 필요로 합니다.


4) 세션 사용사례

- 로그인과 같이 보안 상 중요한 작업은 세션을 통해서 수행됩니다. 다른 사용자가 읽어서 사용하면 안되는 개인정보이기 때문입니다.



4. 쿠키와 세션의 차이점


쿠키(Cookie)와 세션(Session)은 기능 상 비슷한 역할을 하고 동작원리도 비슷합니다. 왜냐하면, 일반적인 세션은 쿠키를 바탕으로 동작하기 때문입니다. 여기서 가장 중요한 차이점은 저장되는 곳이 다르다는 것입니다. 쿠키는 클라이언트에 저장되고(각 사용자의 로컬에 부스러기(정보)를 남긴다고 생각하시면 됩니다.), 세션의 경우에는 서버에 저장됩니다. 쿠키의 경우에는 서버의 자원을 전혀 사용하지 않지만, 세션은 서버에 저장되기 때문에 서버 자원을 사용합니다. 마지막으로 쿠키와 세션의 만료 되는 기간도 다릅니다. 쿠키와 세션의 차이점은 아래의 도표를 통해 확인하셔도 됩니다.


구분 

쿠키 

세션 

저장 위치 

 클라이언트 

 서버 

저장 형식 

 텍스트 형식 

 Object 형 

종료 시점 

 쿠키 저장 시 설정(설정하지 않으면 브라우저 종료 시 소멸) 

 정확한 시점을 알 수 없다 

자원 

 클라이언트의 자원을 사용 

 서버의 자원을 사용 

용량 제한 

 한 도메인 당 20개, 쿠키 하나 당 4KB, 총 300개 

 서버가 허용하는 한 용량에 제한이 없음 


참고 사이트 : http://interconnection.tistory.com/74