1. HTTP 요청에서의 인증
HTTP는 비연결성 및 무상태성의 특징을 가지고 있다. 때문에 한번 통신한 이후 다시 통신할 때 서버는 이전 통신에 대한 기억이 없다. 이러한 특징으로 인해 사용자를 식별할 수가 없게 되었으며 이 때문에 인증을 사용하게 되었다
*인증 vs 인가
인증 방법에는 대표적으로 두 가지가 있다. JWT 방식과 Session 방식이다. 이 두 방식을 구분하는 가장 큰 차이는 인증 정보를 어디에 저장하느냐 이다. 세션은 서버에 저장된다. 정확히는 세션을 저장하는 데이터베이스 서버에 저장된다. JWT는 클라이언트에서 토큰을 가지고 있다가 서버 요청시 헤더에 넣어 보낸다.
2. 두 가지 인증 방법 (1) Session
Session 방식 동작 과정
1. 클라이언트가 로그인 시
2. 서버에서 인증 후 세션 ID만들어 DB저장하고, 세션ID 클라이언트에 전달
3. 클라이언트는 인증이 필요할 때마다 쿠키에 세션 ID를 담아 요청
4. 서버는 세션 저장소에 세션ID 가 저장되어있는지 확인하고 적절한 응답 리턴
단점
- 수평 확장 상황에서 매우 불리하다. : 1번 서버에서 로그인한 사용자가 다른 2번 서버로 요청하게 되면 2번 서버에서는 세션이 저장되어있지 않아 유효하지 않은 세션으로 인식됨
이를 해결하기 위해서는
1. 세션 클러스터링 : 서버 간 로그인 정보가 담긴 세션을 공유하는 방법. 실제 서비스와 관련없는 인프라적인 작업으로 서버 리소스를 많이 쓰게 된다는 단점이 있음. MSA로 쪼개져서 수십 수백개의 서버로 이루어 진다면?
2. 스티키 세션 : 수평 확장시 여러 서버에 세션 정보를 복사할 필요 없도록 특정 세션을 처음 처리한 서버에게만 보내도록 하는 방식. 요청을 균일하게 처리할 수 없음. 즉 특정 서버에만 요청이 몰리는 상황이 발생할 수도 있음
2. 세션 스토리지 분리 : 세션 스토리지를 외부 서버로 분리하는 방식
3. 두 가지 인증 방법(2) JWT
JWT 방식 인증 과정
장점
1. 인증에 필요한 정보가 토큰에 있기 때문에 별도의 저장소가 없음
2. 확장성에 용이하다
다만 단점
1. 토큰에 정보가 많아진다면,,? 안그래도 거의 모든 요청에 토큰이 포함되는데, 토큰의 크기까지 커지면 네트워크에 부하를 줄 수 있다.
2. 페이로드는 암호화된 것이 아니라 인코딩 된것이므로 중간에 탈취하면 페이로드의 데이터를 모두 볼 수 있다. 따라서 페이로드에는 최소한의 정보를 담아야한다.
'CS > Spring' 카테고리의 다른 글
Spring Security(2) - Spring Security 동작 원리 (0) | 2025.02.14 |
---|