결론
과제 : 코드 수정, 주석 추가
팀 노션 작성(ERD, 기획 관련 메모, 프로젝트)
나무반 특강
본문
세션
1. 웹 세션(Web Session)
웹 세션은 사용자가 웹 브라우저를 통해 웹 서버와 상호 작용하는 동안 유지되는 상태입니다. 일반적으로 웹 세션은 다음과 같은 방식으로 관리됩니다:
- 쿠키(Cookie): 서버가 클라이언트 브라우저에 저장하는 작은 데이터 조각. 세션 ID와 같은 정보를 저장하여 사용자를 식별합니다.
- 세션 스토리지(Session Storage): 클라이언트 측에서 데이터를 저장하기 위한 웹 스토리지 API. 브라우저 창이 닫히면 데이터가 사라집니다.
- 서버 세션(Server Session): 서버 측에서 세션 데이터를 유지하는 방법. 사용자마다 고유한 세션 ID가 부여되며, 이 ID를 통해 세션 데이터를 식별합니다.
2. 네트워크 세션(Network Session)
네트워크 세션은 두 컴퓨터 또는 네트워크 장치 간의 일시적인 통신 연결을 의미합니다. 예를 들어:
- TCP 세션: 전송 제어 프로토콜(TCP)을 사용하는 통신 연결. TCP 세션은 세 개의 단계(3-way handshake)를 통해 설정되고 종료됩니다.
- SSH 세션: 보안 셸(Secure Shell)을 사용한 원격 접속. SSH 세션은 원격 서버와 클라이언트 간의 암호화된 통신을 제공합니다.
3. 애플리케이션 세션(Application Session)
애플리케이션 세션은 특정 애플리케이션 내에서 사용자의 작업 상태를 유지하는 기능을 말합니다. 예를 들어:
- 데스크톱 애플리케이션: 문서 편집기에서 사용자가 작업한 내용을 임시로 저장하고, 애플리케이션을 닫았다가 다시 열었을 때 이전 작업 상태를 복원할 수 있습니다.
- 모바일 애플리케이션: 앱 사용 중에 사용자가 중단했던 지점부터 다시 시작할 수 있도록 상태를 유지합니다.
세션 관리의 중요성
세션 관리는 보안, 성능, 사용자 경험 측면에서 매우 중요합니다.
- 보안: 세션 하이재킹(session hijacking) 등의 공격을 방지하기 위해 세션 데이터를 안전하게 관리해야 합니다.
- 성능: 서버 리소스를 효율적으로 사용하기 위해 오래된 세션을 적절히 종료해야 합니다.
- 사용자 경험: 세션을 통해 사용자가 중단했던 작업을 이어갈 수 있도록 하여 편리한 사용성을 제공합니다.
세션 관리 기법에는 세션 타임아웃 설정, 세션 데이터 암호화, 보안 쿠키 사용 등이 포함됩니다.
JWT
JWT(JSON Web Token)는 정보를 안전하게 전송하기 위한 웹 토큰 표준입니다. 주로 사용자 인증과 정보 교환에 사용됩니다. JWT는 세 부분으로 구성됩니다:
- 헤더(Header): 토큰 타입과 서명 알고리즘을 지정합니다.
- 페이로드(Payload): 토큰에 포함된 클레임(사용자 정보 등)을 담습니다.
- 서명(Signature): 토큰의 무결성과 진위성을 확인하기 위해 비밀 키로 서명합니다.
JWT는 Base64Url로 인코딩된 이 세 부분을 마침표(.)로 구분하여 하나의 문자열로 결합합니다. 주로 웹 애플리케이션에서 세션 관리와 인증에 많이 사용됩니다.
Stateless와 JWT
- 서버 측 상태 관리 불필요: JWT는 모든 필요한 사용자 정보를 자체적으로 포함하므로, 서버는 별도의 세션 저장소를 유지할 필요가 없습니다.
- 자급자족 인증: 서버는 각 요청에서 제공되는 JWT를 검증함으로써 사용자 인증을 수행합니다. 이 과정에서 서버는 JWT 자체만으로 필요한 정보를 얻을 수 있습니다.
JWT의 작동 방식
- 로그인 시 JWT 발급: 사용자가 로그인하면 서버는 사용자의 정보와 클레임을 포함하는 JWT를 생성하여 클라이언트에게 전달합니다.
- 클라이언트 저장: 클라이언트는 JWT를 로컬 스토리지나 쿠키에 저장합니다.
- 요청 시 JWT 전송: 이후 클라이언트는 각 요청에 JWT를 포함하여 서버에 전송합니다(주로 Authorization 헤더에 Bearer 토큰으로 전송).
- 서버 검증: 서버는 수신된 JWT를 검증하고, 토큰의 유효성을 확인한 후 요청을 처리합니다.
장점
- 확장성: 서버는 각 클라이언트의 상태를 저장하지 않기 때문에 확장성이 높아집니다.
- 단순한 서버 구성: 서버 측 세션 저장소가 필요 없으므로 서버 구조가 단순해집니다.
- 분산 시스템에서 유리: JWT를 사용하는 시스템은 여러 서버 간의 상태 동기화가 필요하지 않으므로 분산 시스템에서 효율적입니다.
이러한 특성 덕분에 JWT는 현대 웹 애플리케이션에서 널리 사용되는 인증 및 권한 부여 메커니즘입니다.