일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Servlet
- http
- Thymeleaf
- JDBC
- 스프링 핵심 기능
- 스프링
- 인프런
- 자바
- springdatajpa
- db
- jpa
- 백준
- pointcut
- kotlin
- Spring Boot
- Proxy
- 스프링 핵심 원리
- transaction
- AOP
- Exception
- QueryDSL
- Greedy
- 김영한
- JPQL
- java
- spring
- Android
- 그리디
- SpringBoot
- 알고리즘
- Today
- Total
개발자되기 프로젝트
스프링 웹 개발 기초 본문
1. 정적 컨텐츠 : 파일을 그냥 그대로 내려준다!
- 스프링 부트는 정적 컨테츠 지원
해당 내용을 보면 static하위의 폴더의 html파일로부터 기본적으로 static content를 제공한다.
static 폴더 내에 다음과 같이 임의의 htllo-static.html을 작성해보자.
<!DOCUTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다
</body>
</html>
그리고 localhost:8080/hello-static.html으로 접속해보자.
작성한 그대로 잘 보여준다.
2. MVC와 템플릿 엔진 : 렌더링이 된 html을 내려준다!
1) MVC란? Model, View, Controller
- view는 화면을 그리는데 모든 역량을 집중
- controller, model은 business로직이나 내부적인 것을 처리해야함.
- 이전에는 view에서 모든 것을 처리했음...
- 요즘에는 분리해서 구성하는게 기본임.
2)@Controller
@GetMapping("/hello-mvc")
public String helloMvc(@RequestParam String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
3) hello-template.html
<!DOCUTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text = "'hello ' + ${name}">hello! empty</p>
</body>
</html>
4) 결과
실제 출력된 페이지의 소스코드를 보면 내가 작성한 것과 다르다!
viewResolver에 의해 html이 변환이 된 것이다. static의 경우 변환이 되지 않는다! 그대로 전달되기 때문!
<!DOCUTYPE HTML>
<html>
<body>
<p>hellospring</p>
</body>
</html>
작동 순서 : 웹 브라우저 --> localhost:8080/hello-mvc --> 내장 톰캣 서버 --> 스프링 컨테이너 -->helloController
-->return : hello-template -->viewResolver --> Thymeleaf 템플릿 엔진 처리 --> HTML변환 -->브라우저
3. API : Json 형태로 Http Body에 data 전달
1) Controller
@ReponseBody의 의미는 HTTP Body에 Data를 직접 넣어주겠다는 의미
@GetMapping("/hello-string")
@ResponseBody //http의 body에 data를 직접 넣어주겠다.
public String helloString(@RequestParam String name){
return "hello" + name;
다음과 같의 임의로 실행해 보자.
해당 페이지의 소스코드를 보면?! 진짜 return한 값만 있다. html 코드도 없다.
String말고 객체를 return해 보자.
@GetMapping("/hello-api")
@ResponseBody
public Hello helloApi(@RequestParam String name){
Hello hello = new Hello();
hello.setName(name);
return hello;
}
@Data
static class Hello{
private String name;
}
}
이전과 다른 형태로 return이 되었다. 요것이 json방식이다.
쉽게말해 JSON은 KEY, VALUE로 이루어진 DATA 구조이다.
Spring에서는 @ResponsBody annotation을 붙이면 기본적으로 JSON형식으로 return한다!
작동방식 : 웹 브라우저 --> localhost:8080/hello-api --> 톰캣 --> 스프링 컨테이너 --> helloController
--> @ResonseBody, return: hello 객체 --> HttpMessageConverter --> JsonType, {name:hihihi!!}
2) 정리! @ReponseBody사용하면
- HTTP Body에 직접 반환
- ViewResolver대신에 HttpMessageConverter가 동작
문자인 경우 : StringConverter
객체인 경우 : MappingJackson2HttpMessageConverter
기타 등등 여러 MessageConverter가 등록되어 있음.
'Spring Boot' 카테고리의 다른 글
회원 도메인, Repository 만들기 (0) | 2021.07.22 |
---|---|
비즈니스 요구 사항 정리 (0) | 2021.07.22 |
view 환경설정 (0) | 2021.07.21 |
Rest Template (0) | 2021.07.01 |
Bean & Ioc & Application Context (0) | 2021.06.16 |