[SpringBoot] 웹 개발 기초
✔️ 웹 개발 방법
- 정적 컨텐츠
: 파일 그대로 웹 브라우저에 내려줌- MVC (Model-View-Controller) 와 템플릿 엔진
: 서버에서 프로그래밍 후 html을 동적으로 내려줌- API
:json
이라는 데이터 포맷으로 클라이언트에 데이터 전달
📌 정적 컨텐츠
- 스프링 부트는
static
폴더에서 정적 컨텐츠를 자동으로 찾아서 제공함
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>
1. localhost:8080/hello-static.html
을 입력하면 내장 Tomcat
서버가 요청을 받음
2. 서버는 hello-static.html
을 스프링에 넘김
3. 스프링은 hello-static
이라는 컨트롤러가 있는지 먼저 찾아봄 (컨트롤러가 우선 순위)
4. 컨트롤러가 없기 때문에 resources :static
안에서 hello-static
을 찾음
5. 찾은 hello-static.html
을 웹 브라우저에 반환
📌 MVC와 템플릿 엔진
MVC
: Model, View, Controller
/ Model - 화면에서 필요한 것들을 담아서 넘겨줌
/ View - 화면 관련
/ Controller - Business logic, 서버 뒷단 관련
Controller
src > main > java > hello > hellospring > controller
- HelloController.java
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
View
resources > templates
- hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
: 이 상태에서 localhost:8080/hello-mvc
를 실행시켜보면
name
이라는 파라미터가 전달된 게 없어서 에러 페이지가 뜸
: name
파라미터를 추가하여 실행하면 제대로 출력됨
1. 웹 브라우저에서 localhost:8080/hello-mvc
를 넘김
2. 내장 Tomcat
서버가 스프링에게 hello-mvc
전달
3. 스프링은 HelloController
에서 hello-mvc
와 매핑되어 있는 메소드를 호출
4. 메소드는 hello-template
를 리턴하고 key=name, value=파라미터인 model
을 넘겨줌
5. viewResolver가 리턴된 것과 같은 것을 templates에서 찾아서 Thymeleaf 엔진에 넘김
📌 API
1. 문자 반환
- HelloController.java
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody
: HTTP 통신 프로토콜의 Body에 데이터를 직접 넣어준다는 의미
/실행하면 템플릿 엔진과 동일한 화면이 출력되지만 소스 코드를 보면 html 없이 입력된 문자만 있음
2. 객체 반환
- HelloController.java
@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;
}
}
객체가 JSON으로 변환됨
Getter and Setter
: Java Bean 규격으로 private로 작성된 name을 외부에서 열지 못하기 때문에getName
,setName
메소드를 public으로 열어서 접근
1. 웹 브라우저에서 localhost:8080/hello-api
를 넘김
2. 내장 Tomcat
서버에서 스프링에게 hello-api
전달
3. 스프링은 helloController
에서 helo-api
를 찾음
4. @ResponseBody
어노테이션이 있기 때문에 HTTP 응답에 데이터를 그대로 넘기도록 동작함
5. viewResolver
대신 HttpMessageConverter
가 동작
6. 문자가 오면 StringConverter
, 객체가 오면 JsonConverter
동작
7. 객체가 오면 기본 디폴트인 JSON 방식으로 데이터를 변환해서 HTTP 응답에 반환
Author And Source
이 문제에 관하여([SpringBoot] 웹 개발 기초), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hrotlzl/SpringBoot-웹-개발-기초저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)