[TIL] 심화 프로젝트 4일 차

a.rubz·2023년 1월 19일
0
post-thumbnail
post-custom-banner

스파르타 내일배움캠프에서 진행하는 심화 프로젝트 일지를 작성합니다.

📋 오늘 한 업무

  1. 심화 프로젝트 기능 구현
  • Board 기능 구현 (CRUD + Paging)
  • MatchBoard, Admin, exception 수정

🔥 업무 중 이슈, 고민 (+ 해결)

[Error] No property 'userRoleEnum' found for type 'User'

구현한 프로젝트를 테스트하기 위해 실행을 하자마자 실행도 안 되고 에러가 발생했다,,
엄청 긴 에러인데 그 중에서 중요한 문구만 가져와봤다.

  1. 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

    => 먼저 userRepository를 시작으로 시큐리티까지 빈 생성에 문제가 생기는 것을 알게 되었다.

  1. 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에 있는 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);
	...
}

이런 약간의 실수로 프로젝트 자체가 실행도 못하게 되다니,, 정말 코딩의 세계는 험난하다,, 앞으로는 익숙한 코드더라도 써지는대로 막 쓰는 게 아니라 이게 어떤 걸 의미하는지 정확하게 생각하면서 작성해야겠다!



✨ 내일 할 일!

  • 프로젝트 오류 수정 및 마무리!
  • 발표 준비
profile
🔥 개발 공부 🔥
post-custom-banner

0개의 댓글