세션(Session)
정의: 세션은 서버 측에서 사용자의 상태를 유지하기 위한 방법으로 사용자가 웹 사이트에 접속할 때 생성되어 서버에 저장되고, 사용자의 요청마다 세션 정보를 이용해 상태를 관리합니다.
동작 방식:
- 셰션 생성: 사용자가 웹사이트에 처음 접속하면 서버는 고유한 셰션 ID를 생성하여 사용자의 브라우저에 저장합니다. 이 셰션 ID는 쿠키(cookie)를 통해 브라우저에 저장되거나 URL 매개변수로 전달됩니다.
- 셰션 저장: 서버는 사용자의 상태 정보를 셰션 저장소에 저장합니다. 이 저장소는 메모리, 데이터베이스, 파일 시스템 등 다양한 형태로 구현될 수 있습니다.
- 셰션 유지: 사용자가 웹사이트를 탐색하는 동안 각 요청에는 셰션 ID가 포함되어 서버로 전송됩니다. 서버는 이 ID를 사용하여 해당 사용자의 상태 정보를 불러와 처리합니다.
- 셰션 종료: 사용자가 로그아웃하거나 셰션이 만료되면 서버는 셰션 정보를 삭제합니다. 셰션 만료 시간은 서버 설정에 따라 다르며, 일반적으로 일정 기간 동안 활동이 없으면 만료됩니다.
장점:
- 상태 유지: 여러 요청 간에 사용자의 상태를 유지할 수 있어 일관된 사용자 경험을 제공할 수 있습니다.
- 보안성: 중요한 정보(예: 로그인 상태)를 서버 측에 저장하므로 클라이언트 측에서 쉽게 조작할 수 없습니다.
- 편리성: 사용자의 다양한 정보를 셰션에 저장하여 애플리케이션 로직을 간소화할 수 있습니다.
단점:
- 서버 부담 증가: 많은 사용자가 동시에 접속할 경우 셰션 저장소에 큰 부담을 줄 수 있습니다.
- 확장성 문제: 분산 서버 환경에서 셰션을 유지하는 것이 까다로울 수 있습니다. 이를 해결하기 위해 세션 클러스터링이나 데이터베이스 기반 세션 저장소를 사용할 수 있습니다.
- 보안 취약점: 셰션 하이재킹(Session Hijacking) 등의 공격에 취약할 수 있으므로, 보안을 강화하기 위한 추가적인 조치가 필요합니다.
토큰(Token)
정의: 토큰은 클라이언트 측에서 사용자의 인증 정보를 유지하기 위한 방법으로 토큰은 특정 정보나 권한을 지닌 문자열로, 사용자와 서버 간의 신뢰성을 보장하고 보안을 강화하는 데 사용되며 주로 JSON Web Token(JWT)이 많이 사용됩니다.
동작 방식:
- 사용자 인증: 사용자가 로그인하면 서버는 사용자의 자격 증명을 확인하고, 사용자에게 고유한 토큰을 발급합니다.
- 토큰 저장: 발급된 토큰은 클라이언트(예: 웹 브라우저, 모바일 앱)에 저장됩니다.
- 요청 시 토큰 전송: 클라이언트는 서버에 요청을 보낼 때마다 토큰을 함께 전송합니다. 토큰은 HTTP 헤더, URL 매개변수, 또는 쿠키 등을 통해 전송될 수 있습니다.
- 토큰 검증: 서버는 요청을 받을 때 토큰을 검증하여 사용자의 신원을 확인합니다. 검증이 완료되면 요청을 처리하고, 필요한 데이터를 반환합니다.
장점:
- 클라이언트 측에서 관리되므로 서버 부하가 적습니다.
- 무상태성: 토큰을 사용하면 서버가 상태를 유지할 필요가 없으므로 확장성이 뛰어납니다. 각 요청은 독립적으로 처리될 수 있습니다.
- 보안성: 토큰은 암호화되어 전송되므로 중간에 탈취되더라도 안전합니다. 또한, 짧은 유효 기간을 설정하여 보안을 강화할 수 있습니다.
- 편리성: 토큰을 사용하면 클라이언트와 서버 간의 인증 과정이 간단해집니다. 클라이언트는 한번 로그인한 후 지속적으로 토큰을 사용하여 요청할 수 있습니다.
단점:
- 토큰 관리: 토큰의 발급, 갱신, 만료 등의 관리를 적절히 수행해야 합니다. 만료된 토큰을 사용하거나, 탈취된 토큰이 악용되는 것을 방지해야 합니다.
- 토큰 크기: 토큰은 일반적으로 JWT와 같은 형식을 사용하여 크기가 클 수 있습니다. 이는 네트워크 대역폭에 영향을 줄 수 있습니다.
- 보안 취약점: 토큰 자체가 탈취되면 악용될 수 있으므로, HTTPS를 사용하여 전송 중 탈취를 방지하고, 주기적으로 토큰을 갱신하는 등의 보안 조치를 취해야 합니다.
쿠키(Cookie)
정의: 쿠키(Cookie)는 웹 브라우저와 서버 간에 주고받는 작은 데이터 조각으로, 사용자의 상태를 저장하고 관리하는 데 사용됩니다. 쿠키는 웹사이트가 사용자의 이전 활동을 기억하도록 하여 사용자 경험을 개선하고, 인증 정보, 사용자 설정, 세션 상태 등을 저장하는 데 유용
동작 방식:
- 쿠키 생성 및 저장: 사용자가 웹사이트를 방문하면 서버는 특정 데이터를 쿠키에 저장하고, 이를 사용자의 웹 브라우저에 전송합니다. 브라우저는 이 쿠키를 로컬에 저장합니다.
- 쿠키 전송: 사용자가 동일한 웹사이트를 다시 방문하면, 브라우저는 저장된 쿠키를 서버에 자동으로 전송합니다. 서버는 쿠키를 읽어 사용자의 상태를 확인하고, 적절한 응답을 반환합니다.
- 쿠키 갱신 및 삭제: 서버는 필요에 따라 쿠키의 값을 갱신하거나 삭제할 수 있습니다. 브라우저 설정을 통해 사용자가 직접 쿠키를 관리할 수도 있습니다.
장점:
- 상태 유지: 쿠키를 사용하면 사용자의 상태를 유지할 수 있어, 로그인 상태 유지, 장바구니 기능 등 다양한 사용자 경험을 제공할 수 있습니다.
- 편리성: 쿠키를 통해 사용자의 선호도, 설정 등을 저장하여 웹사이트 방문 시 일관된 경험을 제공할 수 있습니다.
- 경량 데이터 저장: 쿠키는 소량의 데이터를 저장하는 데 적합하며, 클라이언트 측에 저장되므로 서버 부하를 줄일 수 있습니다.
단점:
- 보안 문제: 쿠키는 클라이언트 측에 저장되므로 탈취될 위험이 있습니다. 민감한 정보를 저장할 때는 암호화가 필요합니다.
- 제한된 저장 용량: 쿠키는 각 도메인당 최대 4KB 정도의 데이터를 저장할 수 있으므로, 대량의 데이터를 저장하는 데는 부적합합니다.
- 사용자 제어: 사용자는 브라우저 설정을 통해 쿠키를 삭제하거나 비활성화할 수 있습니다. 이로 인해 쿠키에 의존한 기능이 정상적으로 작동하지 않을 수 있습니다
활용 사례
1. 쿠키
- 로그인 상태 유지:
- 사용자가 웹사이트에 로그인할 때 쿠키를 사용하여 로그인 상태를 유지합니다. 이를 통해 사용자가 브라우저를 닫았다가 다시 열어도 로그인이 유지되도록 할 수 있습니다.
- 예: 온라인 쇼핑몰, 소셜 네트워크 서비스
- 사용자 선호도 저장:
- 사용자가 웹사이트에서 설정한 테마, 언어, 글꼴 크기 등의 개인 설정을 쿠키에 저장하여 사용자가 웹사이트를 재방문할 때 동일한 환경을 제공합니다.
- 예: 뉴스 웹사이트, 블로그 플랫폼
- 장바구니 기능:
- 사용자가 상품을 장바구니에 담을 때 쿠키를 사용하여 장바구니 상태를 유지합니다. 이를 통해 사용자가 로그인을 하지 않더라도 장바구니에 담은 상품을 기억할 수 있습니다.
- 예: 전자상거래 사이트
2. 세션
- 사용자 인증:
- 사용자가 로그인하면 서버는 세션을 생성하고, 세션 ID를 클라이언트에 전달하여 사용자의 인증 상태를 유지합니다. 세션은 서버 측에 저장되므로 보안이 강화됩니다.
- 예: 은행 웹사이트, 기업 내부 시스템
- 다단계 폼 입력:
- 여러 단계로 구성된 폼 입력 과정을 세션을 통해 관리하여 사용자가 각 단계에서 입력한 데이터를 서버 측에 저장하고 다음 단계로 이동할 수 있도록 합니다.
- 예: 회원가입 프로세스, 설문조사
- 쇼핑 프로세스 관리:
- 사용자가 상품을 선택하고 결제하는 과정을 세션을 통해 관리하여 각 단계의 상태를 유지합니다. 이를 통해 결제 도중에 발생할 수 있는 오류를 방지하고, 사용자가 중단한 작업을 이어서 진행할 수 있게 합니다.
- 예: 온라인 쇼핑몰
3. 토큰
- API 인증:
- 클라이언트가 서버 API에 요청할 때 토큰을 사용하여 인증합니다. JWT(JSON Web Token)와 같은 토큰을 사용하여 사용자 인증 정보를 안전하게 전달하고 검증할 수 있습니다.
- 예: RESTful API
- 싱글 사인온(SSO):
- 사용자가 하나의 로그인으로 여러 애플리케이션에 접근할 수 있도록 토큰을 사용하여 인증을 관리합니다. SSO는 기업 환경에서 많이 사용됩니다.
- 예: Google 계정으로 로그인, Facebook 계정으로 로그인
- 모바일 앱 인증:
- 모바일 애플리케이션에서 사용자가 로그인할 때 토큰을 사용하여 인증 상태를 유지합니다. 토큰을 로컬에 저장하여 앱을 닫았다가 다시 열어도 로그인 상태를 유지할 수 있습니다.
- 예: 모바일 뱅킹 앱, 소셜 미디어 앱
'CS 지식' 카테고리의 다른 글
객체 지향 (0) | 2024.08.01 |
---|---|
HTTP 메서드 와 상태 코드 (0) | 2024.07.24 |
OAuth (0) | 2024.07.10 |
RESTful API: 개념과 구현 (0) | 2024.07.04 |
API (Application Programming Interface) (0) | 2024.07.04 |