
Spring Security에서 사용자 인증을 위해
UserDetailsService를 구현한MemberService클래스
Spring Security에서 사용자 인증 시 사용자 정보를 가져오기 위한 인터페이스입
public interface UserDetailsService {
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}
사용자가 로그인할 때, 스프링 시큐리티는 내부적으로 loadUserByUsername()을 호출하여 사용자 정보를 조회한다. 이 메서드를 구현해서 DB에서 사용자 정보(email, password, roles 등)를 꺼내오고, Spring Security가 이해할 수 있는 UserDetails 객체로 반환해야한다.
Spring Security는 자체 userDetails 타입(User 클래스)을 사용하기 때문에 개인이 만든 Member 엔티티를 직접 사용할 수 없다.
User.builder()를 사용해 변환해야한다.
Lombok 라이브러리에서 제공하는 어노테이션으로 final 필드나 @NonNull이 붙은 필드만을 대상으로 생성자를 자동 생성해준다.
memberRepository가 final이기 때문에 @RequiredArgsConstructor가 생성자에 포함시킨다.
@RequiredArgsConstructor
public class MemberService implements UserDetailsService {
private final MemberRepository memberRepository;
}
// Lombok이 생성자를 자동 생성
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
회원 가입 로직으로 먼저 중복 회원 검사를 수행하고(validateDuplicateMember), 문제 없으면 저장한다.
이메일로 기존 회원을 찾아 존재하면 예외를 던진다.
중복 가입을 막기 위한 로직이다.
Spring Security가 로그인할 때 호출하는 메소드이다.
이메일로 DB에서 Memer객체를 조회하고, 없으면 예외 발생한다.