• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JdbcTemplate 생성자 만드는데 에러나요. JdbcTemplate 타입의 bean을 찾을 수 없다고 하는데 어떻게 해결해야 하나요?

23.01.26 20:30 작성 23.01.27 03:02 수정 조회수 1.07k

1

JdbcTemplate 생성자 만드는데 에러나요. JdbcTemplate 타입의 bean을 찾을 수 없다고 하는데 어떻게 해결해야 하나요?

스크린샷 2023-01-26 오후 8.26.54.png

강의를 더 보니까 19강에서 설명해주고 계신 build.gradle 때문인거 같은데요.

저는 해당 파일이 비활성화 되어 있는 것 같아요.

위 캡쳐처럼 코드가 알록달록(주황, 보라, 노랑..) 하지 않고, 모두 회색으로 보이는데 그래서 일까요?

스크린샷 2023-01-27 오전 3.01.08.png

답변 1

답변을 작성해보세요.

0

안녕하세요, 슝슝님!! 질문 올려주셔서 감사드립니다!! 🙏

JdbcTemplate 타입의 bean을 찾을 수 없다고 나오시는군요..!!! 😭

 

제 경험상, 이런 상황에서는 2가지 갈래로 접근을 해야 합니다!!!

  1. 실제로는 bean이 잘 등록되었는데 IntelliJ 오류로 찾을 수 없다고 나오는 경우

  2. 정말 bean을 찾지 못한경우

 

현재 상황이 1번인지 2번인지 확인하는 방법은, 서버를 실행시켜보는거에요!!

이때 IntelliJ 설정(Preferences) -> Build, Execution, Deployment -> Build Tools -> Gradle에서
Build and run using: Gradle / Run tests using: Gradle 로 되어 있는지 확인해보시면 좋습니다!! (Gradle을 이용해 서버를 실행할지, IntelliJ를 이용해 서버를 실행할지 선택하는 옵션으로 저는 Gradle을 사용하는 편입니다!! 관련 질문글: https://www.inflearn.com/questions/619558/%EB%B9%8C%EB%93%9C-%ED%88%B4-%EA%B4%80%EB%A0%A8-%EA%B6%81%EA%B8%88%ED%95%B4%EC%9A%94)

image

위 옵션을 설정하시고, IntelliJ 상에서 '빨간줄 (자동 주입을 할 수 없습니다)'이 나오더라도 서버가 잘 실행된다면, 실제로는 주입이 잘 된 것이고, 서버 구동에는 문제가 없다고 할 수 있습니다!

이때 IntelliJ에서 빨간줄이 계속해서 나오는게 불편하시다면, @Suppress("SpringJavaInjectionPointsAutowiringInspection") 와 같은 어노테이션을 추가해 해당 클래스의 빨간줄을 나오지 않게 할 수도 있고, IntelliJ가 여러 버전이 설치되었는지 확인해 1개만을 남겨두거나 최신 버전으로 업데이트해 IntelliJ 오류를 해결할 수도 있습니다!

@Suppress 어노테이션의 경우 외우고 있다기 보다는 빨간줄이 나오는 곳에 커서를 두시고, option + enter (윈도우 : Alt + Enter) 를 활용해 넣어주는 편입니다!image

 

만약 서버가 정말 실행이 되지 않는다면, bean을 진짜 찾지 못한 경우입니다!!

벌써 19강까지 들어주셨으니, 조금 더 자세한 설명을 드려 볼게요!!! 🙏

원래 정상적인 경우라면, 스프링 부트 코드 안에 있는 아래 클래스 (JdbcTemplateConfiguration)에서 JdbcTemplate을 @Bean 으로 등록해주고 있기 때문에 저희가 JdbcTemplate을 바로 가져와 사용할 수 있는건데요!!!

  • @Bean 에 대한 설명은 21강에 있습니다!!!

imagebean을 정말 찾지 못한거라면, JdbcTemplateConfiguration 이 정상적으로 처리되지 않아서 생긴일입니다!!

이에 대해서는 2가지 접근을 해볼 수 있을 것 같아요!!

 

[정말 bean을 찾지 못한 경우 - 1]

build.gradle파일의 dependencies 부분에 아래 코드를 추가해볼 수 있을 것 같습니다!

implementation 'org.springframework.boot:spring-boot-starter-jdbc'

 

[정말 bean을 찾지 못한 경우 - 2]

혹시나 위의 의존성을 추가해보았는데도 해결되지 않으신다면, UserController 의 생성자를 바꿔볼 수 있어요!

// 원래 코드
public UserController(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
}

// 코드 변경!!!
public UserController(DataSource dataSource) {
  this.jdbcTemplate = new JdbcTemplate(dataSource);
}

 

추가로 말씀해주신 build.gradle이 회색인 것은, 저 역시 build.gradle이 정상적으로 로드되었더라도 회색일 때가 있더라고요!!!

IntelliJ 오른쪽에 있는 Gradle > 새로고침 부분이 음영처리 되어 클릭할 수 없으면, 가장 최신 버전의 Gradle 스크립트가 적용되어 있는것이니 너무 걱정하지 않으셔도 될 것 같습니다!

image

혹시나 위에서 말씀드린 모든 방법을 사용해보셨는데도 해결이 안되신 경우, (😭...) 코드를 압축해서 보내주시거나 git에 올려주시면 제 컴퓨터에서 다운로드 받아 확인해보도록 하겠습니다!! 🙏🙏(JdbcTemplate을 23강부터 더 사용하지는 않지만, 22강까지 실습해보시는 것도 의미가 있으니까요!!)

 

감사합니다!! 🙇🙇