본문 바로가기
3.1 SpringBoot/SpringBoot 강의정리

1-2. 스프링 웹 개발 기초

by Dohi._. 2023. 5. 13.
728x90

목차

1. 정적 컨텐츠
2. MVC와 템플릿 엔진
3. API

 

 

1. 정적 컨텐츠

Spring Boot -정적 컨텐츠

정적 컨텐츠는 웹 페이지에서 동적으로 생성되지 않고,
미리 만들어진 HTML, CSS, JavaScript 파일 등으로 이루어진 정적인 파일들을 말합니다.
이러한 파일들은 서버에서 클라이언트에 직접 전송되며,
클라이언트 측에서는 웹 페이지를 불러올 때 이 파일들을 받아와 렌더링하게 됩니다.

(서버에서 뭐하는것이 없이 웹브라우저로 바로 내려주는거 라고 이해하면 편할듯하다.)

 

스프링 부트에서 정적컨텐츠 요약
정적.html -> 내장 톰켓 서버 요청받음 -> 스프링에게 넘김 -> 컨테이너에서 관련 컨트롤러가 없네..?

-> 그럼 resources : static/정적.html을 찾음 -> 출력

 


2.  MVC와 템플릿 엔진

 

MVC : Model, View, Controller  각자의 역할에 집중할 수 있도록 하기위함.

Controller를 조작하면 Controller는 Model을 통해 가져온 데이터 바탕으로 View를 통해 시각적으로 사용자에게 전달

 

@Controller

@Controller
public class HelloController {
 @GetMapping("hello-mvc")
 public String helloMvc(@RequestParam("name") String name, Model model) {
 model.addAttribute("name", name); //키값 name을 넣으면 name을 변수로 보내는 식
 return "hello-template";
 }
}

 

@Controller
   뷰에 표시될 데이터가 있는 Model 객체를 만들고 올바른 뷰를 선택하는 일을 담당합니다.
   @ResponseBody를 사용하여 HTTP Response Body에 데이터를 담아 요청을 완료할 수 있습니다.

@RequestParam 
   컨트롤러의 메소드 매개변수에 지정하면,
   Spring은 해당 매개변수의 이름과 일치하는 요청 매개변수를 찾아서 값을 할당합니다.

@GetMapping
   Spring Framework에서 제공하는 애노테이션 중 하나로, HTTP GET 요청을 처리하는 메소드

 

 

view : 화면을 그리는데 역량을 집중하는 것 

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

변수 : ${키값} 를 받는다!

 

 

실행

http://localhost:8080/hello-mvc?name=spring

 

간단정리

hello-mvc.html -> 내장 톰켓 서버  -> 스프링에서 Controller에 매핑(Mapping)이 있어! 확인후 호출

 ->return: hello-template model(name:spring)줌 
 ->viewResolver이 templates/hello-template에 있는 return의 string 되어있는 값과 똑같은 걸 찾아서 Thymeleaf 처리요구

 ->Thymeleaf  엔진 처리를 하고 변환후  html를 출력

 

스프링 부트에서 템플릿 엔진 요약

 

thymeleaf 공식사이트


3. API  

서버에서 뷰 리볼버(viewResolver)를 사용하지않고 그냥 그대로 입력

@ResponseBody를 사용

요즘엔 객체반환인경우 JSON을 내려주는 방식

문자반환인경우는 문자그대로 출력

과거에는 xml을 많이 사용했지만 무거워서 사용하지않고
최근에는 JSON 방식을 기본값으로 통일되었다.

 

@ResponseBody 예시

@Controller
public class HelloController {
//문자반환
 @GetMapping("hello-string")
 @ResponseBody
 public String helloString(@RequestParam("name") String name) {
 return "hello " + name;
 }
 
 //객체반환
 @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;
 }
 }

 
}

+) 자바 GETTER SETTER (윈도우 Alt + Inser t)
(프로 퍼티 접근방식)

 

@ResponseBody 사용

  • 문자 반환을 할경우 HTTP의 BODY에 문자 내용을 직접 반환
  • 객체를 반환하면 객체가 JSON으로 변환됨
  • viewResolver 대신에 HttpMessageConverter 가 동작
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

@ResponseBody 실행 및 사용원리

http://localhost:8080/hello-string?name=spring

http://localhost:8080/hello-api?name=spring


내장 톰켓 서버에서 API를 확인 컨테이너에서 @ResponseBody 가 붙어있으면 
그대로 데이터를 넘겨야 겠구나라고 인식 
문자/객체를 넘기면서 httpMessageConverter 동작
단순 문자면 stringConverter가 작동
객체면 jsonConverter가 작동하여

값 그대로 웹 브라우저로 보내게 된다.

참고 :클라이언트의 HTTP Accept해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합하여 
선택된다.
728x90

댓글