서론
1. 정적컨텐츠
ㅡ> 서버에서 하는일x
ㅡ> 파일을 그대로 웹 브라우징
2. MVC와 템플릿 엔진
ㅡ> 서버에서 프로그래밍을 해서 동적으로
ㅡ> 뷰를 찾아가지고 템플릿 엔진을 통해서
어떤 화면을 렌더링해서 HTML을 웹브라우저에 넘겨주는 방법
3. API
JSON 데이터 포맷으로 클라이언트한테 전달
서버끼리 통신할 때... html을 내릴 필요가 없기 때문에...
정적컨텐츠
html
.
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
실행
http://localhost:8080/hello-static.html
동작 그림
스프링이 입력을 받고, 우선 컨트롤러를 찾음 (우선순위)
1. hello-static 관련 컨트롤러 못찾음
2. 리소스에서 hello-static 찾고 반환
MVC와 템플릿 엔진
MVC
= Model View Controller
과거에는 뷰와 컨트롤러 구분x
뷰에 모든게 있었음
ㅡ> 모델1 방식
ㅡ> (P) JSP하나가 수천라인.. 유지보수 어려움
뷰
ㅡ> 뷰는 화면을 그리는것만 집중 하자
ㅡ> (S) MVC 구분 시작
코딩
컨트롤러
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template"; // 뷰호출?
}
}
뷰
<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
타임리프 ㅡ> 페이지에서 소스코드 보기 할수있음(?)
동작 그림
정적일땐 변환안했지만
동적일땐 변환해서 내보냄
(name에 동적으로 string넣음)
API
코딩
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody의 의미
ㅡ> 'http의 바디부에 이 데이터("hello " + name)를 내가 직접 넣어주겠다'
ㅡ> http://localhost:8080/hello-api?name=spring 들어가서, 소스코드 보기 해보면, html하나도 없고 그냥 문자가 그대로 내려가있다.
템플릿 엔진과의차이
ㅡ> 뷰가 없다. 그냥 문자가 그대로 내려간다.
- @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음
- 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
문자말고 데이터를 내놓으라고 할 때
@Controller
public class HelloController {
@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;
}
}
}
문자가 아니라 hello라는 객체 반환 코드
getter/setter
ㅡ> JavaBean 표준 방식
ㅡ> 프로퍼티 접근방식
ㅡ> json방식으로 출력됨 (key:value)
동작 그림
@ResponseBody가 있으면,
veiwResolver에 안던지고,
http응답에 그냥 이 데이터를 넣음
veiwResolver대신, HttpMessageConverter에 던진다.
- 단순문자 ㅡ> stringConverter 동작
- 객체 ㅡ> jsonConverter 동작 ㅡ> json으로 바꿈
(Jackson 라이브러리가 객체를 json으로 바꿔준다)
xml로 받을거야~ 하면
컨버터가 작동해서 변환해줌
'프레임워크 > Spring' 카테고리의 다른 글
[김영한] 스프링 입문(5) - 회원 관리 예 - MVC 개발 (1) | 2024.08.30 |
---|---|
[김영한] 스프링 입문(6) - 스프링 DB 접근 기술 (0) | 2024.08.22 |
[김영한] 스프링 입문(4) - 스프링 빈과 의존관계 (0) | 2024.08.20 |
[김영한] 스프링 입문(3) - 회원 관리 예제 - 백엔드 개발 (0) | 2024.08.05 |
[김영한] 스프링 입문(1) - 프로젝트 환경설정 (1) | 2024.07.29 |