스프링 웹 개발 기초
- 정적컨텐츠 : 파일을 웹브라우저에 그대로 내려주는 것
- MVC와 템플릿 엔진 : 예를 들어 과거의 JSP같은 것.. (이런게 소위 말하는 템플릿 엔진. HTML을 동적으로 바꿔 내림)
[정적컨텐츠와의 차이 ]
- 정적컨텐츠: 파일을 그대로 고객에게 보여줌
- MVC와 템플릿 엔진 : 서버에서 HTML을 조금 바꿔서 내려주는 방식 - API : JSON형식으로 클라이언트에게 데이터를 전해줌 서버끼리 통신할때 --> API방식 많이 씀
1) 정적컨텐츠
: 스프링부트는 기본적으로 정적컨텐츠를 제공한다.
resources -> static 폴더에 hello-static.html 파일 생성
html 코드 입력후 실행.
주소창에 localhost:8080 + 파일명 그대로 입력하면 내가 작성한 대로 글씨가 뜬다.
--->원하는 파일을 그대로 넣으면 정적컨텐츠가 그대로 화면에 출력됨!
정적컨텐츠의 원리
1. 웹브라우저에 주소를 친다. (localhost:8080/hello-static.html)
2. 내장 톰켓서버가 요청을 받음
3. 스프링에게 요청을 보냄
4. 컨트롤러쪽에서 먼저 hello-static 관련 파일을 찾아본다.
5. 컨트롤러에 이와 관련된 파일이 없으면 resources안에 있는 hello-static.html을 찾는다
6. 파일을 발견하면 웹브라우저로 hello-static을 반환해준다.
2) MVC와 템플릿 엔진
-MVC : Model, View, Controller
필요한건 컨트롤러에서 처리하고 모델에 담아서 뷰에 보냄?
관심사를 분리해야한다!
- Mode, Controllerl : 비지니스 로직과 관련, 내부적인걸 처리할때!
- View: 화면을 그리는데에 모든 역량을 집중!
Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
View
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
그냥 주소창에 치면 에러가 뜬다.
에러내용: "name"값이 없다. name값을 넣어라
여기선 required 기본값이 true이기 때문에 무조건 값을 넘겨야한다.
어떻게 넘기느냐?
이렇게 get방식으로 주소창에 직접! ?name=~~~라고 친다.
그러면 그대로 나옴.
1.name이 spring이 됨.
2. spring이란 name이 model에 담겨
3. hello-template으로 리턴됨.
템플릿파일에서 ${name}값이 spring으로 ..
모델에서 값을 꺼냄! 모델안의 spring이란 네임값을 꺼냄.
MVC/템플릿엔진의 원리
1.웹브라우저에서 localhost:8080/hello-mvc를 넘긴다.
2.스프링부트에서 내장톰켓서버를 먼저 거친다.
3.내장 톰켓서버는 받은 mvc를 스프링에게 던진다.
4.스프링은 컨트롤러에 매핑되어있는 메소드를 매칭해줌.
5.스프링이 viewResolver가 동작 (템플릿엔진 처리)
6. 뷰리졸버가 템플릿츠에 헬로-템플릿을 찾아서 템플릿 엔진에게 처리하라고 넘기면
7.템플릿 엔진에 변환한 html을 웹 브라우저에 넘긴다.
3)API
주소창에 "http://localhost:8080/hello-string?name=spring!!!" 검색
페이지 소스에 html코드 하나 없이 데이터가 그대로 나옴.
주소창에 "http://localhost:8080/hello-api?name=spring!!!" 검색
{"name" : "spring!!!"} --> json형식으로 출력됨
{ key : value }
html은 태그를 열고 닫고 해야하는데 json은 { key : value } 로 간단하다.
그래서 요즘은 json방식을 많이 선호한다.
@ResponseBody 를 사용원리
: 문자열이라면 그대로 넘기겠지만 객체가 오면 기본 디폴트가 제이슨방식으로 데이터를 만들어서 반환한다.
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter (Jackson이라는 라이브러리로 Json형식으로 바꾼다)
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
[정리]
- 정적컨텐츠: 그냥 파일을 그대로 내려준다.
- MVC와 템플릿 엔진 : 템플릿 엔진을 모델 뷰 컨트롤러 방식으로 쪼개서 뷰를 템플릿 엔진으로 렌더링한 후 렌더링 된 html을 고객에게 전달
- API: 뷰 없이 제이슨 형식으로 객체반환
'spring' 카테고리의 다른 글
6. 스프링 DB접근 기술2 (0) | 2021.07.27 |
---|---|
5. 회원 관리 예제 - 웹 MVC 개발 (0) | 2021.07.24 |
4. 회원관리 예제 - 백엔드 개발 (0) | 2021.07.22 |
2. 빌드하고 실행하기 (Window환경에서) (0) | 2021.07.21 |