1. 정적 컨텐츠
- 정의
- 서버에서 하는 것 없이 파일을 그대로 웹브라우저에 내려주는 것 - 정적 컨텐츠 동작
- resource/static/fileName.html에 파일을 넣어두고, 포트번호/fileName.html을 검색하면 해당 html이 동작
- [ 동작 순서 ]
1) 웹 브라우저에서 localhost:포트번호/fileName.html 검색하면, 내장 톰켓 서버가 요청받음
2) 내장 톰캣 서버가 해당 html를 스프링에 넘기면, 컨트롤러에서 fileName이 존재하는지 확인
3) fileName에 해당하는 컨트롤러가 없다면, resource/static/fileName.html을 찾아 해당 html 반환
# src/main/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.1 MVC와 템플릿 엔진
- 정의
- 템플릿 엔진은 서버에서 파일을 프로그래밍해서 동적으로 변형하여 내려주는 것, 그것을 MVC패턴으로 표현 - MVC
- Model : 화면에 필요한 것을 담아 화면에 넘겨주는 일을 처리
- View : 화면에 관련된 일을 처리
- Controller : 비즈니스 로직, 서버와 관련된 일을 처리 - thymeleaf 템플릿 엔진
- 장점: 서버없이 파일을 열어도 파일 확인 가능 - [ 템블릿 엔진 동작순서 ]
1) 웹 브라우저에서 localhost:포트번호/hello-mvc 를 스프링에 넘기면,
내장 톰켓 서버가 스프링 컨테이터에 해당 정보를 넘김
2) 스프링은 helloController의 메소드에 매핑이 되어있는 것을 확인 후 호출
3) return 값과 모델에 name이라는 키와 해당하는 값을 스프링에게 넘겨,
뷰 리졸버(view resolver)가 return값에 해당하는 파일을 찾아 thymeleaf 템플릿 엔진에게 넘김
4) 템플릿엔진의 랜더링을 통해 변환한 html를 웹브라우저에 넘김
# Controller
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
// 기본값으로 required가 true로 되어있어, 필수적으로 name값을 주지 않으면 오류발생
model.addAttribute("name", name);
return "hello-template";
}
# resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org"><!--thymeleaf 템플릿 엔진-->
<body>
<p th:text="'hello ' + ${name}">hello! empty</p> <!--템플릿 엔진으로서 동작하면, text의 값으로 내용이 치환됨-->
<!--모델의 키 값이 name인 것의 값을 꺼내 치환해줌 -->
</body>
</html>
2.2. API
- 정의
- JSON 등의 데이터 구조 포맷으로 클라이언트에게 데이터 전달하는 방법
- 서버끼리 통신할 때 사용 → HTML를 보여줄 필요 없이 데이터 전달
- 뷰, 리액트에 쓸 때 데이터 내려주는 방식으로 사용 - @ResponseBody 동작 원리
1) localhost:8080/hello-api을 넘기면, 톰캣 내장 서버에서 스프링 컨테이너에 정보 넘김
2) controller에서 찾고 @ResponseBody가 있으면, http의 body부분에 데이터 직접 반환
3) (viewResolver 대신에) HttpMessageConverter 동작
3-1) return 문자 반환 => StringConverter 동작 → 문자 그대로 http 응답에 데이터 반환
3-2) return 객체 반환 => JsonConverter 동작 → json 방식으로 데이터를 만들어서 htt의 응답에 데이터 반환
※ JSON
: "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는
개방형 표준 포맷
※ HttpMessageConverter
- 기본 문자처리 : StringConverter → StringHttpMessageConverter
- 기본 객체처리 : JsonConverter → MappingJackson2HttpMessageConverter
- byte 처리 등등 여러 converter가 기본으로 등록
※ Jackson : 객체를 json으로 바꾸는 라이브러리
# controller
/* @ResponseBody 문자 반환 */
@GetMapping("hello-string")
@ResponseBody // http의 body부분에 데이터를 직접 넣어 주겠다. name이 요청한 템플릿에 그대로 내려감
public String helloString(@RequestParam("name") String name){
return "hello " + name;
}
# controller
/* @ResponseBody 객체 반환 */
@GetMapping("hello-api")
@ResponseBody // http의 body부분에 json 형태로 변환하여 데이터 반환
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;
}
}
[ 출처 ]
'Spring > 개념' 카테고리의 다른 글
[스프링입문] CH05. 회원 관리 예제 - 웹MVC 개발 (0) | 2021.08.10 |
---|---|
[스프링입문] CH04. 스프링 빈과 의존관계 (0) | 2021.08.10 |
[스프링입문] CH03. 회원 관리 예제 - 백엔드 개발 (0) | 2021.08.09 |
[스프링입문] CH00. JDK 설치 및 프로젝트 생성 (0) | 2021.07.08 |
[스프링입문] CH01. 프로젝트 환경설정 (0) | 2021.06.26 |
댓글