개발 알다가도 모르겠네요

http의 한계와 session&cookie의 보완 본문

카테고리 없음

http의 한계와 session&cookie의 보완

이재빵 2021. 4. 23. 10:42
728x90

비연결형 (stateless) 프로토콜 HTTP의 한계

한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어진다. 

무전기 방식.

(의도적으로 사용자가 서버연결을 끊지 않는다면 그에 대한 resource와 memory가 계속 할당.)

한번 로그인한 사용자가 로그아웃할 때까지 보관해야 할 정보가 있다면 이러한 비연결형 HTTP 프로토콜로만으로는 곤란하다.

 

 

그러나 오늘날의 웹서버 패턴에서는 옳바르지 않음. ex) 로그인 로그아웃 등의 인증.

 

 

session이 사용되는 경우

사용자 로그인 후 일정 시간이 지나거나 다른 페이지에서도 사용자가 여전히 로그인이 되어 있음을 판단할 때.

(일정시간 설정 가능)

 

로그인을 하지않아도 개인화를 위해 session 사용

ex) 쇼핑몰에서 장바구니 기능을 구현할 때 로그인 안해도 장바구니 가능 (하나의 섹션안에서 사용자임을 가정.)

사용자가 어떤 페이지를 다녀갔는지 등 웹 페이지 트래킹 기능을 구현할 때.

개인화 홈페이지 구현 

 

 

 

세션과 쿠키의 가장 큰 차이는 '서버가 데이터를 기억하고 있는가' 이다.

세션은 서버에서 session_id 를 내려주면서 서버에도 세션값을 가지고 있는다.

마찬가지로 쿠키또한 서버에서 값을 내려주지만, 서버에는 쿠키값을 가지고 있지 않다.

그 때문에 쿠키는 신뢰할 수 없는 값이며 중요한 데이터는 쿠키에서 관리하지 않는다.

예를 들면, 쿠키는 보통 쇼핑몰에서 장바구니 혹은 방문기록 등에서 사용된다.

그렇다면 무조건 세션을 써야하는가?

이것은 아니다. 세션을 사용하게 될 경우 서버에서 세션값을 가지고 있어야 하므로 서버에 부하가 많이 가게 된다.

또한, 서버가 여러개로 나뉠 경우(MSA 와 같이) 모든 서버마다 세션을 동기화 해줘야하는 문제가 생기게 된다.

그렇기 때문에 현대의 백엔드 아키텍처에서 세션보다는 Oauth2 의 토큰 방식을 사용하게 된다.

토큰 방식을 사용하게 될 경우 서버측의 부하도 많이 줄어들게 되어, 쿠키와 세션의 모든 장점을 취할 수 있다.