HTTP는 상태를 저장하지 않는 Stateless 특성을 가지고 있습니다. HTTP 상태는 기억되지 않기 때문에 쿠키와 세션을 이용해서 HTTP에 상태 정보를 유지(Stateful)하기 위해 사용합니다.
쿠키와 세션을 통해 서버에서 클라이언트 별로 인증 및 인가가 가능합니다.
쿠키 Cookie
- 클라이언트에 저장 될 목적으로 생성한 파일
- 개발자도구 - Application - Storage - Cookies 에서 확인 가능
- 구성 요소
- Name: 구별하는데 사용되는 키 (중복 x)
- Value: 쿠키의 값
- Domain: 쿠키가 저장된 도메인
- Path: 쿠키가 사용되는 경로
- Expires: 쿠키의 만료기한
- 보안에 취약함
- 클라이언트에서 쿠키 정보를 쉽게 변경, 삭제, 및 가로채기 당할 수 있음
세션 Session
- 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
- 서버에서 클라이언트 별로 유니크 '세션 ID'를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장
- 서버에서 생성한 세션ID는 클라이언트의 쿠키값(aka. 세션 쿠키)으로 저장되어 클라이언트 식별에 사용
세션 동작 방식
- 클라이언트가 서버에 1번 요청
- 서버가 세션ID를 생성 -> 응답 헤더에 전달
- 클라이언트가 쿠키를 저장 (세션 쿠키)
- 클라이언트가 서버에 2번째 요청 - 쿠키값(세션ID) 포함 요청
- 서버가 세션ID를 확인 -> 1번 요청과 같은 클라이언트임을 확인
쿠키와 세션 비교하기
쿠키(Cookie) | 세션(Session) | |
설명 | 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 | 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용 |
저장 위치 | 클라이언트 (웹 브라우저) | 웹 서버 |
사용 예시 | 팝업 "오늘 다시보지 않기" 정보 저장 | 로그인 정보 저장 |
만료 시점 | 쿠키 저장 시 만료일시 설정 가능 (브라우저 종료시에도 유지 가능) |
다음 조건 중 하나가 만족될 경우 만료됨 1. 브라우져 종료 시 2. 클라이언트 로그아웃 시 3. 서버에 설정한 유지기간까지 해당 클라이언트의 재요청이 없는 경우 |
용량 제한 | 브라우저 별로 상이 크롬기준: 도메인 당 180개 쿠키 당 4KB |
개수 제한 없음 |
보안 | 취약 | 비교적 안전 (서버에 저장 되기 때문에) |
결론
쿠키와 세션을 통해 클라이언트 별로 인증 및 인가를 할 수 있습니다.
'Things to know' 카테고리의 다른 글
ModifiedAt CreatedAt 이 null 값으로 나올 때 오류 해결 @EnableJpaAuditing (0) | 2022.12.13 |
---|---|
분기처리 분기문 뜻 Java (0) | 2022.12.10 |
스프링 @RestController와 @Controller 차이와 특징 (0) | 2022.12.08 |
Spring boot Jakarta Bean Validation Constraints 사용하는 법 @Size @Pattern (0) | 2022.12.06 |
Mac 맥 사용중인 포트 찾아서 kill 죽이기 port already in use 해결 (0) | 2022.12.02 |