Java 문법으로 작은 프로그램을 만들 때는 main()에서 객체를 직접 연결해도 충분하다. 하지만 웹 서비스에는 HTTP 요청 처리, 객체 간 연결, DB 트랜잭션, 설정 등 반복되는 기반 작업이 많다. Spring Framework는 이런 공통 기능을 제공하고, Spring Boot는 Spring 기반 애플리케이션을 편리하게 설정하고 실행하게 해준다.
회원 가입 기능을 생각해보자. 요청을 받는 Controller, 가입 규칙을 처리하는 Service, 데이터를 읽고 쓰는 Repository가 협력한다.
HTTP 요청 → Controller → Service → Repository → DB
↑ ↓
HTTP 응답 ← 처리 결과
Spring은 객체 생성·연결을 관리하는 IoC/DI, 반복되는 부가 기능을 분리하는 AOP, 트랜잭션·캐시·웹 기술의 차이를 감추는 서비스 추상화를 제공한다.
Spring Boot는 이러한 Framework 위에 실행 환경과 자동 설정을 얹는다. Boot가 Framework를 대체하는 것은 아니다. @Service, @Component, @Transactional의 핵심 동작은 여전히 Framework에 속한다.
예전 Java 프로젝트의 Java 8 필수 설정이나 Maven 리소스 빌드 플러그인을 최신 프로젝트에 그대로 복사하지 말자. 해당 프로젝트가 사용한 의존성 때문에 생긴 제약일 수 있다.
Spring Initializr에서 다음과 같이 시작한다.
spring-boot-starter-webmvc)2026년의 Spring Boot 4 계열은 Java 17 이상을 요구한다. Boot 4에서는 오래된 spring-boot-starter-web보다 spring-boot-starter-webmvc를 선택하는 것이 권장된다. 버전 번호는 직접 추측해서 조합하지 않고 생성된 프로젝트의 의존성 관리를 따른다.
java -version
.\gradlew.bat --version
이 명령으로 Windows에서 실행하는 JDK와 Gradle 설정을 확인할 수 있다.
기본 패키지가 com.example.shop이라면 아래 파일을 src/main/java/com/example/shop/StatusController.java에 만든다.
package com.example.shop;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class StatusController {
@GetMapping("/api/status")
public String status() {
return "running";
}
}
@RestController는 HTTP 응답 본문을 반환하는 컨트롤러라는 의미이고, @GetMapping은 GET 요청과 메서드를 연결한다. 생성된 메인 클래스에는 다음과 같은 진입점이 존재한다.
package com.example.shop;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ShopApplication {
public static void main(String[] args) {
SpringApplication.run(ShopApplication.class, args);
}
}
@SpringBootApplication에는 자동 설정과 컴포넌트 스캔을 활성화하는 구성이 포함된다. 기본적으로 메인 클래스가 속한 패키지와 하위 패키지를 탐색하므로 컨트롤러 위치가 중요하다.
.\gradlew.bat bootRun
브라우저에서 http://localhost:8080/api/status를 열면 running이 반환된다. 따로 설정하지 않았다면 기본 포트는 8080이다.
src/main/java/ Java 애플리케이션 코드
src/main/resources/ 설정 파일과 리소스
src/test/java/ 테스트 코드
build/ Gradle 빌드 결과
Maven은 보통 pom.xml과 target/을 사용한다. 빌드 결과 디렉터리는 일반적으로 Git 관리 대상이 아니다.
application.properties에 server.port=8081을 추가한다.java -version, IDE의 Project SDK, Gradle JVM을 비교한다.javax.servlet 오류: 최신 Jakarta 기반 프로젝트에는 API 패키지 및 의존성 변경이 필요하다. 단순히 JDK만 교체해서 해결되지 않는다.@SpringBootApplication은 컴포넌트 탐색과 자동 설정의 출발점이다.@RestController와 @GetMapping으로 기본 HTTP API를 만들 수 있다.spring-boot-starter-webmvc를 고려한다.