본문 바로가기

Kotlin/Spring

(Spring) LoggingFailureAnalysisReporter 애러 해결 방법

  • 해당 문제는 보통 애러로그를 제대로 읽어 봐야한다
Description:

  Parameter 0 of constructor in com.example.mytodo.domain.todo.service.TodoServiceImpl required a bean of type 'com.example.mytodo.domain.todo.repository.TodoRepository' that could not be found.
  • 애러 로그는 이렇다 보면 TodoRepository의 bean이 주입이 되지 않았다는 것이다

여기서 나는 몇가지 가능성을 살펴 보았다

  1. 실수로 Annotation을 주입을 안했다
@Repository
interface TodoRepository: JpaRepository<Todo, Long> {

    @Query("SELECT p FROM Todo p WHERE p.endTime = CURRENT_DATE")
    fun getTodayTodoList(): List<Todo>

}


@Service
class TodoServiceImpl(
    private val todoRepository: TodoRepository,
    private val commentRepository: CommentRepository,
): TodoService {


@Entity
@Table(name = "todo")
class Todo(
  •   일단 위에 애러에 명시되어 있는 코드를 전부 확인해봤는데 Bean 주입 Annotation은 전부 작성을 확인했다
  1. DB와 Entity간의 데이터 주입이 제대로 이루어지지 않았다
  •  Entity 클래스에 직접 접속을 해서 클래스 명 옆에 데이터 베이스 그림을 우클릭 한 후에 데이터 소스 할당을 클릭한다

 

  • 원하는 데이터 소스를 할당하면 끝!!
  1. Import문이 제대로 작성되지 않아 다른 Repository를 상속 받고 있다
  • Import문을 전부 검사해봤지만 해당 부분에서의 문제는 보이지 않고 있다
  1. DB와의 직접 연결이 원활하지 않다
  • 원하는 DB를 우클릭 후에 프로퍼티를 클릭 후 여기서 호스트와 포트번호 상태가 정상인지 확인하고 사용자와 비밀번호를 입력한다음에 연결 테스트를 시도한다

 

근데 나는 저 위에 방법이 다 정상 작동을 하는데도 같은 애러가 반복해서 발생을 했다 

  • 그래서 다음 단계로 넘어갔다 일단 현재 Entity 내부에 상속을 받고 있는 클래스가 있는데 해당 클래스에 Bean을 주입해주었다
@Configuration
@MappedSuperclass
abstract class DateTime {

    private var createAt: LocalDateTime = LocalDateTime.now()

    private var updateAt: LocalDateTime = LocalDateTime.now()

    @Bean
    @PrePersist
    fun firstDateTime() {
        createAt = LocalDateTime.now()
        updateAt = createAt
    }

    @Bean
    @PreUpdate
    fun setUpdateAt() {
        updateAt = LocalDateTime.now()
    }

    @Bean
    fun getCreateAt(): LocalDateTime {
        return createAt
    }

    @Bean
    fun getUpdateAt(): LocalDateTime {
        return updateAt
    }
}

 

  • 같은 애러 발생;; 이 후  AutoWired와 ComponentScan 등의 Annotation등을 활용하여 Bean을 등록 및 주소를 강제 할당 해봤는데 소용이 없었다

 

  • 그래서 생각한 것이 Repository를 주석처리 하고 돌려봤는데 이번에는 다른 Repository에서 애러가 발생하는 것 아닌가(그것도 동일 애러;;)
    • Repository 전체를 주석처리 하고 돌리니까 정상적인 빌드가 확인 되었다
  • 즉 이번 문제는 Repository와 Service간의 소통 간에서 Bean이 없어서 생기는 문제다
    • 라고는 생각했는데 뾰족한 수가 보이지 않는 것 같아서 IDE를 전체를 뒤져보았는데
  • 2가지 의문점이 있었다
    • 1. Application.yml 파일에 있는 저건 뭐지??
 spring:
    autoconfigure:
       exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

 

  • 사실 이것은 Spring 초기에 빌드가 안되서 이거를 붙여놓은 건데 생각해보면 지금 Dependency에 해당 의존성도 추가해놨고 DB연결도 해놨으니까 없어도 되는 것 아니었나   

 

  • 2. 환경 변수에 Port 번호가 안적힘
    • 보통 테스트때에는 Yml에 DB 정보를 기입하고 빌드를 하는데 보안을 위해서 환경 변수를 이용하여 작성을 했는데 환경변수 내용에 Port 번호가 빠져있다 바로 Port 번호를 적어주고 위에 내용을 삭제 하니까
  • 정상적으로 빌드 확인되었다

 

 

  • 결론
    1. 애러가 나면 애러만 보지 말고 해당 애러에 관한 모든 정보를 다 봐야 한다
    2. 환경 변수 설정을 잘하자...