스파르타 내일배움캠프에서 진행하는 심화 프로젝트 일지를 작성합니다.
구현한 프로젝트를 테스트하기 위해 실행을 하자마자 실행도 안 되고 에러가 발생했다,,
엄청 긴 에러인데 그 중에서 중요한 문구만 가져와봤다.
UnsatisfiedDependencyException: Error creating bean with name 'securityConfig' defined in file
UnsatisfiedDependencyException: Error creating bean with name 'jwtUtil' defined in file
Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userRepository' defined
Failed to create query for method public abstract org.springframework.data.domain.Page com.sparta.zipsa.repository.UserRepository.findByUserRoleEnum(com.sparta.zipsa.entity.UserRoleEnum,org.springframework.data.domain.Pageable); No property 'userRoleEnum' found for type 'User'
이 문구들을 종합해서 해석하자면 UserRepository에 있는 findByUserRoleEnum(...)이란 메서드는 User라는 객체의 컬럼에 UserRoleEnum이란 것이 없어서 메서드 자체에 문제가 있었고 이 때문에 UserRepository를 빈으로 등록할 수 없게 됐다.
이로 인해서 관련된 여러 부분에서도 Bean 등록에 실패하게 되어 길고 긴 에러가 발생한 것이다.
다음은 문제의 코드이다.
[UserRepository]
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findByUserRoleEnum(UserRoleEnum role, Pageable pageable);
...
}
문제가 되는 findByUserRoleEnum(...)의 UserRoleEnum은 User에 없는 컬럼이라고 한다. 아닌데 분명 있는데! 라고 생각하며 다음의 코드를 확인했다.
[User]
@Entity(name = "users")
public class User {
...
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
...
}
UserRoleEnum이 있긴 한데,,, 컬럼명이 아니라 컬럼에 들어오는 데이터들의 타입명이 UserRoleEnum,,,,
다시 말해서, 컬럼명 => role
, 데이터 타입 => UserRoleEnum
인 것이었다.
UserRepository를 다음의 코드로 수정하니 잘 돌아갔다.
[UserRepository]
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findByRole(UserRoleEnum role, Pageable pageable);
...
}
이런 약간의 실수로 프로젝트 자체가 실행도 못하게 되다니,, 정말 코딩의 세계는 험난하다,, 앞으로는 익숙한 코드더라도 써지는대로 막 쓰는 게 아니라 이게 어떤 걸 의미하는지 정확하게 생각하면서 작성해야겠다!