자바 웹 프로젝트 #6 Service

Dear·2025년 8월 29일

TIL

목록 보기
69/74

💙 MemberService

Spring Security에서 사용자 인증을 위해 UserDetailsService를 구현한 MemberService 클래스

UserDetailsService

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()를 사용해 변환해야한다.

@RequiredArgsConstructor

Lombok 라이브러리에서 제공하는 어노테이션으로 final 필드나 @NonNull이 붙은 필드만을 대상으로 생성자를 자동 생성해준다.

memberRepositoryfinal이기 때문에 @RequiredArgsConstructor가 생성자에 포함시킨다.

@RequiredArgsConstructor
public class MemberService implements UserDetailsService {

    private final MemberRepository memberRepository;
}

// Lombok이 생성자를 자동 생성
public MemberService(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

saveMember(Member member)

회원 가입 로직으로 먼저 중복 회원 검사를 수행하고(validateDuplicateMember), 문제 없으면 저장한다.

validateDuplicateMember(Member member)

이메일로 기존 회원을 찾아 존재하면 예외를 던진다.
중복 가입을 막기 위한 로직이다.

loadUserByUsername

Spring Security가 로그인할 때 호출하는 메소드이다.
이메일로 DB에서 Memer객체를 조회하고, 없으면 예외 발생한다.

profile
친애하는 개발자

0개의 댓글