강의 기록/스프링 입문(김영한)

[스프링 입문] Section 2.스프링 웹 개발 기초

momong'-' 2021. 3. 16. 14:06

Section 2

  • 정적 컨텐츠
  • MVC와 템플릿 엔진
  • API

정적컨텐츠 (spring-Static Content)

서버에서 하는 거 없이 파일을 웹브라우저에 내려주는 컨텐츠

 

기본적으로 리소스는 /**에 매핑

spring.mvc.static-path-patten 속성으로 조정 가능

// 모든 리소스를 /resorces/**
spring.mvc.static-path-pattern=/resources/**

resources/static/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>


MVC와 템플릿 엔진

MVC: Model, View, Controller

템플릿 엔진(jsp, php 등)

서버에서 변경을해서 동적으로 바꿔주는 컨텐츠

 

model 1: view에서 모든걸 다하고 View와 Controller가 분리되어있지 않은 형식( 예전 방식)

model 2: MVC 사용

 

View는 보여지기만 하는 화면으로 사용하는 것이 좋음

 

resources/templates/hello-template.html

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

${}안의 값은 model에서 꺼내 값을 치환해서 웹브라우저에서 띄운다.

timeleaf의 장점. 정보가 없이 주소창에 파일 위치를 입력해서 열었을 경우 hello! empty만 띄움

 

hello.hellospring.controller/HelloController.java

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

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


API

보통 서버끼리 통신할 때 사용

hello.hellospring.controller/HelloController.java

@Controller
public class HelloController {

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
	
	@GetMapping("hello-string")
	@ResponseBody
	// http body부에 이 데이터를 직접 넣어주겟다.
	public String helloString(@RequestParam("name") String name) {
		return "hello " + name; // "hello spring" 문자 리턴
	}
    
	static class Hello {
		private String name;

		public String getName() {
			return name;
 		}

		public void setName(String name) {
			this.name = name;
		}
	}	
}

xml: 복잡.무거움

json: 심플. 형식으로 반환. 현재는 거의 json 방식으로 통일

 

 

getter setter:  접근자 프로퍼티. getter(획득자), setter(설정자)

getter,setter 단축키(Ctrl + Shift + S + R)

private는 밖에서 꺼낼 수 없음. getter로 꺼낼 수 있게 만들어줌 (프로퍼티 접근 방식)

 

@ResponseBody 를 사용

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter 가 동작 (StringBoot 기능)
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter
    (잭슨과 구글의 gson도 있지만 Spring은 jackson 사용)
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
    => {name: spring}

정리

정적 컨텐츠 MVC와 템플릿 엔진 API
파일을 그대로 고객한테 전달 서버에서 변형해서 html을 바꿔 제공 json 등 데이터 포맷으로 클라이언트에 전달하여 객체를 반환