작심십일러의 스프링 시작하기(10)-1_부록

서은경·2022년 8월 26일
0

Spring

목록 보기
17/43

MVC를 사용해 개발하면서 마주친 에러들을 정리해보겠다 ㅠ

🚫 맞닥뜨린 에러1

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

💡해결

/*
@SpringBootApplication 에서 자동으로 데이터베이스 값을 설정하려고 시도하지만 사용자는 데이터베이스 값을 입력을 안했기에 발생하는 에러
DB를 사용하지 않는다는 속성 넣어주고 MemberConfig의 dataSource 사용하도록 함
 */
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

또 다른 해결방법으로는 application.properties에 DB 접속정보를 추가해주는 방법이 있다.

🚫 맞닥뜨린 에러2

Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package. 

💡해결

@SpringBootApplication 어노테이션이 붙은 클래스 위치 변경

ComponentScan이 지정되지 않아 스프링이 모든 파일을 검사하여 Bean을 찾기 때문에 생기는 오류다.
바로 소스들을
스프링어플리케이션 실행파일을 java 폴더 바로 밑에 두지않으면 된다.

내부 톰캣 서버를 실행하는 진입점인 @SpringBootAllication을 작성한 클래스는 패키지의 최상단 혹은 동일한 레벨이 위치해야 한다
여러가지 어노테이션 기능을 합친 어노테이션임
컴포넌트 스캔은 현재위치에서 시작해 서브 패키지를 훑으며 클래스를 스캔하는데 엉뚱한 패키지에 작성하면 컨트롤러를 못찾는다 즉 저 파일을 컨트롤러가 있는 패키지 하위로 옮겨주면 해결

@SpringBootAplication 어노테이션은 auto-configuration을 담당합니다.
다시 이야기 하자면 @SpringBootAplication 어노테이션으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성이 모두 자동으로 설정됩니다.

@SpringBootAplication 어노테이션이 있는 위치부터 설정을 읽어가기 때문에 이 어노테이션을 포함한 클래스는 항상 프로젝트의 최상단에 위치해야만 합니다.

🚫 맞닥뜨린 에러3

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

💡해결

com.mysql.jdbc.Driver -> com.mysql.cj.jdbc.Driver

🚫 맞닥뜨린 에러2

package config;

// 스프링 부트 사용하긴 하지만 스프링 MVC 구조를 자세히 보기 위해 전부 만들어봄

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

@Configuration
// 스프링 MVC 설정을 활성화한다. 스프링 MVC를 사용하는데 필요한 다양한 설정을 생성한다.
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    // DispatcherServlet의 매핑 경로를 '/'로 주었을 때, JSP/HTML/CSS 등을 올바르게 처리하기 위한 설정을 추가한다.
    // SpringBoot에서는 사실상 DispatcherServlet만 사용하기 떄문에 기본적으로 등록되던 DefaultServlet이 더 이상 등록되지 않는다
    // 그래서 필요시 프로퍼티 파일에 server.servlet.register-default-servlet=true 추가해줘야함
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

💡해결

server.servlet.register-default-servlet=true 추가

Spring 2.4 릴리스 노트에 기술된 내용에는 DefaultServlet은 임베디드 서블릿 컨테이너에 더 이상 기본적으로 등록되지 않는다.

정리하고 보니 에러가 죄다 스프링 기반 프로젝트를 스프링부트를 이용해서 하려다보니 나는 에러 ㅎㅎ.. 이렇게 또 알아갑니다

0개의 댓글