프로젝트 기록/spring security

[spring security] 세션(session) 기본 지식

코딩 코딩 코오딩 2024. 2. 3. 19:49

세션(session) 을 학습하는 이유

https://zoozoozoo.tistory.com/599

 

[spring security] 쿠키 기본 지식

쿠키 기본 지식 쿠키는 웹 브라우저가 보관하는 데이터이다. 웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를

zoozoozoo.tistory.com

 

앞서 쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있었다.
이 문제를 해결하려면 결국 중요한 정보를 모두 서버에 저장해야 한다.
그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다.

이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션(Session) 이라 한다.

그럼, 이제 기본 지식부터 정리를 하며 개념에 대한 학습을 시작하겠다.

 

 

세션이란?

세션은 네트워크 통신에서 상태를 유지하며 클라이언트와 서버 간의 대화를 지속하는 방법을 의미한다.

주로 웹 개발에서 많이 사용되며, HTTP 프로토콜의 무상태(stateless) 특성을 보완하기 위해 도입되었다.

세션은 사용자의 상태를 서버에 저장하고, 각 요청 간에 그 정보를 유지하여 클라이언트와 서버 간의 지속적인 상호작용을 가능케 한다.

 

무상태(stateless)란?클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음 을 의미한다.


반대 의미로는 상태 유지(stateful) 이라는 말을 사용한다. 세션은 사용자에 대한 정보를 저장하는 역할을 하며 사용자의 상태를 유지하게 되면서 상태 유지(stateful)를 한다는 것에 사용된다.

하지만, 여기에 세션에 대한 의문이 있을 수도 있다.

 

  1. 클라이언트와 서버는 추정 불가능한 임의의 식별자 값을 왜 가져야할까?
  2. stateful(상태유지) 를 해야할까?

이 두 가지에 대한 질문을 답하고 마무리 짓겠다.

 

 

1. 클라이언트와 서버는 추정 불가능한 임의의 식별자 값을 왜 가져야 할까?

우리는 쿠키에 대한 이야기를 한 적 있다. 쿠키에 사용자에 대한 정보를 담아 전달한다거나 예측가능한 1,2,3,4 .... 와 같은 예측 가능한 값을 통해 인증을 한다면 서버의 보안에 아주 큰 문제 가 될것이다. 아래에 첨부한 이미지처럼 쿠키에 예측 가능하지 못한 값을 서버에 보내주고 서버에서 인증된 사용자인지 확인하기 위해 세션 저장소에서 확인을 해 사용자의 서비스 접근을 허가 할 수 있는 것이다. 

 

 

2. 왜 stateful(상태유지) 를 해야할까?

stateful(상태유지) 라는 것은 예를 들어 설명해 보겠다.

  1. 어떤 이용자가 있게 되었을 때 그 사람의 로그인 상태를 유지하고 싶다.
  2. 서버의 기본적인 개념으로 일단 사용자가 요청(request)을 처리 해주게 된다면 더 이상 사용자의 상태에 대하여 알 수 없다.
  3. 이러한 점에 있어 사용자의 상태(로그인을 계속 유지하고 싶은 상태) 를 유지하기 위해서는 서버에 사용 가능한 사용자에 대한 정보를 가지고 있게 된다.
  4. 서비스를 이용하고 싶은 클라이언트가 서비스에 접근하게 되었을 때 세션에 대한 정보를 확인하고 접근을 허용해주게 되는 것이다.
    이러한 개념을 stateful(상태유지) 라고 한다.

이렇게 세션을 알아보았다. 세션은 쿠키 + 세션을 이용해 서버 이용자에 대한 보안을 강화 시켜주게 된다. 이러한 점에 있어 세션과 쿠키에 대한 개념을 잘 알고 있는 것이 중요하다.

반응형