DB에서 유저 정보를 가져오는 역할을 한다.
해당 인터페이스의 메소드에서 DB의 유저 정보를 가져와 AuthenticationProvider인터페이스로 유저 정보를 리턴하면, 그 곳에서 사용자가 입력한 정보와 DB에 있는 유저 정보를 비교.
Spring Security에서 사용자의 정보를 담는 인터페이스는 UserDetails인터페이스이다.
이 인터페이스로 구현하게되면, Spring Security에서 구현한 클래스를 사용자 정보로 인식하고 인증작업을 한다.
UserDetails 인터페이스 -> VO 역할
UserDetails 인터페이스를 구현하게 되면 오버라이드되는 메소드들이 있다.
이 메소드들에 대해 파악을 해야 된다.
그리고 회원 정보에 관한 다른 정보(이름, 나이, 생년월일...)도 추가 가능
오버라이드되는 메소드들만 Spring Security에서 알아서 이용, 따로 클래스를 만들지 않고 멤버변수를 추가해서 같이 사용해도 무방.
만든 멤버변수들은 getter, setter 만들어서 사용하면 된다.
사용자의 정보를 담을 객체를 만들었으니, DB에서 유저 정보를 직접 가져오는 인터페이스를 구현
UserDetailsService 인터페이스에는 DB에서 유저 정보를 불러오는 중요한 메소드가 존재.
-> loadUserByUsername() 메소드
이 메소드에서 유저 정보를 불러오는 작업을 한다.
여기서 CustomUserDetails형으로 사용자의 정보를 가져오면 된다.
가져온 사용자의 정보를 유/무에 따라 예외와 사용자 정보를 리턴하면 된다.
=> DB에서 유저의 정보를 가져와서 리턴