Spring 입문

<Spring 입문> 1. View 환경 설정

Isaac01 2025. 4. 15. 11:43
반응형

스프링 프로젝트를 만들면 기본적으로 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: 커맨드라인 인자를 그대로 전달해 준다.

이 한 줄로 내장 톰캣 서버도 실행되고, 스프링이 모든 준비를 마치고 웹 애플리케이션이 실행된다.

 

 

🔁 실행 순서

  1. @SpringBootApplication에 있는 main() 메서드가 가장 먼저 실행됩니다.
  2. 그 안에서 SpringApplication.run(...)이 호출되면서
  3. 스프링 부트가 자동 설정, 빈 등록, 컨트롤러 탐색 (@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(/)**로 접속할 경우 자동으로 응답되는 파일



어떻게 동작할까?

  1. 브라우저가 http://localhost:8080/로 접속함
  2. 스프링 부트는 다음 순서로 확인함:
    • 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";
}

 

 

🔁 흐름 요약