이번 포스트에서는 Spring Legacy Project를 SpringBoot로 변경하는 과정을 살펴보자.
기본 설정
빈 스켄과 자동 설정
SpringBoot를 하면서 처음 살펴볼 녀석은 당연히 main 메서드가 작성된 @SpringBootApplication이다.
이 녀석은 @SpringBootConfiguration을 가지고 있는데 이는 내부적으로 @Configuration을 포함한다. 따라서 @Bean을 통한 명시적인 빈 등록이 가능하다.(하지만 일반적으로는 역할마다 @Configuration을 따로 작성한다.)
@EnableAutoConfiguration은 자동 설정을 진행한다. 예를 들어 Spring Web dependency를 추가하면 자동으로 tomcat 서버를 내장하고 구성한다. MyBatis나 JPA를 추가하면 자동으로 DataSource를 설정하려고 한다.
@ComponentScan은 현재 @SpringBootApplication이 선언된 클래스의 하위 패키지를 자동으로 스켄한다. 따라서 향후 @Component들은 가급적 이 하위 패키지에 선언하면 신경쓸 필요가 없어진다.
기본 빈 교체
필요에 따라 교체가 가능하기 때문에 필수적인진 않지만 기본적으로 적용되는 빈들도 살펴보자.
- mybatis-spring-boot-starter가 가져오는 spring-boot-starter-jdbc는 datasource로 HikariCP를 가져온다. 만약 기존에 commons.dbcp2를 사용중이면 교체해주자.
- spring-boot-starter-web이 가져오는 spring-boot-starter-json은 message converter로 jackson-databind를 사용한다. 만약 기존에 gson을 사용한 경우라면 교체해주자.
- spring-boot-starter가 가져오는 spring-boot-starter-logging은 logback을 기본으로 사용한다.
properties를 통한 설정
application.properties
애플리케이션을 만들면서 사용했던 여러 설정 파일들을 그대로 사용할 수도 있지만 application.properties 하나로 통합 관리할 수 있게 되었다. 예를 들어 dbinfo.properties 등은 그대로 application.properties에서 사용 가능하며 추가적인 @PropertySource는 필요가 없다.
추가로 위 설정에 의해 DataSource나 TransactionManager는 자동으로 구성되므로 명시적으로 등록할 필요가 없으며 @EnableTransactionManagement도 삭제한다.
로깅과 관련해서 logback.xml 에 했던 설정들도 application.properties에서 대부분 설정이 가능하다. 대표적으로 포멧과 레벨을 들 수 있는데 아래와 같이 설정해볼 수 있다.
mybatis 관련 설정
mybatis 관련 설정도 application.properties로 이동한다. 따라서 SqlSessionFactory, SqlSessionTemplate도 필요 없다.
웹 사용 설정
application.properties
jsp를 위한 view resolver 설정을 application.properties에 설정한다.
따라서 명시적인 view resolver는 삭제하면 되고 @EnableWebMVC도 필요 없다.
jsp를 위한 추가적인 의존성
기본적으로 내장된 tomcat에는 jasper가 없기 때문에 jsp를 위한 추가적인 의존성이 필요하다.
폴더 구성
기본적으로 springboot는 template엔진(thymeleaf, mustache 등)은 template에 작성하지만 JSP는 예외다. JSP를 위해서 src/main 아래에 webapp/WEB-INF를 구성하고 기존 코드를 가져온다. 단 스프링 설정 파일들이 있던 spring 폴더는 필요 없다.
web.xml 파일도 필요가 없는데 encodingFilter는 기본으로 내장되어있고 404 오류에 대한 추가적인 작업도 필요 없다.
정적 파일들은 src/main/resources/static 폴더에서 관리한다. 따라서 resources 내용은 static으로 이동해주고 addResourdeHandlers를 제거해준다.
error handling
상태코드별 에러 페이지
spring boot는 was를 내장하기 때문에 모든 예외에 대해 편리하게 처리할 수 있다.
- 일단 에러가 발생하면 /error 경로로 forward가 진행된다. 따라서 error.jsp가 있으면 모든 오류가 다 취합된다.
- 상태코드별로 예외를 처리하고 싶다면 /error/{상태코드}.jsp를 작성하면 된다.
- 프로그래밍적인 처리가 필요하다면 BasicErrorController를 상속 받아서 빈으로 등록한다.