◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
Cookie, Session, Token이 뭔데? 필요한 이유는?
로그인을 할 때, 서버에서 로그인 중인지를 알기 위해서 대표적으로 쿠키, 세션, 토큰 3가지 방식을 사용한다.
왜 로그인 중인지 확인해야하냐?
→ HTTP은 Stateless 프로토콜이기 때문이다.
웹 애플리케이션은 HTTP를 사용하여 서버 간의 통신을 수행한다.
HTTP는 상태를 유지하지 않는 stateless 프로토콜이다.
이는 각각의 요청이 서로 독립적이며 이전 요청과는 아무런 관련이 없다는 것을 의미한다.
그러나 웹 애플리케이션은 사용자의 로그인 상태를 유지해야 한다.
이를 위해 쿠키, 세션, 토큰과 같은 메커니즘이 사용된다.
반대로 쿠키, 세션, 토큰과 같은 메커니즘을 사용하지 않으면 로그인 중인지 확인할 수 없다.
아래의 유튜브 동영상 보면 쉽게 흐름을 이해 가능
참고 자료: https://www.youtube.com/watch?v=GhrvZ5nUWNg&t=41s
쿠키 (Cookie) ⇆ 세션(Session)
로그인 인증을 위해서 쿠키와 세션은 같이 사용된다. 그렇기 때문에 인증할 때는 쿠키와 세션은 세트 메뉴이다.
- 쿠키: 클라이언트 측에 저장되는 데이터
- 세션: 서버 측에 사용자의 상태를 유지하는 데 사용하는 기술
쿠키 (Cookie) | 세션(Session) | |
저장위치 | 클라이언트 | 서버 |
라이프사이클(만료시점) | 쿠키 저장시 설정 | 브라우저 종료 시 삭제 |
보안 | 비교적 취약 | 안전 |
속도 | 비교적 빠름 | 비교적 느림 |
쿠키 (Cookie)
쿠키란 클라이언트의 브라우저(ex. Chrome, Edge)에 저장되는 데이터를 말한다.
- 쿠키는 Key-Value 형태로 저장한다.
- 쿠키에는 이름, 값, 만료날짜(쿠키 저장기간), 경로정보가 들어있다.
- 주로 사용자의 인증 정보나 세션 ID 등을 저장하여 사용된다.
쿠키의 동작 방식
- [클라이언트 → 서버] 클라이언트가 페이지를 요청
- [클라이언트 ← 서버] 서버에서 쿠키를 생성하고 HTTP 헤더에 쿠키를 포함 시켜 응답
- 클라이언트 측의 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
- [클라이언트 → 서버] 해당 페이지에 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 전송
- [클라이언트 ← 서버] 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
쿠키 사용 예시
- 팝업창 '오늘 이 창을 다시 보지 않기'
- 로그인 시 아이디와 비밀번호 저장하기 or 자동 입력
세션 (Session) 인증
세션이란 서버 측(DB)에서 관리하며, 로그인한 유저를 식별하기 위한 기술이다.
세션의 동작 방식
- 유저 → 서버) 유저가 로그인을 성공하면, 서버측에서 이를 위한 식별자로 Session ID를 생성하여 서버쪽에 저장한다.
- 서버측) 서버에는 인증 정보(ID, 비밀번호)와 Session ID가 함께 저장된다. (회사 시스템마다 다르긴하다.)
- 서버 → 유저) 서버에서 유저에게 Session ID를 제공한다.
- 유저측) 유저는 Session ID에 대해 쿠키를 사용해서 저장한다.
- 유저측) 유저가 웹 사이트에서 상호작용(무언가를 클릭)할 때마다 유저쪽에서 서버쪽으로 요청한다. 이때 쿠키로 저장된 Session ID도 함께 포함한다.
- 서버측) 요청받은 Session ID가 유저 정보와 맞는지 확인. (session의 유효기간이 지나지 않았는지도 확인)
- 서버 → 유저) Session ID에 문제가 없다면 로그인을 유지시키고, 요청에 대한 응답을 한다.
세션 사용 예시
화면을 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지
세션 특징
- 세션 ID는 브라우저 단위로 저장되고, 브라우저 종료 시 소멸된다.
- 보안적으로 안전하다.
- 클라이언트 측에 저장되지 않기 때문에 보안상 민감한 정보를 안전하게 유지할 수 있다.
- 문제점: 세션은 서버에 저장하기 때문에 사용자가 수백, 수천, 수만으로 늘어난다면 해당 유저의 정보를 찾고 데이터 매칭에 오랜 시간이 걸리면서 서버에 부하가 가해지게 된다.
토큰 (Token)
토큰은 쿠키-세션과는 아예 원리가 다른 로그인 인증 방식이다.
세션 방식은 안전하지만 서버에 부하가 걸리는 단점이 있었다.
(토큰은 서버에 부하가 없다. 처음 로그인 할 때만 서버에서 인증하고, 그 이후에는 서버에 인증 할 필요 없다.)
토큰 방식에는 OAuth와 JWT가 있지만. 목적이 다르다.
- 권한을 부여할 때는 OAuth 방식을 사용한다.
- 로그인 인증 할 때는 JWT 방식을 사용한다.
JWT(JSON Web Token)
생활 코딩 동영상 보면 바로 이해 가능 → https://www.youtube.com/watch?v=36lpDzQzVXs
'네트워크' 카테고리의 다른 글
[IT 용어] TCO란? 쉽게 정리 (0) | 2024.04.15 |
---|---|
NFS란? 쉽게 개념 및 특징 정리 (Feat. SMB란?) (0) | 2024.04.08 |
[네트워크] CDN이란? 역할과 개념 쉽게 정리 (Content Delivery Network) (0) | 2024.03.29 |
[DNS 네트워크] nslookup 명령어란? 쉽게 개념 정리 (0) | 2024.03.28 |
[CDN 네트워크] Akamai란? 쉽게 개념 정리 (Akamai Technologies, Inc.) (0) | 2024.03.28 |