spring boot 3.x 로 로그인을 구현하는 중에 의문이 생겼습니다
어라 ? userRepository로 정보를 찾을 때 user의 id를 이용하여 정보를 찾는데
Optional<User> findByuserid(String userid);
userDeatilsService를 상속받는
PrincipalDetailsService에서도
loadUserByUsername 메서드를 사용하여 user의 id를 이용해 정보를 찾을 수 있네?
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepo.findByuserid(username) .orElseThrow(() -> new UsernameNotFoundException("User not found: " + username)); return new PrincipalDetails(user); }그럼 userDeatilsService를 상속받는 클래스는 왜 필요한거지?
답은 ?!
UserRepository는 직접 DB에 접근해서 CRUD에 대한 로직들을 처리하고
PrincipalDetailsService는 DB에 접근하는 코드는
User user = userRepo.findByuserid(username)
이 부분을 통해 repository에 위임해서 처리한다는 겁니다!
이렇게 service와 repository를 구분하면
비즈니스 로직에 대한 문제가 생겼을 때 service 패키지를 확인하고
DB에 대한 문제가 생기면 repository를 확인해 유지보수가 쉽게 가능하게 됩니다!