스프링 입문 - MVC와 템플릿 엔진, API

hyuk·2023년 10월 2일
0
post-thumbnail

📌 정적 컨텐츠 방식

정적 컨텐츠는 정적인 상태의 파일 그대로 웹 서버가 웹브라우저로 응답을 주는 것으로, 어떠한 프로그래밍없이 파일 그대로 반환한다는 점이다.

웹 브라우저에서 내장 톰켓 서버에 hello-static.html 요청 시, 스프링 컨테이너에서 맵핑된 컨트롤러를 우선적으로 탐색한다.

탐색된 결과가 없으면 내부에 있는 resources/static 에서 탐색 후, 해당 결과값을 반환하는 환경이다.


📌 MVC와 템플릿 엔진 방식

여기서 말하는 MVC는 Model, View, Controller의 약자로, 요즘 많이 사용되고 있는 개발 방식이다.

웹 브라우저에서 내장되어있는 톰켓 서버를 거쳐, 맵핑되어 있는 메소드를 호출한다. 호출된 메서드의 반환되는 값을 따라 viewResolver 동작한다.

이 때, viewResolver는 템플릿 엔진이 렌더링을 해서 변환을 한 HTML을 웹브라우저에 반환하도록 요청하게 된다

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body></html>

템플릿 엔진을 사용할 경우, hello! empty 의 부분이 'hello ' + ${name}으로 치환


📌 API 방식

보통 API 방식을 사용하게 되면 @ResponseBody 어노테이션을 사용하며, 크게 문자 반환하는 경우와 객체를 반환하는 경우가 있다.

@ResponseBody 문자 반환

@Controller
public class HelloController {

	@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
    	return "hello " + name;
    }
}

HTTP의 Body에 문자 내용을 직접 반환한다.

@ResponseBody를 사용하면 ViewResolver를 사용하지 않는다.

@ResponseBody 객체 반환


@Controller
public class HelloController {

	@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
    	Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
    
    public class Hello {
    	String name;
        
        public String getName() {
        	return name;
        }
        public void setName(String name) {
        	this.name = name;
        }
       
    }
}

API 방식에서 객체는 JSON 형식으로 반환하게 된다.
전에는 XML 방식으로 사용되었지만, 현재는 키/값의 쌍으로 구성되어 있는 JSON 형식으로 쓰인다.

또한, Getter/Setter의 메소드를 생성된 것을 'JavaBean 규약'이라 한다.

Java Bean 규약에 성립요건
    - 1) 패키지화
    - 2) 기본생성자 존재
    - 3) 멤버변수의 접근자 Private
    - 4) getter/setter 메소드

또한, 프로퍼티 접근 방식이라 부르기도 한다.

API 방식의 동작 환경을 살펴보면 ViewResolver를 사용하지 않는다는 점이다.

ViewResolver 대신 HttpMessageConverter가 동작한다.

  • 기본 문자처리의 경우 → StringConverter
  • 기본 객체처리의 경우 → JsonConverter

📌 본 포스트는 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 통해 학습한 내용을 요약 및 정리한 것입니다.

profile
차곡차곡쌓아가는학습노트

0개의 댓글