STUDY - Session & Cookie

준동이·2024년 3월 10일
0

Session & Cookie

목록 보기
1/1
post-thumbnail

시작하며


이번 공부는 Session(세션)과 Cookie(쿠키)에 대한 공부를 해보려고 한다.

아마 중점은 쿠키를 브라우저에 저장하는 것을 주로 다룰 것 같다.




HTTP란?


쿠키와 세션을 공부하기 전 HTTP에 대한 것을 알고가면 좋다.

HTTP ( HyperText Transfer Protocol )은 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.

HTTP는 요청과 응답을 한번 주고받으면 바로 연결을 끊어버리는 특성을 가지고 있다. 그리고 다음 요청을 하기 위해 다시 연결을 맺어야 한다. 이를 HTTP의 비연결성 ( Connectionless ) 이라고 한다.

또한 HTTP 프로토콜은 요청과 응답을 교환하는 동안 상태 ( Status )를 저장하지 않는다. 따라서 HTTP 레벨에서는 이전에 보냈던 Request나 Response를 기억하지 못한다. 즉, HTTP 요청은 직전의 요청과 전혀 관련이 없다. 이를 HTTP의 비상태성 ( Stateless ) 이라고 한다.




쿠키 ( Cookie )


쿠키는 웹 서버가 생성하여 웹 브라우저로 전송하는 작은 정보 파일이다.

위에 설명한 HTTP의 비상태성 ( Stateless )를 보완하기 위해 등장한 것이 쿠키 ( Cookie )이다. 쿠키는 HTTP 요청과 응답에 함께 실려서 전송이 된다. 쿠키는 클라이언트 즉, 브라우저에 저장이 된다. 웹 서버가 클라이언트로 보내는 응답의 헤더 중 set-cookie라는 헤더에 키와 값을 함께 실어 보내면 그 응답을 받은 브라우저는 해당 쿠키를 저장하고, 그 다음 요청부터 자동으로 쿠키를 헤더에 넣어 송신한다.

결론적으로 쿠키는 웹사이트 이용시 서버에 부하를 주지 않으면서도 사용자를 식별하고 정보를 활용할 수 있도록 사용자의 전자기기에 저장되는 작은 정보파일이다. 사용자는 쿠키를 통해 자동 로그인, 사이트 환경설정 기억 등 웹사이트 이용을 편리하게 할 수 있지만, 개인정보 침해나 쿠키 조작 등 보안 이슈가 발생할 수 있으므로 방문하지 않는 사이트의 쿠키는 삭제하는 등 적절한 관리가 필요하다.


쿠키의 특징

  • 쿠키는 한 개에 4KB까지 저장 가능하며, 최대 300개 까지 저장할 수 있는 텍스트 파일이다.

  • 쿠키는 클라이언트에 저장된다.

  • 쿠키에는 이름, 값, 만료날짜, 경로 정보가 들어있다.

  • 기본적으로 쿠키는 웹 브라우저가 종료되면 삭제된다
    ( 만료 날짜를 지정해주면 만료일이 되어야 삭제된다. )

  • 웹 브라우저에 해당 서버의 쿠키 정보가 있으면 HTTP요청 ( HTTP 헤더의 Cookie )에 무조건 담아 보낸다.


쿠키의 단점

  • HTTP 요청 시 자동으로 모든 쿠키가 전송되어 불필요한 트래픽이 증가하기도 한다.

  • 쿠키는 사용자의 정보를 추적, 저장할 수 있기 때문에 개인정보 노출에 관련한 문제가 발생할 수 있다.

  • 사용자의 장치에 저장되는 쿠키의 특성상 사용자의 관리 부실로 인해 쿠키를 탈취 당하거나, 쿠키 정보를 조작하여 다른 사용자로 위장하거나 세션을 도용하는 등 보안 취약성이 존재한다.


쿠키를 사용한 로그인 처리




세션 ( Session )


세션은 쿠키와는 다르게 정보를 서버측에 저장하는 방식이다.

세션이란 브라우저로 웹서버에 접속한 시점부터 브라우저를 종료하여 연결을 끝내는 시점까지의 일련의 요청을 하나의 상태로 간주하고, 그 상태를 일정하게 유지하는 기술이다. 하지만 비상태성 ( Stateless )을 갖는 HTTP에서 어떻게 상태를 일정하게 유지할 수 있을까?

맨 처음, 사용자가 HTTP요청의 Body에 인증 정보 ( 유저 아이디, 패스워드 등 )을 실어서 서버에 보낸다. 그리고 서버에서는 해당 인증정보가 유효하면 사용자와 데이터를 식별하는 Session ID를 생성한다. 생성된 Session ID는 응답 Set-Cookie헤더에 생성된 세션아이디를 실어 보낸다.

클라이언트는 해당 세션 아이디를 쿠키에 저장하고, 매 요청마다 세션 아이디를 Cookie 헤더에 실어 전송한다. 서버는 전달받은 세션 아이디를 통해 해당 요청의 송신자가 누구인지 식별할 수 있다. ( 톰캣은 JSESSIONID 라는 이름으로 세션 아이디를 저장 )


세션의 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.

  • 웹 서버의 저장되는 쿠키 ( = 세션쿠키 )

  • 브라우저를 닫거나 서버에서 세션을 삭제했을 때 삭제가 되어 쿠키보다 보안이 좋다.

  • 저장 데이터에 제한이 없다. ( 서버 용량이 허용하는 만큼 )

  • 각 클라이언트의 고유 Session ID를 부여한다


세션의 단점

  • 쿠키에 비해 조금 느리다. 쿠키는 서버의 헤더를 바로 참조하면 되지만 세션은 세션ID를 주고 받은 다음 인증을 거쳐 서버의 데이터를 참조해야 하므로 속도가 비교적 조금 느리다.

  • 세션은 서버의 자원을 사용한다. 한계가 존재하는 서버 자원을 사용하므로 속도 저하나 오버헤드 등 서버에 부하를 줄 수 있다.

  • 해킹의 위험성은 여전하다. 대표적으로 세션 하이재킹 ( Session Hi - jacking )이 있다.


세션기반 로그인 과정




세션과 쿠키의 차이


세션을 사용하면 좋은데 왜 쿠키를 사용할까?

세션이 쿠키에 비해 보안이 높은 편이나 쿠키를 사용하는 이유는 세션은 서버에 저장되고, 서버의 자원을 사용하기에 서버 자원에 한계가 있고, 속도가 느려질 수 있기 때문에 자원관리 차원에서 쿠키와 세션을 적절한 요소 및 기능에 병행 사용하여 서버 자원의 낭비를 방지하며 웹사이트의 속도를 높일 수 있다.




마치며

이번 공부는 쿠키와 세션에 대해 간단히 알아보았다.

프로젝트를 하며 로그인을 구현할 때 사용을 하였지만 왜 사용하는지에 대한 이유와 흐름에 대해 전반적인 지식을 쌓을 수 있었다.

이렇게 이론 공부부터 하고 개발을 했어야 했는데 프로젝트를 만들기 급급하여 개발부터 했더니 사실 내코드에 있는 세션 쿠키에 관한건 엉터리일 것이다 ㅋ.ㅋ

그래도 차근차근 Spring Security같은 것을 사용하며 보안강화와 권한에 대한 공부도 이 시리즈에서 같이 해봐야겠다.

그럼 안녕 ~ 🖐🖐

profile
개발자 꿈나무

0개의 댓글