Session
초기 웹 개발에서 사용자 상태를 유지하기 위해 도입된 기술 중 하나입니다. 초기에는 웹은 단순한 정적 문서를 전달하는 데에 그쳤기 때문에 사용자의 상태를 관리하는 문제는 크지 않았습니다. 하지만 동적이고 상호작용이 많은 웹 애플리케이션이 발전하면서 사용자의 로그인 상태, 장바구니 내역, 등의 정보를 서버에 유지하고 관리해야 하는 필요성이 생겼습니다.
처음에는 쿠키를 사용하여 사용자의 상태를 관리하는 방식을 사용했지만 쿠키는 클라이언트에서 조작이 가능하고 보안상의 문제도 있었습니다. 이후 세션이 도입되면서 서버 측에서 사용자의 상태를 안전하게 관리하는 방식으로 발전했습니다. 세션은 사용자에 대한 정보를 서버 측에 저장하고 클라이언트에는 세션 식별자만을 부여하며 클라이언트는 이 식별자를 사용하여 서버에 저장된 정보에 접근할 수 있게 되었습니다. 이런 방식으로 사용자의 상태를 클라이언트가 아닌 서버 측에서 안전한게 관리할 수 있게 되었습니다.
보안에 취약한 쿠키를 보완하는데 세션의 기여
- 쿠키는 클라이언트 측 데이터를 저장합니다. 사용자가 쿠키의 내용을 직접 확인하고 변경할 수 있는 가능성을 내포하며, 중요한 정보를 클라이언트에 저장하는 것은 보안상의 위험을 야기할 수 있습니다. 세션은 반면 서버 측에 데이터를저장하므로, 사용자는 세션에 직접적인 액세스 권한이 없습니다.
- 쿠키는 모든 HTTP 요청에 자동으로 포함되며, 클라이언트와 서버 간에 데이터를 주고 받을 때 사용됩니다. 세션은 클라이언트 측에 세션 키만을 저장하고, 실제 데이터는 서버 측에 저장되어 클라이언트와 서버 간의 데이터 전송이 감소합니다.
- 세션은 중요한 데이터를 클라이언트 측에 저장하지 않고 서버 측에 저장함으로 중요한 정보가 클라이언트에서 노출되는 가능성을 감소시킵니다. 또한 세션 키는 랜덤하게 생성되므로 예측하기 어렵습니다.
- 세션은 사용자가 브라우저를 닫거나 일정 시간 동안 확동이 없을 경우 만료될 수 있습니다. 이는 불필요하게 세션 데이터가 오랫동안 보존되지 않도록 하여 보안을 강화하는데 도움이 됩니다.
세션 동작 방식
- 크라이언트가 서버에 로그인을 요청합니다.
- 서버는 클라이언트의 로그인 요처으이 유효성을 확인하고 Unique한 sessionid를 저장합니다.
- 서버가 응답할 때 응답헤더에 set-cookie형태로 추가하여 응답합니다.
- 클라이언트는 이후 서버에 요청시 전달받은 session ID 값을 저장된 세션 저장소에 찾아보고 유효성 검사후 요청을 처리하고 응답합니다.
- 서버에서 요청헤더의 세션 ID값을 저장된 세션 저장소에서 찾아보고 유효성 검사후 요청후 처리하고 응답합니다.
세션 장점
서버 측에서 유저의 인증 정보를 관리하기 때문에 보안성이 높습니다. 중요한 정보를 클라이언트에 저장하지 않고 서버에 보관함으로써 보안을 강화합니다.
클라이언트 측에서 인증 정보를 저장하고 관리하는 토큰 방식과 달리 세션은 서버 측에서 인증 저보를 유지하므로, 탈취될 가능성이 적습니다.
클라이언트 측에서 인증 정보를 저장하고 관리하는 토큰 방식과 달리, 세션은 서버에서 만료 기간을 설정할 수 있습니다. 이는 새로고침이나 브라우저 종료와 같은 상황에서 세션을 관리하는데 유용합니다.
세션 단점
클라이언트가 요청할 때마다 서버에서 세션 정보를 확인해야 하므로, 서버 부하가 증가할 수 있습니다. 특히 사용자 수가 많아질수록 부하가 더 높아질 수 있습니다.(세션은 사용자 수만큼 서버 메모리를 차지함!)
서버의 메모리나 데이터베이스에 세션 정보를 저장하기 때문에 확장성이 떨어질 수 있습니다.
'BackEnd > 인터넷' 카테고리의 다른 글
TCP 3way handShake/TCP 4way handShake (1) | 2024.02.06 |
---|---|
Cookie (0) | 2024.01.11 |
DNS와 그 작동원리 (0) | 2023.08.16 |