[Spring Boot] 서버 인증하기!
이상한거 하고 이상한거 만드시는 경기출신 일본 유학생님 트위터
이 글을 읽고 생각했다.
주소만있으면 우리 백서버에 누구나 접근 가능하겠지?
그리고 나도 가끔 다른서버에 접근했었지?
그러면 안되는데 라고
서버는 현재 들어온 요청이 우리가 만든 앱,웹에서 보낸것인지 아닌지를 구별해야 하는데…
그래서 한번 정리해보려고 한다.
Stateful
Stateful 서버는 클라이언트에게서 요청을 받을 때마다, 클라이언트의 상태를 계속해서 유지하고, 이 정보를 서비스 제공에 이용합니다.
- ex) 세션을 유지하는 웹서버
- 유저가 로그인을 하면, 세션에 로그인이 되었다고 저장을 해두고, 서비스를 제공할 때에 그 데이터를 사용
Stateless
stateless는 무상태, 상태유지를 하지 않는다. 시스템에서는 유저의 인증 정보를 서버나 세션에 담아두지 않는다.
- 상태정보를 저장하지 않아 클라이언트측에서 들어오는 요청만으로 작업을 처리한다.
- 클라이언트와 서버의 연결고리가 없기 때문에 확장성이 높아진다.
- 세션이 존재하지 않아 서버를 쉽게 확장할 수 있다.
서버 기반 인증
HTTP 요청에 따른 응답을 받으면 연결이 끊어진다.(connectionless) ->
통신이 종료되면 어떠한 상태 정보도 남지 않는다.(stateless) ->
따라서 다시 접근시 로그인상태를 유지 하지 못한다. ->
그래서 서버는 사용자들의 정보를 기억하고 있어야 한다.! ->
사용자들의 정보를 기억하기 위해서 세션을 유지해야 한다.
문제점
1. 서버 부하
- 세션은 서버(메모리 or DB)에 저장하는데 사용자 수가 많아지면 서버의 부담이 늘어난다.
2. 확장성
- 사용자가 늘어나게 되면 더 많은 트래픽을 처리하기 위해 여러 프로레스를 돌리거나 컴퓨터를 추가하는등 서버를 확장하는것이 어렵다.
- 이순신 사용자의 정보 세션이 첫번째 서버에서 생성되고 저장되었을때 다른서버는 이순신 사용자의 세션정보가 없기 때문에 요청을 받지 못한다.
3. CORS(Cross-Origin Resource Sharing)
쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 여러 도메인에서 관리하기 번거롭다.
토큰 기반 인증
토큰 기반 인증은 Stateful서버와 반대적인 개념인 Stateless 서버 구조를 갖으며 상태정보를 유지 하지 않는다.
요청이 온다 ->
서버는 토큰을 만들어 준다. ->
클라이언트는 받은 토큰을 저장하여 요청할떄마다 해당 토큰을 header에 담아 전달한다. ->
서버는 토큰을 검증한 후, 요청에 응답한다.
장점
1. 확장성
- 클라이언트와 서버의 연결고리가 없기 때문에 서버의 확장성이 높아진다.
- 토큰 기반 인증은 토큰만 유요하다면 어디서든 작동 할 수 있다.
2. CORS(Cross-Origin Resource Sharing)
쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 여러 도메인에서 관리하기 번거롭다.
하지만 토큰 기반 인증은 토큰만 유요하다면 어디서든 작동 할 수 있다.