@Transactional(readOnly = true)
    public User readUserIfValid(String username, String password) {
        Optional<User> user = userService.readUserByUsername(username);

        if (!isExistUser(user)) {
            log.warn("해당 유저가 존재하지 않습니다. username: {}", username);
            throw new UserErrorException(UserErrorCode.INVALID_USERNAME_OR_PASSWORD);
        }

        if (!isValidPassword(password, user.get())) {
            log.warn("비밀번호가 일치하지 않습니다. username: {}", username);
            throw new UserErrorException(UserErrorCode.INVALID_USERNAME_OR_PASSWORD);
        }

        return user.get();
    }
@DisplayName("로그인 시, 유저가 존재하고 비밀번호가 일치하면 User를 반환한다.")
    @Test
    void readUserIfValidReturnUser() {
        // given
        User user = UserFixture.GENERAL_USER.toUser();
        given(userService.readUserByUsername(user.getUsername())).willReturn(Optional.of(user));
        given(passwordEncoder.matches(user.getPassword(), user.getPassword())).willReturn(true);

        // when
        User result = userGeneralSignService.readUserIfValid(user.getUsername(), user.getPassword());

        // then
        assertEquals(result, user);
    }