Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

스프링 웹 개발 기초 본문

Spring Boot

스프링 웹 개발 기초

Seung__ 2021. 7. 21. 23:37

1. 정적 컨텐츠 : 파일을 그냥 그대로 내려준다!


 - 스프링 부트는 정적 컨테츠 지원

 

Spring Boot Features

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

해당 내용을 보면 static하위의 폴더의 html파일로부터 기본적으로 static content를 제공한다.

 

static 폴더 내에 다음과 같이 임의의 htllo-static.html을 작성해보자.

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

그리고 localhost:8080/hello-static.html으로 접속해보자.

작성한 그대로 잘 보여준다.

 

 

2. MVC와 템플릿 엔진 : 렌더링이 된  html을 내려준다!


 1) MVC란? Model, View, Controller

  - view는 화면을 그리는데 모든 역량을 집중

  - controller, model은 business로직이나 내부적인 것을 처리해야함.

  - 이전에는 view에서 모든 것을 처리했음...

  - 요즘에는 분리해서 구성하는게 기본임.

 

 2)@Controller

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

 

3) hello-template.html

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

4) 결과

 

실제 출력된 페이지의 소스코드를 보면 내가 작성한 것과 다르다!

 

viewResolver에 의해 html이 변환이 된 것이다. static의 경우 변환이 되지 않는다! 그대로 전달되기 때문!

<!DOCUTYPE HTML>
<html>
<body>
<p>hellospring</p>
</body>
</html>

작동 순서 : 웹 브라우저 --> localhost:8080/hello-mvc --> 내장 톰캣 서버 --> 스프링 컨테이너 -->helloController

-->return : hello-template -->viewResolver --> Thymeleaf 템플릿 엔진 처리 --> HTML변환 -->브라우저

 

 

 

3. API : Json 형태로 Http Body에 data 전달


1) Controller

@ReponseBody의 의미는 HTTP Body에 Data를 직접 넣어주겠다는 의미

@GetMapping("/hello-string")
@ResponseBody //http의 body에 data를 직접 넣어주겠다.
public String helloString(@RequestParam String name){
return "hello" + name;

다음과 같의 임의로 실행해 보자.

해당 페이지의 소스코드를 보면?! 진짜 return한 값만 있다. html 코드도 없다.

 

 

String말고 객체를 return해 보자.

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

    @Data
    static class Hello{
        private String name;

    }
}

이전과 다른 형태로 return이 되었다. 요것이 json방식이다.

소스코드

 

쉽게말해 JSON은 KEY, VALUE로 이루어진 DATA 구조이다.

 

Spring에서는 @ResponsBody annotation을 붙이면 기본적으로 JSON형식으로 return한다!

 

작동방식 : 웹 브라우저 --> localhost:8080/hello-api --> 톰캣 --> 스프링 컨테이너 --> helloController

--> @ResonseBody, return: hello 객체 --> HttpMessageConverter --> JsonType, {name:hihihi!!}

 

 

2) 정리! @ReponseBody사용하면

   -  HTTP Body에 직접 반환
   -  ViewResolver대신에 HttpMessageConverter가 동작

      문자인 경우 : StringConverter

      객체인 경우 : MappingJackson2HttpMessageConverter

      기타 등등 여러 MessageConverter가 등록되어 있음.

 

'Spring Boot' 카테고리의 다른 글

회원 도메인, Repository 만들기  (0) 2021.07.22
비즈니스 요구 사항 정리  (0) 2021.07.22
view 환경설정  (0) 2021.07.21
Rest Template  (0) 2021.07.01
Bean & Ioc & Application Context  (0) 2021.06.16
Comments