Spring Boot란 무엇인가?
자바 생태계는 오랜 시간 동안 엔터프라이즈급 애플리케이션 개발을 위한 강력한 플랫폼으로 자리 잡아왔지만, 전통적인 Spring 프레임워크 기반의 개발은 상당한 양의 설정 파일(XML 기반)과 복잡한 의존성 관리로 인해 초기 구축 비용이 높았습니다. 이러한 문제를 해결하기 위해 등장한 것이 바로 Spring Boot입니다.
Spring Boot는 기존 Spring 프레임워크의 강력한 기능을 그대로 유지하면서도, 개발자가 반복적으로 작성해야 했던 부트스트래핑 코드와 설정을 최소화하는 것을 목표로 합니다. "컨벤션 오버 컨피규레이션(Convention over Configuration)" 철학을 따르며, 대부분의 일반적인 사용 사례에 대해 미리 정의된 기본 설정을 제공함으로써, 개발자는 비즈니스 로직에 집중할 수 있게 됩니다.
주요 특징
- 내장 서블릿 컨테이너: Tomcat, Jetty 또는 Undertow를 내장하여 WAR 파일을 외부 애플리케이션 서버에 배포할 필요 없이 JAR 파일 하나로 독립 실행형 애플리케이션을 구동할 수 있습니다.
- 스타터 종속성 (Starter Dependencies): 예를 들어
spring-boot-starter-web을 추가하면 Spring MVC, Jackson, Tomcat 등의 관련 라이브러리가 자동으로 포함되어 수동으로 여러 종속성을 관리할 필요가 없습니다. - 자동 구성 (Auto-configuration): 클래스패스에 존재하는 라이브러리를 기반으로 필요한 빈(Bean)들을 자동으로 설정합니다. 예를 들어 H2 데이터베이스 드라이버가 클래스패스에 있으면 메모리 DB용 DataSource를 자동으로 구성합니다.
- 운영 모니터링 지원: Spring Boot Actuator를 통해 애플리케이션의 상태, 메트릭, 환경 정보 등을 HTTP 엔드포인트로 쉽게 확인할 수 있습니다.
- 코드 제너레이션이나 XML 설정 불필요: 순수 Java 기반의 구성(@Configuration, @Component 등 어노테이션 중심)을 사용하며, 설정 파일도 YAML이나 properties 형식으로 간결하게 작성 가능합니다.
간단한 웹 애플리케이션 생성
이제 Spring Boot를 사용하여 간단한 REST API를 만들어 보겠습니다.
1. Maven 프로젝트 설정
먼저 pom.xml 파일에 다음과 같은 부모 POM과 종속성을 추가합니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 메인 애플리케이션 클래스 작성
프로젝트의 루트 패키지에 아래와 같은 메인 클래스를 생성합니다. 이 클래스는 @SpringBootApplication 어노테이션이 붙어 있으며, 컴포넌트 스캔의 기준점 역할을 합니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyWebApp {
public static void main(String[] args) {
SpringApplication.run(MyWebApp.class, args);
}
}
3. 컨트롤러 구현
REST API 요청을 처리할 컨트롤러를 작성합니다. 아래 예제는 간단한 문자열 응답을 반환합니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}
4. 애플리케이션 실행 및 테스트
메인 클래스의 main 메서드를 실행하면 내장 톰캣 서버가 포트 8080에서 시작됩니다. 브라우저나 curl 명령어로 http://localhost:8080/hello 주소에 접근하면 "Hello, World!"라는 응답을 확인할 수 있습니다.
애플리케이션은 단 세 가지 요소만으로 구성되었습니다: 메인 클래스, 컨트롤러, 그리고 빌드 설정. 나머지 모든 인프라 구성은 Spring Boot가 자동으로 처리해주었습니다.