일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Xcode
- 데이터베이스
- 스프링
- 42seoul
- swift
- 스프링부트 웹 소켓
- CD
- 아이패드다이어리
- 리눅스
- AI
- libasm
- 프로그래밍언어론
- 오블완
- MySQL
- 티스토리챌린지
- DBMS
- sql
- IOS
- 다이어리
- CI
- 네트워크
- springboot
- 오라클
- javascript
- Spring
- jenkins
- JPA
- 소켓
- 스프링부트
- 인공지능
- Today
- Total
Hi yoahn 개발블로그
[Spring] #2 스프링 웹 개발 기초 본문
1. 정적 컨텐츠
- 파일을 웹브라우저에 그냥 그대로 전달
- 스프링 부트 -> 정적 컨텐츠 기능 자동으로 제공
기본 설정으로 SpringBoot는 /static 폴더에서 정적 컨텐츠를 찾아 제공
- static 폴더 안에 정적 컨텐츠 넣은 후, localhost:8080/hello-static.html 로 접근 가능
(url/{파일명})
1. 웹 브라우저에서 localhost:8080/hello-static.html 요청
2. 내장 톰캣 서버가 요청 받음 -> Spring 한테 넘김
3. 관련된 컨트롤러가 있는지 확인
4. 없으면 내부 resources/static/hello-static.html 찾아서 반환
2. MVC 와 템플릿 엔진
템플릿 엔진: html을 서버에서 프로그래밍해서 동적으로 바꿔서 줌
MVC: model-view-controller
model, controller : 비즈니스 로직, 내부 처리에 집중
view : 보여지는 것에 집중
HelloController.java
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {...}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name); //key : value
return "hello-template";
}
}
@RequestParam("name") String name
- 외부에서 파라미터 받을 때 사용
- 외부에서 이름을 url 파라미터로 바꿈
Model model
- model에 담아서 넘겨줌 -> View 에서 렌더링할 때 사용
hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
템플릿 엔진 -> html 을 동적으로 바꿔줌
-> 이 상태에서 localhost:8080/hello-mvc 로 접근하면 Warn
> 파라미터를 넘겨주지 않아서! <
1. @RequestParam(value = "name", required = false) 로 바꾸거나
2. localhost:8080/hello-mvc?name=spring!!! 로 url 접근
- 컨트롤러에 name 이 spring!!! 값으로 전달됨
1. url 요청
2. 톰캣 서버 -> 스프링으로 전달
3. 컨트롤러 확인 -> 호출 : return: hello-template, model(name:spring)
4. viewResolver -> templates/hello-template.html 찾아서 템플릿 엔진한테 처리하라고 넘김
뷰를 찾아주고 템플릿 엔진 연결
5. 엔진이 렌더링 해서 변환 후 웹브라우저에 반환
3. API
json 이라는 데이터 구조 포맷으로 데이터를 클라이언트에 전달
HelloController.java
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {...}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {...}
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody
- HTTP 프로토콜 = 헤더 + 바디
- HTTP 바디부분에 return (data) 를 직접 넣어 주겠다는 의미 (문자 내용을 직접 반환)
- @ResponseBody를 사용하면 viewResolver를 사용하지 않음
http://localhost:8080/hello-string?name=spring
-> hello spring 만 쓰여있는 화면 출력
@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;
}
}
}
http://localhost:8080/hello-api?name=spring 접근
```
{"name":"spring"}
```
@ResponseBody를 사용하고 + 객체를 반환하면 객체가 JSON으로 반환됨
Ctrl + enter || Command + N
Getter & Setter
= 자바 빈 표준 방식 = 프로퍼티 접근 방식
@ResponseBody 가 있는 경우
-> HTTP 바디에 이 데이터(return)를 그대로 넘김 (ViewResolver 대신 HttpMessageConverter 가 동작 (StringHttpMessageConverter: 문자 처리, MappingJackson2HttpMessageConverter: 객체 처리))
-> 데이터가 객체인 경우
- default: JSON 방식으로 만들어서 반환
ref. inflearn 스프링 입문
'Framework & Library > springboot' 카테고리의 다른 글
[Spring] #4 스프링 빈과 의존관계 (스프링 빈 등록 방법) (0) | 2021.01.22 |
---|---|
[Spring] #3 회원관리 예제 - 백엔드 개발 (0) | 2021.01.21 |
[Spring] #1 spring 시작하기 (0) | 2021.01.20 |
#4 [SpringBoot] 머스테치로 화면 구성하기 (0) | 2020.09.11 |
#3 [Spring Boot] JPA로 데이터베이스 다루기 (0) | 2020.09.08 |