[인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술2
2. 스프링 웹 개발 기초
2.1 정적 컨텐츠
-
서버에서 하는 일 없이 파일을 그대로 웹 브라우저로 내려주는 것
-
스프링 부트 정적 컨텐츠 기능
-
정적 컨텐츠 코드 작성
-
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>
-
실행
-
결과
-
정적 컨텐츠 이미지
2.2 MVC와 템플릿 엔진
-
JSP, PHP와 같이 html을 서버에서 프로그래밍해서 html을 동적으로 바꿔서 내리는 것
-
controller, model, template 엔진 화면 => MVC
-
차이점: 정적 컨텐츠는 파일을 그대로 사용자에게 전달해주는 것이고, MVC와 템플릿 엔진는 서버에서 파일을 변형해서 내려주는 방식
-
MVC: Model, View, Controller
- View: 화면을 그리는데 집중
- Controller: 비지니스 로직과 같은 내부적인 일을 처리하는데 집중
- Model: Controller에서 화면에 필요한 것 들을 담아서 View 쪽으로 넘겨줌
-
MVC 코드 작성
- java/hello.hellospring/controller/HelloController.java
@GetMapping("hello-mvc")
public String helloMyc(@RequestParam(value = "name") String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
- resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
<--"hello! empty"는 서버없이 그냥 html 파일을 볼 때를 대비해서 적어 넣은 것-->
</body>
</html>
-
MVC, 템플릿 엔진 이미지
2.3 API
-
JSON이라는 데이터 구조 포맷으로 사용자에게 데이터를 전달하는 방식
-
정적 컨텐츠를 제외하면 html 방식으로 내릴지 API 방식으로 데이터를 바로 내릴지 2가지 방식이 있음
-
API 코드 작성1(@ResponseBody 문자 반환)
- java/hello.hellospring/controller/HelloController.java
- @ResponseBody를 사용하면 뷰 리졸버(View Resolver)를 사용하지 않음
- 대신 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
@GetMapping("hello-string")
@ResponseBody
public String helloSpring(@RequestParam("name") String name){
return "hello " + name;
}
-
API 코드 작성2(@ResponseBody 객체 반환)
- java/hello.hellospring/controller/HelloController.java
- @ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨
@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;
}
}
-
@ResponseBody 사용원리
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신 HttpMessageConverter가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
서버에서 하는 일 없이 파일을 그대로 웹 브라우저로 내려주는 것
스프링 부트 정적 컨텐츠 기능
정적 컨텐츠 코드 작성
-
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>
-
실행
-
결과
정적 컨텐츠 이미지
JSP, PHP와 같이 html을 서버에서 프로그래밍해서 html을 동적으로 바꿔서 내리는 것
controller, model, template 엔진 화면 => MVC
차이점: 정적 컨텐츠는 파일을 그대로 사용자에게 전달해주는 것이고, MVC와 템플릿 엔진는 서버에서 파일을 변형해서 내려주는 방식
MVC: Model, View, Controller
- View: 화면을 그리는데 집중
- Controller: 비지니스 로직과 같은 내부적인 일을 처리하는데 집중
- Model: Controller에서 화면에 필요한 것 들을 담아서 View 쪽으로 넘겨줌
MVC 코드 작성
- java/hello.hellospring/controller/HelloController.java
@GetMapping("hello-mvc")
public String helloMyc(@RequestParam(value = "name") String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
- resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
<--"hello! empty"는 서버없이 그냥 html 파일을 볼 때를 대비해서 적어 넣은 것-->
</body>
</html>
MVC, 템플릿 엔진 이미지
JSON이라는 데이터 구조 포맷으로 사용자에게 데이터를 전달하는 방식
정적 컨텐츠를 제외하면 html 방식으로 내릴지 API 방식으로 데이터를 바로 내릴지 2가지 방식이 있음
API 코드 작성1(@ResponseBody 문자 반환)
- java/hello.hellospring/controller/HelloController.java
- @ResponseBody를 사용하면 뷰 리졸버(View Resolver)를 사용하지 않음
- 대신 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
@GetMapping("hello-string")
@ResponseBody
public String helloSpring(@RequestParam("name") String name){
return "hello " + name;
}
API 코드 작성2(@ResponseBody 객체 반환)
- java/hello.hellospring/controller/HelloController.java
- @ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨
@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;
}
}
@ResponseBody 사용원리
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신 HttpMessageConverter가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
[참고]
클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.
참고문헌
[인프런] 김영한 강사님, 「스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술」
Author And Source
이 문제에 관하여([인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rhddbwls5843/인프런스프링-입문-코드로-배우는-스프링-부트-웹-MVC-DB-접근-기술2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)