<Spring 입문> 1. View 환경 설정
스프링 프로젝트를 만들면 기본적으로 HelloSpringApplication 파일이 다음과 같이 구성되어 있을 것이다.
아래 코드는 Spring Boot 애플리케이션을 시작하는 가장 기본적인 형태의 코드이다.

import 는 다른 클래스나 기능을 불러오는 문장이다.
자바에서 Scanner 라는 기능을 사용하기 위해 import java.util.Scanner; 임폴트를 추가하는 것처럼 다음 문장도 같다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication 과 SpringApplication.run() 메소드를 사용하기 위해 import를 추가한 것이다.
@SpringBootApplication
이 어노테이션은 스프링 부트 애플리케이션의 시작점임을 나타냅니다.
또한, 다음의 3가지 핵심 어노테이션의 조합으로 구성되어 있습니다:
1. @Configuration
- 해당 클래스를 스프링 설정 클래스로 지정합니다.
- 개발자가 직접 @Bean 등을 사용해 빈을 등록할 수 있습니다.
2. @EnableAutoConfiguration
- 스프링 부트의 자동 설정 기능을 활성화합니다.
- 클래스패스에 존재하는 라이브러리 정보를 바탕으로,
예를 들어 웹 관련 라이브러리가 존재하면
Tomcat 서버, Spring MVC 등이 자동으로 설정됩니다.
3. @ComponentScan
- 현재 클래스가 위치한 패키지를 기준으로
그 하위 패키지를 스캔합니다. - @Component, @Service, @Repository, @Controller 등이
선언된 클래스를 찾아 빈으로 등록합니다.
즉, 이 한 줄 덕분에 개발자가 따로 설정하지 않아도 대부분의 기능이 자동으로 설정된다!
SpringApplication.run(HelloSpringApplication.class, args);
- 스프링 부트 애플리케이션을 실행시키는 코드이다.
- HelloSpringApplication.class: 이 클래스가 애플리케이션의 설정 정보라는 걸 알려준다.
- args: 커맨드라인 인자를 그대로 전달해 준다.
이 한 줄로 내장 톰캣 서버도 실행되고, 스프링이 모든 준비를 마치고 웹 애플리케이션이 실행된다.
🔁 실행 순서
- @SpringBootApplication에 있는 main() 메서드가 가장 먼저 실행됩니다.
- 그 안에서 SpringApplication.run(...)이 호출되면서
- 스프링 부트가 자동 설정, 빈 등록, 컨트롤러 탐색 (@Controller) 등의 작업을 진행해요.
1. Welcome Page와 thymeleaf 템플릿 엔진 동작 이해하기
src > main > resources 경로로 들어가면 static, templates 폴더가 존재한다.

2. Welcome Page
static 경로에 위치한 파일 중 index.html 만 특별히 "Welcome Page"로 취급된다.
Welcome Page는 정적콘텐츠의 특별한 경우는 말하는데, 정적콘텐츠와 차이점은 다음장에서 설명할 것이다.

- 특별한 이름: index.html
- 특별한 위치: static/index.html 또는 public/index.html 등
- 사용자가 **루트 URL(/)**로 접속할 경우 자동으로 응답되는 파일

어떻게 동작할까?
- 브라우저가 http://localhost:8080/로 접속함
- 스프링 부트는 다음 순서로 확인함:
- static/index.html 있는지?
- 있으면 → 그걸 Welcome Page로 서빙함
- 없으면 → 컨트롤러 매핑을 찾거나, 404 페이지
3. templates 템플릿 엔진
SpringApplication.run(...)이 실행되면서 스프링 부트가 시작되고 자동 설정(AutoConfiguration)으로
웹 서버 내장 톰켓(Tomcat)도 함께 실행된다. 그리고 컴포넌트 스캔을 통해 @Controller 작업을 찾아 실행한다.
@Controller, @RestController
이 클래스가 HTTP 요청을 처리하는 웹 컨트롤러임을 명시.
이 클래스 안에 있는 요청 처리 메서드를 (@GetMapping, @PostMapping, @RequestMapping)을
DispatcherServlet이 자동으로 탐지해서 연결해 준다.
DispatcherServlet
DispatcherServlet은 Spring MVC에서 모든 웹 요청을 받아서 처리 흐름을 조정하는 중앙 컨트롤러이다.
Spring Boot에서는 자동 등록돼 있다. 순수 Spring MVC에서는 web.xml같은 설정 파일에서 직접 등록해야 한다.
@Controller, @RestController 차이점
@Controller는 HTML 등의 뷰를 반환하고, @RestController는 JSON, XML등의 데이터를 반환한다.

클라이언트가 보낸 HTTP GET 요청을 보내면 스프링의 DispatcherServlet이 그 요청을 받아서
@GetMapping("/hello")와 매핑된 메서드를 실행한다.
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
}
return "hello" 는 resources > templates > hello.html 경로의 뷰 파일을 의미하고 스프링 부트는
내부적으로 Thymeleaf 뷰 리졸버(view resolver)를 통해 이 파일을 찾아 렌더링 한다.
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
${data}는 키값이고 ${data}는 model.addAttribute("data", "hello!!")에서 넣은 "hello!!"로 치환된다.
Model이란?
Model은 스프링이 제공하는 인터페이스로,
컨트롤러 메서드에서 뷰로 데이터를 전달하는 매개체(객체)이다.
return되면 ViewResolver를 통해 hello.html파일을 찾고
Template Engine(예: Thymeleaf)이 실행돼서 ${data} 자리에 "hello!!" 넣은 HTML 생성한다.
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
🔁 흐름 요약
