springbootdeveloper 패키지를 우클릭하여 TestContoller 클래스를 만든다.
package me.tony.springbootdeveloper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello, world!";
}
}

스프링 부트 스타터는 의존성이 모여 있는 그룹이다.
스타터는 spring-boot-starter-{작업유형}이라는 명명규칙이 있다.


web 스타터와 test 스타터가 의존성으로 명시되어 있다.
1) web 스타터: Spring MVC를 사용해 RESTful을 포함한 웹 애플리케이션 개발에 사용한다.
2) test 스타터: 스프링 부트로 애플리케이션을 테스트하기 위한 스타터이다.
스프링 부트에서는 애플리케이션이 최소한의 설정만으로도 실행되게 여러 부분을 자동으로 구성한다.
나중에 개발을 하며 내가 구성하지 않은 부분인데 스프링에서 어떻게 자동으로 구성했는지 확인하는 상황이 온다.
스프링 부트는 서버를 시작할 때 구성 파일을 읽어와서 설정한다.(자동설정)
- 자동설정은 META-INF에 있는 spring.factories 파일에 담겨 있다.

이것들이 프로젝트에 쓰일 구성 후보들이다.
스프링 부트를 시작할 때 이 파일에 설정되어 있는 클래스를 모두 불러오고, 이후에 프로젝트에 사용할 것들만 자동으로 등록한다.
External Libraries를 펼치고 spring-boot-autoconfigure:x.x.x파일을 찾는다. 미리 구현되어 있는 자동 설정파일을 확인할 수 있다.

이 중에서 h2를 확인해 볼 수 있다.
자동 구현되는 클래스는 AutoConfiguration,
속성값을 정의해놓은 클래스는 Properties를 이름끝에 붙인다.
자동구성 클래스가 활성화되면, 해당 클래스 내에서 정의된 빈들이 스프링 컨테이너에 등록된다.
스프링 컨테이너는 등록된 빈들을 필요에 따라 애플리케이션에 주입한다.
package me.tony.springbootdeveloper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootDeveloperApplication {
public static void main(String [] args){
SpringApplication.run(SpringBootDeveloperApplication.class, args);
}
}
자바의 main() 메소드와 같은 역할을 한다.(여기서 스프링부트가 시작된다)
1) @SpringBootApplication 어노테이션은 스프링 부트 사용에 필요한 기본 설정을 해준다.
2) SpringApplication.run()메소드는 애플리케이션을 실행한다.
첫번째 인수는 스프링 부트 3 애플리케이션의 메인 클래스로 사용할 클래스,
두번째 인수는 커맨드 라인의 인수들을 전달한다.
@SpringBootApplication 어노테이션의 구성을 자세히 살펴보자.

스프링 부트 관련 설정을 나타내는 어노테이션이다.
이 어노테이션은 @Component 어노테이션을 가진 클래스들을 찾아서 빈으로 컨테이너에 등록하는 역할을 한다.
그 외에도 밑의 몇가지 어노테이션이 붙으면 빈으로 등록을 한다.
| 어노테이션 | 설명 |
|---|---|
| @Configuration | 설정 파일 등록 |
| @Repository | ORM 매핑 |
| @Controller, RestController | 라우터 |
| @Service | 비즈니스 로직 |
스프링부트에서 자동 구성을 활성화하는 어노테이션이다.
앞서 설명한 스프링 부트가 실행될 때 메타파일(spring.factories)을 읽고 정의된 설정들을 자동으로 구성하는 것이다.
테스트 컨트롤러에서 빈이 어떻게 등록되는지 살펴본다.
package me.tony.springbootdeveloper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello, world!";
}
}
@RestController는 라우터 역할을 하는 어노테이션이다.
/test라는 GET 요청이 오면 test()메소드를 실행한다.
- 라우터: HTTP요청과 메소드를 연결하는 장치
ctrl을 누르고 RestController.java에 들어간다.

코드를 보면 @Controller, @ResponseBody 어노테이션이 같이 있다.
다시 @Controller 어노테이션의 구현파일인 Controller.java로 이동한다.

@Component 어노테이션이 보인다.
이를 통해 @RestController가 빈을 등록되는지 알 수 있다.