[Thymeleaf] Return 값에 대해

cheonbi·2025년 4월 17일
0

Java

목록 보기
2/2
@Controller
public class FuckController {
    @GetMapping("/fuck")
    public String HolyShit(Model model) {
        model.addAttribute("data", "i hate you");
        return "hello"; //match to resource/template/{templateName}
    }
}

Thymeleaf에서 Return값은 resource/template 에 있는 HTML 파일명이 된다.
이유는 무엇일까?

View Resolver

Spring MVC가 기본적으로 뷰 리졸버(View Resolver) 설정을 통해 템플릿 파일을 찾기 때문

  1. Spring MVC에서는 Model을 사용하여 컨트롤러에서 데이터를 전달
  2. 뷰 리졸버는 그 데이터를 적절한 HTML 파일에 렌더링하여 반환

구체적인 흐름

1. 컨트롤러:

  • @GetMapping("/fuck") 요청을 처리하는 메서드에서 "hello"를 반환
  • 이 값은 ViewResolver에 의해 템플릿 파일명을 나타냄

2. ViewResolver :

  • Spring에서는 기본적으로 InternalResourceViewResolver를 사용하여 src/main/resources/templates 폴더 아래에 있는 템플릿 파일을 찾음

  • 예를 들어, hello가 반환되면, ViewResolver는 이 이름에 해당하는 파일 src/main/resources/templates/hello.html을 찾아서 렌더링

3. Thymeleaf 템플릿 엔진 :

  • hello.html 파일을 찾고, 이 파일을 렌더링하는 과정에서 model.addAttribute("data", "i hate you")를 사용해 전달된 데이터를 템플릿에 바인딩하여 사용자에게 반환

Spring에서의 주요 View Resolver 종류

InternalResourceViewResolver

  • JSP 파일을 처리할 때 사용
  • prefix와 suffix를 설정하여 JSP 파일을 찾음
  • 예를 들어, prefix="/WEB-INF/views/"와 suffix=".jsp"를 설정하면, 논리적 뷰 이름 home은 실제 파일 /WEB-INF/views/home.jsp로 변환
@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

ThymeleafViewResolver

  • Thymeleaf 템플릿 엔진을 사용할 때 사용
  • prefix와 suffix를 설정하여 .html 파일을 찾음
@Bean
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver resolver = new ThymeleafViewResolver();
    resolver.setPrefix("/WEB-INF/templates/");
    resolver.setSuffix(".html");
    return resolver;
}

FreeMarkerViewResolver

  • FreeMarker 템플릿 엔진을 사용할 때 사용
  • prefix와 suffix를 설정하여 .ftl 파일을 찾음
@Bean
public FreeMarkerViewResolver viewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setPrefix("/WEB-INF/freemarker/");
    resolver.setSuffix(".ftl");
    return resolver;
}

View Resolver의 동작 순서

  1. 클라이언트 요청: 클라이언트가 URL을 통해 서버에 요청을 보냄
  2. 컨트롤러 호출: 요청을 처리하는 컨트롤러가 호출되고, 그 안에서 뷰 이름을 반환
  3. View Resolver: 반환된 뷰 이름을 실제 템플릿 파일로 변환
  4. 렌더링: 템플릿 엔진이 뷰 파일을 렌더링하고, 모델 데이터를 바인딩하여 최종 HTML을 생성
  5. 응답 반환: 생성된 HTML을 클라이언트에게 반환하여 페이지를 표시
profile
༼ つ ◕_◕ ༽つ

0개의 댓글