스프링 프레임웍(Spring Framework)의 현행 버전은 4.1.x다. 그런데 세월이 흐르고 모든 것이 변해가는데 2014년 4/4분기인 현재 시점에서 아직도 2.5 버전대의 습관에서 못 벗어난 경우를 가끔 본다. 과감히 바꿔야할 때가 됐다. 이제는 Spring Boot를 써야할 때다. 스프링 부트는 스프링 프레임웍을 사용하는 프로젝트를 아주 간편하게 셋업할 수 있는 스프링 프레임웍의 서브프로젝트다.

스프링 프레임웍은 우리나라에서 국가 표준이므로 대부분의 자바 프로젝트에서 채택하는 명실상부한 1위 프레임웍이다. 나도 스프링 프레임웍을 몇 년간 써보면서 느끼는데 중요하면서도 개발자가 직접 만들기 힘든 기능들을 아주 맛깔스럽게 빚어놓음으로써 개발자들의 본 업무 외적인 시스템 내부 작업을 아주 간편하게 해결해주고 있다.

그런데 스프링의 다양한 장점에 비해 개발자들의 이해도는 낮은 편이며 남들이 해놓은 것을 가져다 수정해서 쓰는 “ctrl-c, ctrl-v” 방식 개발이 현장에는 만연해 있다. 또한 스프링을 충분히 활용하려면 초기 셋업부터 중요한데 일반 개발자는 거의 손을 못대는 경우가 많다. 진화하고 있는 스프링 프레임웍에 비해 우리나라 현장에서는 다음과 같은 문제점이 있다고 생각된다.

웹 개발의 경향은 전체적으로 작은 서비스의 집합체로서의 웹으로 가는 편인데 우리나라 프로젝트들은 아직도 대규모 컨텐트 제공 웹사이트를 만들기 위한 프레임웍 구성에 치중해 있는 편이다. 커다란 프로젝트를 하나 구성하면 대부분은 그 안에서 자기가 맡은 일부 업무만 개발하고 말고 PoC 개념의 소규모 프로젝트를 동시 다반사로 진행한다든가 개발자 각각의 학습과 발전을 위한 기회를 마련하는 것은 상당히 요원하다.

여기서 요지는 프레임웍이란 것이 개발하는 데 도움을 주기 위해 도입하는 것인데 우리나라 개발 현장에서는 프레임웍을 자유자재로 다루기 위한 진입 장벽이 높아 보다 새롭고 유익한 변화를 도입하거나 보다 다양한 프레임웍의 면모를 활용하는 게 쉽지 않다는 것이다.

내가 수행한 몇 프로젝트에서 스프링 부트를 적용해본 결과 그 장점이 아주 만족스러운 편이었다. 위에 말한 문제점들을 해결한다고 말하는 것이 아니라 스프링의 다양한 변화 중 가장 먼저 관심을 가질 만한 서브프로젝트라고 생각돼서 언급하는 것이다. 아직 스프링 부트를 접해보지 못했다면 다음과 같은 면에서 유용함을 느낄 수 있으므로 추천하고 싶다.

실제 예시를 들어가보자. Spring Tool Suite을 사용하지 않고 수작업으로 웹프로젝트를 셋업할 경우다. 우선 의존 라이브러리를 maven pom.xml 파일에 지정해야할 것이다. 스프링 부트는 다음 한 가지 라이브러리 의존성만 넣어도 기본적인 웹 개발이 가능하도록 나머지 의존 라이브러리를 준비해준다.

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

다음으로는 스프링 환경 셋업이다. 아래와 같이 xml 설정 없이 자바 클래스 하나로 기본 설정이 끝난다. @Configuration, @EnableAutoConfiguration 같은 어노테이션이 보인다.

package dylan.sample.spring.boot; // 예시 패키지

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

이제 서비스할 웹 페이지를 만들겠다면 늘 하던 대로 @RequestMapping 어노테이션을 붙인 컨트롤러 메서드를 만들면 된다.

    @RequestMapping("/")
public @ResponseBody String helloWorld() {
return "Hello World!";
}

그런데 위의 예제는 메서드 반환 값에 @ResponseBody를 붙임으로써 별도의 뷰가 없는 경우를 예로 든 것이다. 뷰를 JSP로 하겠다면 src/main/resources/application.properties 파일에 다음과 같이 지정해준다.

spring.view.prefix                  = /jsp/
spring.view.suffix = .jsp

위 두 줄로 인해 스프링 MVC는 /jsp/ 폴더에 있는 jsp 파일들을 기본 뷰로 사용하게 된다. 컨트롤러 메서드는 다음과 같이 고치면 된다. /jsp/hello.jsp를 찾아 보여주게 된다.

    @RequestMapping("/")
public String helloWorld() {
return "hello"; // jsp 지정
}

스프링 부트의 기본 개념은 프로젝트 웹사이트의 설명에 분명하게 드러나 있다.

Spring Boot takes an opinionated view of building production-ready Spring applications. Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible.

즉, 스프링 부트는 환경 설정보다는 통상적인 관례를 더 우선시한다. 환경 설정 한 줄 더 추가하는 것보다는 개발자들이 자주 하던 것이 무엇인지를 알고 있음으로 해서 사용자 환경에 따라 자동으로 구성해주는 것이다. 관심이 있다면 이러한 자동 설정이 어떻게 만들어져 있는지 소스를 보는 것도 좋을 것이다. 기존에 일일이 작성하던 환경 설정 값이 자바 클래스에 박혀있음을 보게 될 것이다.

자바는 버전 8을 내보내면서 근본적인 변화를 맞이하고 있다. 2014년 올해 자바와 스프링은 변혁의 한 해였던 것 같다. 같이 동참해보는 게 어떨까 권유해본다.