Spring

[스프링입문] 웹 개발 기초(정적 컨텐츠, MVC, 템플릿 엔진, API)

선돌이 2021. 3. 2. 03:55
728x90
  • 정적 컨텐츠

- 서버에서 별 다른 변환 없이 파일을 웹 브라우저에 그대로 내려주는 것

=>무조건 그대로 반환, 프로그래밍을 할 수 없음

 

-hello-static.html가 有

<!DOCTYPE HTML>
<html>
<head>
 <title>static content</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

=>웹에서 입력을 받으면 톰켓 내장 서버를 거친 후 스프링 컨트롤러에서 먼저 hello-static이 있는지 찾아봄 (컨트롤러가 우선!)

=>없다? 스프링 부트 내부에서 hello-static을 찾음

=>스프링 부트 내부에서 찾았으면 별도의 변환 없이 그냥 반환!

 

 

  • mvc와 템플릿 엔진

-MVC = model, view, controller

서버에서 변형시켜서 웹에 내려주는 방식 (<->정적 컨텐츠)

-view는 화면을 그리는 역할

-model과 controller는 내부적인 걸 처리하는 역할

 

-Controller

@Controller
public class HelloController {
 @GetMapping("hello-mvc")
 public String helloMvc(@RequestParam("name") String name, Model model) {
 model.addAttribute("name", name);
 return "hello-template";
 }
}

-Controller에서 name을 seonho로 입력 받으면, name = seonho로 바뀌어 모델에 담김

-viewResolver가 hello-template.html에 매핑 되어 화면을 찾아 처리

(스프링 부트 템플릿 엔진 기본 viewname 매핑 => 컨트롤러에서 리턴을 문자로 하면 {문자}.html과 매핑)

 

-hello-template.html

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

-model에서 값을 꺼내는 문자 $를 사용 

-순서 : 

1. hello-mvc가 웹에서 입력

2. 내장 톰켓 서버를 먼저 거쳐서 스프링 컨트롤러에 들어옴 

3. hello-controller와 매핑되어 있으므로 viewResolver가 동작

(화면과 관련되어 있다면 대부분 viewResolver가 해결! view를 찾아서 template engine과 연결함)

-viewReslover에서 template engine에 처리를 요청하면 랜더링하여 변환 후 반환

(<->정적 컨텐츠는 변환하지 않고 그냥 반환)

-controller -> model -> view 순!

 

 

  • API

 

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

+)@RespnseBody에 대하여

=>http의 body부에 반환값을 직접 넣어주겠다는 의미!

=>template engine은 view를 가지고 html을 조작

=>API는 그냥 반환된 데이터 그대로를 바로 넣음

 

-문자가 아닌 데이터, 객체를 반환할 때 API 사용이 빛을 발함

=>객체가 반환되면 JSON 형태의 데이터로 변환 되어 http에 전달

 

+)JSON?

{key : value}로 이루어진 구조, 최근엔 디폴트로 json을 사용하는 추세

 

if) @ResponseBody 가 x?

=>viewResolver로...

else) o?

=>HttpMessageConverter로...

=>객체가 반환된다면 JSON 형식으로 데이터를 만들어 http에 반환

 

+)getter/setter처럼 private 멤버변수에 접근하기 위해서 만들어진 함수를 "자바빈 규약"이라고 함.~~

 

 

-인프런 김영한님의 스프링 입문을 듣고 작성한 글입니다 

728x90