✍ 스프링 2일차 : 스프링 웹 개발 기초
웹 개발 기초에 세가지가 있음.
📍 MVC : Model , View , Controller
사용자에게 보여지는 화면의 모든 일들을 View , 서버와 서비스등의 기능적인 부분은 Controller 에서 처리함
Controller를 통해 가공된 테이터들을 Model에 담아 변환된 htmel을 넘겨주는데 이런 일련의 과정을 MVC 라고함!
💻 java file
@GetMapping("hello-mvc")
public String hellMvc(@RequestParam("name") String name, Model model) {
// RequestParam 외부에서부터 데이터 값을 받아올때사용
// required 속성은 기본 true = 반드시 값을 받아와야함
// false경우 값을 받아오지 않아두됨!
model.addAttribute("name", name);
return "hello-template";
// 요청한 것 온 것에 맞는 view를 찾아서 던져줌 : 템플릿엔진
}
<!-- thymeleaf 템플릿 엔진 쓰기위함 필수 붙여넣기 -->
<html xmlns:th="http://www.thymeleaf.org/" >
thymeleaf 템플릿 엔진의 장점 중 하나가, 서버가 없어도 html의 파일을 열어서 껍데기는 볼수있음!
@GetMapping("hello-string")
@ResponseBody // 반드시 ResponseBody를 붙여줘야함 , 문자반환
// ResponseBody은 Http의 body부에 직접 넣겠다는 것임
public String helloString(@RequestParam("name") String name) {
return "hello" + name; // ?name=spring 하면 ->"hello spring" 출력됨
// 요청한 클라이언트에 그대로 내려감!
// 템플릿 엔진과의 차이는 view이런것이 없음! 이 문자 그대로 내려감 끝!
// 소스 보기 해서 확인해보기! 그런데 이렇게 사용경우는 별로 없음!!!XXX
}
@ResponseBody을 사용하면 view를 통하지 않고 HTTP의 body에 문자의 내용을 직접 반환해서 보여줌
💻 java file
@GetMapping("hello-api")
@ResponseBody // HTTP에 데이터를 그대로 넘김 , 그런데 객체로 넘기니!
// 디폴트로 json방식으로 데이터를 만들어서 반환해줌!
// HttpMessageConverter 동작 - json/ string 중 선택해서 반환
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello(); // 객체 생성
hello.setName(name); // 객체 저장
return hello; // 객체를 반환
// 기본은 제이슨 방식임!
}
static class Hello { // static 여기의 전체흐름과 상관없는 별개의 클래스임
private String name; // 필드 , 멤버 변수
public String getName() { // java.bin , propertie 접근 방식
return name;
}
public void setName(String name) {
this.name = name;
}
}
view가 아닌 HttpMessageConverter가 동작하기때문에
문자처리는 String Converter 가, 객체처리는 MappingJackson2HttpMessageConverter 동작함!
(Jackson2은 json 객체 만들어주는 라이브러리로 스프링에 탑재되어있음)
✍ 요약하자면 ,
1. 정적 컨텐츠는 있는 그대로의 웹페이지를 보여주는 것!
2. 템플릿 엔진은 view라는 화면을가지고 조작하는 방식!
3. API는 받은 데이터를 어떠한 html의 변화를 거치지않고 그대로 내려주는 방식!