이 마지막 5번 모듈은 우리가 1번부터 4번까지 거쳐온 "Bottom-Up Java Web" 여정의 최종 목적지, Spring Boot를 보여줍니다. 스프링 부트는 앞선 과정에서 우리가 고민하고 해결하려 했던 모든 문제들을 가장 현대적이고 생산적인 방식으로 통합하여 해결합니다.
이 모듈은 이전 모듈들의 장점만을 모아놓은 결정체와 같습니다.
- 3번 모듈의 내장 서버(Embedded Server) 가 주는 편리함
- 4번 모듈의 Spring MVC가 제공하는 강력하고 깔끔한 프로그래밍 모델
스프링 부트는 이 두 가지를 기반으로, 복잡했던 모든 설정을 자동화하여 개발자가 오직 비즈니스 로직에만 집중할 수 있는 환경을 제공합니다.
우리가 걸어온 길을 되짚어보면 스프링 부트의 위대함을 더 명확히 이해할 수 있습니다.
-
1. 원시 소켓 서버 모든 것을 수동으로 구현했습니다. 소켓을 직접 열고, 스레드를 관리하고, HTTP 프로토콜을 한 줄 한 줄 파싱해야 했습니다. 웹 서버의 가장 근본적인 동작 원리를 배웠습니다.
-
2. 서블릿 컨테이너 구현 1번의 저수준 로직을 추상화하여 우리만의 작은 서블릿 컨테이너를 만들었습니다.
Servlet의 생명주기를 관리하고, 요청을Context에 맞게 분배하는 등, WAS의 구조를 흉내 내 보았습니다. -
3. 내장 톰캣 활용 우리가 만든 컨테이너를 버리고, 검증된 표준 기술인 내장 톰캣(Embedded Tomcat) 으로 대체했습니다. 서버의 안정성과 표준 기술의 중요성을 깨달았습니다. 하지만 여전히 톰캣 API를 사용하여 직접 서버를 설정하고 구동해야 했습니다.
-
4. Spring MVC와 WAR 배포 애플리케이션 로직과 서버 환경을 분리했습니다. Spring MVC를 도입하여 컨트롤러를 POJO로 만들고,
DispatcherServlet을 통해 요청을 처리했습니다. 하지만 애플리케이션을WAR파일로 만들어 외부 톰캣에 배포해야 하는 번거로움이 있었습니다.
스프링 부트는 위 과정의 모든 번거로움을 마법처럼 해결합니다.
WebApplication.java 클래스에 붙은 이 단 하나의 어노테이션이 모든 것을 시작합니다. 여기에는 다음과 같은 기능이 포함되어 있습니다.
@Configuration: 이 클래스가 설정 정보를 담고 있음을 알립니다.@ComponentScan: 현재 패키지부터 시작하여@RestController와 같은 컴포넌트들을 자동으로 찾아서 등록합니다.@EnableAutoConfiguration: 스프링 부트의 핵심. 클래스패스에 존재하는 라이브러리들을 보고 "알아서" 필요한 설정을 자동으로 수행합니다.
build.gradle.kts에 spring-boot-starter-web 의존성을 추가하는 것만으로, 스프링 부트는 다음 작업들을 자동으로 수행합니다.
- 내장 톰캣 서버 실행: 클래스패스에 톰캣 라이브러리가 있음을 감지하고, 우리가 3번 모듈에서 수동으로 했던 톰캣 설정 및 실행 과정을 자동으로 처리합니다.
DispatcherServlet등록: 4번 모듈에서WebApplication.java를 상속받아 복잡하게 설정했던DispatcherServlet을 자동으로 등록하고 모든 요청(/*)을 받도록 설정합니다.
스프링 부트는 4번 모듈처럼 WAR 파일을 생성하는 대신, 실행 가능한 JAR 파일을 생성합니다. 이 JAR 파일 안에는 내장 톰캣 서버가 포함되어 있어, 애플리케이션 자체가 하나의 독립적인 서버 역할을 합니다.
이제 더 이상 외부 톰캣 서버를 설치하고 WAR 파일을 배포할 필요가 없습니다. 그냥 Java만 설치된 환경이라면 어디서든 아래의 간단한 명령어로 웹 서버를 실행할 수 있습니다.
java -jar my-application.jarHelloWorldController 코드는 4번 모듈과 완전히 동일합니다. 이는 스프링 부트가 애플리케이션의 비즈니스 로직은 그대로 유지하면서, 인프라 설정과 배포의 복잡성만을 제거해 준다는 것을 의미합니다.
결국, 스프링 부트는 개발자가 저수준의 기술적인 설정에서 벗어나 "Just Run" 할 수 있는 환경을 제공함으로써, 오직 애플리케이션의 가치를 만드는 데에만 집중할 수 있도록 돕습니다. 이것이 바로 우리가 바닥부터 한 단계씩 올라오며 최종적으로 도달한 현대적인 웹 개발 방식입니다.