Spring Security 란?
Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다.
Spring MVC 기반 애플리케이션에 보안을 적용하기 위한 표준이며, Filter 흐름에 따라 처리된다.
보안과 관련하여서 많은 옵션을 제공해주기 때문에 자체적으로 보안 관력 로직을 작성하지 않아도 되는 장점이 있다. 하지만 초기 설정이 복잡하고, 많은 학습량을 필요로 한다는 단점도 있다.
JWT 란?
Json Web Token의 약자로 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰이다. 인증에 필요한 정보들을 암호화 시킨 문자열을 사용한다. 세션과는 달리 서버가 아닌 클라이언트에 저장된다. 따라서 세션 불일치에 대한 문제로부터 자유로워지고 서버는 stateless가 된다. (세션 기반으로 인증하려면 여러 대의 서버가 요청을 처리할 때, 별도의 작업을 해주어야 한다.) 또, 확장성이 우수하고 모바일에서도 잘 작동한다는 장점이 있다. 하지만 토큰을 탈취 당한다면 만료될 때까지 대처가 어려우며, 토큰의 길이가 길어서 인증 요청이 많아질수록 네트워크에 부하가 심해진다는 단점도 있다. 토큰 자체에 정보를 담고 있기 때문에 중요한 정보를 포함시키지 않도록 주의한다. (payload 부분은 누구나 디코딩하여 확인할 수 있다.)
더보기
토큰을 탈취 당한다면 만료가 될 때까지 대처가 어려우며, -> 한 번 만들어진 토큰을 임의로 삭제할 수 없으므로 만료시간이 중요한데, 길게 한면 데이터와 보안이 취약해지고 짧게 하면 로그인을 자주 해야 하는 문제가 발생하게 된다. 이에 대한 대안으로 refresh token, sliding session을 사용할 수 있다.
1. refresh token
Access Token의 유효 기간은 짧고, 평소 API 통신할 때 사용한다. Refresh Token의 유효 기간은 길고, Access Token 재발급 받을 때 사용한다. 통신과정에서 탈취당할 위험이 큰 Access Token의 만료 기간을 짧게 두고 Refresh Token으로 주기적으로 재발급함으로써 피해를 최소화하는 것이다.
2. Sliding Session
서비스를 사용 중인 유저에 대해서 만료시간을 연장시켜 주는 방법이다. 사용자가 활동을 할 때마다 세션의 유효 기간이 연장되는데, 사용자가 계속 활동 중인 동안에는 로그아웃되지 않는다. 반면, 사용자가 일정 기간 동안 활동이 없으면 자동으로 로그아웃된다.
Stateful 과 Stateless 의 차이
1. stateful (상태유지)
클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미한다. 서버가 많은 양의 클라이언트 데이터를 짊어져야하는 부담을 안겨준다.
2. stateless (무상태)
클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미한다. 장애 대응이 쉽고 확장성이 좋다는 장점들이 있다.
따라서, stateful 상태는 최소한으로 사용하는 것이 좋다.
'springboot 개인프로젝트 기록' 카테고리의 다른 글
06. Spring Security + JWT를 이용한 로그인, 회원가입 구현 (3) (0) | 2024.03.30 |
---|---|
05. Spring Security + JWT를 이용한 로그인, 회원가입 구현 (2) (1) | 2024.03.29 |
03. 부트스트랩 템플릿 적용 (0) | 2024.03.26 |
02. 1차 ERD 구성 및 구현할 기능들 (0) | 2024.03.22 |
01. 프로젝트 생성 및 DB 생성, 연결 (0) | 2024.03.21 |