seaking110 님의 블로그
Cookie, JWT 본문
HTTP
- 특징
- Stateless
- 서버가 클라이언트의 상태를 유지 x
- Connectionless
- 각 요청과 응답이 독립적인 연결로 처리, 요청이 끝나면 연결 종료
- Stateless
- 이러한 특징들로 인해 상태 관리 방법 필요
알아둬야할점!
- 모든 HTTP는 무조건 Stateless, Connectionless가 아님
- keep-alive
- TCP 연결을 재사용하여 효율성을 높이는 기능
- 헤더에 Connection : keep-alive
- SSE
- Server-Sent Events로 단순히 여러 요청을 계속 보내는 것이 아니라 실시간 전송을 위해 연결을 유지
HTTP 구조
- 크게 헤더와 본문(Body)로 구성
- 헤더에 쿠키가 존재
Cookie
- 상태가 없는 HTTP 프로토콜에서 상태 정보를 유지하기 위함
- Cookie(Set-Cookie)는 미리 예약된 이름의 HTTP 헤더에 존재하는 Key/value
HTTP Response (서버 -> 클라이언트)
- set-Cookie 키로 설정
- Secure : https만 허용
- HttpOnly : 클라이언트가 쿠키에 접근 금지
- SameSite : 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송
- HttpOnly를 제외한 모든 설정은 클라이언트에서도 설정이 가능
- 즉 HttpOnly를 걸어 클라이언트가 쿠키에 접근을 하지 못하게 막으면 보안을 위한 다른 설정들이 의미 없어짐
세션
- Stateful
- 즉 서버에 상태 데이터를 저장하는 것
JWT (JSON Web Token)
- JWT 역시 Stateless
- 세션이 백엔드 서버에 저장된 것이라면 JWT는 클라이언트에 로그인 정보가 저장된 상태
- 즉 서버는 별도의 로그인 정보를 유지하지 않고 클라이언트가 보유한 토큰을 통해 인증을 처리
- JWT 토큰은 암호화된 것이 아님
- (헤더+페이로드)를 base64로 감은 것 (인코딩한것)
- .으로 헤더 페이로드 서명으로 구분
- 암호화된것이 아니고 사실은 Base64URL 인코딩에 불과
- BASE64는 인코딩시 + / = 등 url에 들어갈 수 있는 것을 포함
- BASE64URL에는 + 는 -로 / 는 _로 = 는 제거하여 에러 상황 방지
'Today I Learned' 카테고리의 다른 글
트러블 슈팅 (0) | 2025.02.27 |
---|---|
프로젝트에 부족한 부분을 찾아 리팩토링 (0) | 2025.02.27 |
테스트 코드! (0) | 2025.02.25 |
N+1 문제 + 동시성 제어 (0) | 2025.02.24 |
HttpMessageConverter란 무엇인가 (0) | 2025.02.21 |