1. 쿠키
먼저 쿠키를 알아야 함.
최초 요청시 쿠키를 브라우저에 저장하게 함.
쿠키에는 인증 정보랑 설정 정보가 같이 들어있음.
이제 같은 서버에 다시 요청할 때는 쿠키를 함께 보냄.
그러면 서버가 너 지난번에 왔던 애구나 알아보고 쿠키에 맞게 응답해줌.
2. Stateless?
Stateless 서버는 메모리가 없음. 요청 간의 연결이 없음.
서버는 요청을 한 번 처리해주면 끝임.
요청한 클라이언트를 잊어버림.
3. Session
Stateless 서버에게 요청할 때 내가 지난 번에 왔던 애라는 걸 알려주기 위한 것이 Session임.
예를 들어 pure라는 계정으로 가입을 해서 서버 session db에 pure가 등록이 되었다면 응답할 때 이걸 쿠키로 만들어서 브라우저에 저장하게 함.
그럼 이제 웹사이트 내의 다른 페이지로 이동할 때 세션ID가 들어있는 쿠키를 서버에 보냄.
그러면 서버는 세션 DB에서 일치항목을 찾아서 '나'임을 확인함.
4. Token
쿠키라는 방식은 브라우저에만 있음.
그래서 안드로이드나 iOS같은 네이티브 앱에는 적용이 안됨.
이 때 우리는 토큰을 씀.
쿠키대신에 토큰이라는 문자열을 보내서 인증하는 방식임.
5. JWT
세션 DB의 단점은 유저가 많아질수록 세션 DB와 쿠키를 대조하는 작업을 많이 해야 하기 때문에 리소스를 많이 잡아 먹는다는 것임.
이를 해결할 수 있는 것이 JSON Web Token(JWT)임.
JWT는 세션 DB에 정보를 저장하지 않음. 대신 그 정보를 '사인'해서 돌려줌. 긴 문자열의 형태로 변형된 것임.
다시 요청할 때는 이 사인된 토큰을 받아서 요청이 유효한지를 판단함. DB를 필요로 하지 않는다는 것임.
매우 가벼워지고 DB유지비용도 들지 않는다는 장점이 있음.
하지만 세션DB를 통해 유저 정보를 추적할 수 없기 때문에 세션을 만료시켜서 유저의 접속을 제한한다든가 넷플릭스처럼 동시 접속자 수를 제한한다든가 하는 부가 기능을 사용할 수는 없게 됨.
'취업 준비 > Spring security' 카테고리의 다른 글
14. JWT를 사용할 때의 security 설정 (0) | 2022.02.25 |
---|---|
13. jwt 프로젝트 생성 및 설정 (0) | 2022.02.24 |
11. 보안 문제와 RSA (0) | 2022.02.24 |
10. TCP는 무엇인가? (0) | 2022.02.24 |
9. 네이버 OAuth 로그인 (0) | 2022.02.24 |