이번 글에선 서버 인증 방식 중, 쿠키와 세션에 대해서 알아보려고 합니다!
🍪 Cookie
😄 개념
- 클라이언트의 브라우저에 저장되는 작은 데이터 - 주로 세션 ID와 같은 정보 저장
😄 특성
- 쿠키가 생성된 이후엔 모든 요청마다 서버로 전송
- 이름, 값, 만료 날짜, 전송할 경로, HTTPOnly여부 등으로 구성
- Key - Value 쌍으로 구성
- 하나의 쿠키는 4KB(= 4096바이트 = 512비트 )까지 저장 가능
- 도메인 당 20개의 쿠키
😄 사용목적
- 세션관리: 로그인, 닉네임, 접속 시간 등 저장
- 개인화: 유저마다 다르게 유저에게 적절한 페이지 로드
- 트래킹: 유저의 행동패턴 분석, 기록
🥶 단점
- 보안성: 브라우저에 저장되기 때문에, 쿠키 탈취 위험성이 있음
- 저장 용량 제한: 4KB라는 용량 제한
- 사용자 제어: 사용자가 브라우저에서 쿠키 차단 혹은 삭제 가능
䷍ Session
😄 개념
- 사용자의 로그인 상태나 활동을 일정 기간 동안 유지하기 위해 서버에 저장하는 정보
😄 특성
- 각 클라이언트에 고유 세선 ID 부여
- 이를 통해 유저의 로그인 인증을 비롯해 사이트 내에서 수행한 작업을 추적하고, 상태 유지 가능
- 용량 제한이 서버에 따라 다름
🥶 단점
- 서버 부하 증가
- 일정 시간 이후 만료 되기에 재로그인 등 사용자 경험이 떨어질 수 있음
?? 사용이유
우선 쿠키와 세션을 왜 쓰는지 알기 위해선 HTTP의 특성부터 알아봐야 하는데요!
HTTP의 특징을 살펴보면
1. 비연결성(Connectionless)
- 클라이언트에서 서버에 요청을 보냈을 때 응답을 하고 연결을 끊는 특성
2. 무상태성(Statelessness)
- 연결이 끊긴 순간 서버에서 더이상에 클라이언트에 대한 정보를 유지하지 않는 특성
위의 특성으로 인해
유저가 버튼을 탭하거나 페이지를 이동할 때마다 클라이언트에 대한 정보를 없애고 서버와의 연결이 끊어집니다.
그렇기 때문에 우리가 앱을 사용할 때 로그인 정보를 기억하지 못하고 지속적으로 로그인 요청을 받을 수 밖에 없는 것이죠.
또한 상품을 선택하는 경우 선택한 상품의 정보를 보지 못하는 상황이 나오기도 하는 것입니다.
바로 이 상황을 해결하기 위해 쿠키와 세션을 사용하는 것입니다.
그럼 이번엔
쿠키/세션으로 위의 상황을 해결하는 과정을 한 번 살펴보겠습니다.
1. 유저가 로그인하면 서버에 유저 정보를 전달
2 ~ 3. 유저 정보를 회원DB를 통해 확인하고, 결과를 다시 서버로 전송
4. 서버에서 회원 정보를 바탕으로 세션 정보를 생성하고 이를 세션 저장소에 저장
5 ~ 6. 세션 저장소에서 이 세션 정보에 대한 세션 ID를 서버에 전달, 서버는 이를 다시 클라이언트에게 전달
7. 해당 정보는 쿠키 저장소에 쿠키로 저장
1. 클라이언트가 동작에 대한 요청을 서버에 하게 되면 앞서 저장된 쿠키 정보를 함께 전달
2. 서버에서 받아온 쿠키를 세션 저장소로 전달하여 쿠키 검증
3 ~ 4. 검증 결과를 서버에 전송하고 이를 바탕으로 요청 데이터를 클라이언트에게 보여줘 클라이언트의 상태를 지속가능하도록 만들어줌
😀😀 쿠키와 세션을 함께 사용하는 이유
- 서버 자원의 낭비를 줄이면서 사용자의 상태 유지 가능
- 위의 상황 처럼 로그인 상태는 세션으로 관리하고, 사용자 개인화 정보는 쿠키에 저장하여 서버의 부담 줄임
- HTTP의 무상태성 문제 해결하면서 사용자 경험 개선 가능
다음은 아마 주제는 JWT가 되지 않을까하는..
.
.
.
.
끝!
'Swift' 카테고리의 다른 글
[iOS] About WidgetKit - 1 (0) | 2024.10.24 |
---|---|
[iOS] About JWT(Jason Web Token) (0) | 2024.10.17 |
[iOS] About CoreData (0) | 2024.10.13 |
[iOS] About ARC(Automatic Reference Counting) (1) | 2024.10.05 |
[iOS] About Optional(옵셔널) (0) | 2024.10.01 |