이번 시간부터는 스프링 부트이 두가지 특징 중 하나인 컨테이너리스 라는게 어떤 식으로 만들어졌고 어떻게 동작하는가를 살펴볼 예정.

사실 컨테이너리스를 제안한다는 건 서블릿 컨테이너와 관련된 번거롭고 복잡한 작업들 또 그걸 하기 위해 필요한 지식 이런 것들을 개발자들이 더 이상 신경 쓰지 않고 스프링 컨테이너에 올라가는 컴포넌트 저 빈을 만드는 거에만 집중해서 애플리케이션을 개발하면 되도록 스프링 부트가 뭔가 작업을 해준다.

따라서 이런 모델이 된다. web., xml, 서블릿 컨테이너 설치, 배포와 같은 작업 다 필요없이 stand-alone 으로 동작하는 그러니까 메인 메소드를 실행하는 간단한 방법으로 스프링 애플리케이션을 동작시키고 싶은 것.
package tobyspring.hello;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(String name) {
return "Hello " + name;
}
}
Rest Controller 로 등록해놨기에 웹 응답이 만들어질 때 컨트롤러 메소드의 return type 인 String 을 보고 content type 을 자동으로 결정해준다. String 이 return 되는 경우 text/plain 타입의 컨텐츠 타입이 만들어지고 리턴한 문자열 그대로 응답의 바디로 들어간다.
우리는 이 작업을 하기 위해 Tomcat 을 설치하고 배포하기 위해서 빌드를 이렇게 하겠다와 같은 빌드 스크립트를 만들거나 하지 않았다. 단지 스프링 부트가 처음 만들어주는 Main Method 를 실행하기만 했는데 자바의 가장 대표적인 서블릿 컨테이너인 톰켓이 떠서 동작을 하고 스프링과 관련된 어떠한 설정도 하지 않았는데 스프링 컨테이너도 떴다. 컨트롤러로 만들어놓은 저 코드가 스프링 위에 올라갔기 때문에 이 Controller 의 기능을 동작시킬 수 있다.
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
SpringApplication 에노테이션을 붙이고 파라미터로 class 이름을 주고 SpringApplication 에 run 이라는 static 메소드를 실행하면 컨테이너와 관련된 모든 작업을 포함해서 스프링을 기동되게 만드는 모든 작업들이 알아서 진행되고 우리는 스프링에 올라갈 컨트롤러 코드만 만들면 됐던 것.
여기서 어떤 일이 일어나고 있는지 차근차근 따라가볼 예정.
시작은 Spring Boot 의 도움을 받지 않고 우리 힘으로 이렇게 동작하는 코드를 만들어 볼 예정.