스프링 웹 개발 기초

박민서·2023년 5월 2일
0

웹 개발에는 크게 3가지 방법이 있다.

  1. 정적 컨텐츠: 서버에서 그냥 파일을 내려주는 것
  2. MVC와 템플릿 엔진 : 가장 많이하는 방식 HTML을 그냥 주는것이 아닌 서버에서 프로그래밍 해서 동적으로 내려주는것 MVC(MODEL,VIEW,CONTROLLER)요즘에는 이 패턴으로 개발을 많이 함 정적을 그냥 파일을 그대로 전달해주는 것 MVC와 템플릿엔진은 서버에서 변형을하여 내려주는것
  3. API:제이슨이라는 데이터구조 포맷으로 클라이언트에게 데이터를 전달해주는 것. 서버끼리 통신할 때 씀

정적 컨텐츠

  • 스프링 부트는 기본적으로 정적 컨텐츠를 제공함
  • html 파일을 그대로 웹 브라우저에 전달해 준다
  • static 폴더에 html파일을 만들면 해당 html로 접근
<!DOCTYPE HTML>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

웹 -> localhost:8080/hello-static.html->내장 톰켓 서버가 요청을 받음->spring에게 넘김 -> 컨트롤러에 먼저 hello-static을 찾아봄 컨트롤러가 우선순위를 가짐 -> 없다면 resources/static 에서 해당 html파일을 찾고 응답을 해줌

MVC와 템플릿 엔진

  • 과거에는 View에 모든걸 다 함 요즘에는 Controller(비즈니스 로직과 서버 뒷단에 관련된) 와 View(화면과 관련된 일)를 나눔
  • thymeleaf의 장점은 html을 그대로 쓰고 파일을 서버 없이 바로 열어봐도 껍데기를 볼 수 있다.
  • MVC : Model + view + Controller

hello!empty

"'hello ' + ${name}" 있는 값으로 hello!empty 이 내용이 치환이 됨 서버없이 그냥 html을 만들어서 볼 때 적어놓고 볼 수 있으려고 그런거임.

웹 브라우저 -> localhost:8080/hello-mvc->내장 톰켓 서버를 먼저 거치고 스프링부트에 던짐 -> hellocontroller에서 메서드를 호출해줌 -> return : viewName리턴 hello-template, model(name:spring) -> viewResolve return으로 받은 값과 똑같은 애를 찾아서 thymeleaf 템플릿 엔진한테 처리해달라고 함 -> 템플릿엔진이 렌더링을 해서 변환후 웹 브라우저에게 넘겨줌 지금까지 한거는 변환하지 않았었음

API

  • XML 방식은 무거운데 JSON방식은 심플함
  • html 파일이 아니라 json이라는 데이터 포맷으로 서버나 클라이언트에게 데이터 전달
  • 요즘은 json 방식이 default로 설정되있음
@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;
 }
 }
}
  • @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님 -> 객체를 반환한다는 것

웹 브라우저 -> localhost:8080/hello-api -> 내장 톰켓서버가 스프링부트에 던짐 -> 스프링은 컨트롤러에 hello-api가 있는걸 암 @ResponseBody라는 어노테이션이 안붙어있으면 템플릿 view리절버에 던짐 근데 있으면 http 응답에 그대로 이 데이터를 넘겨야겠다 인지함 근데 문자가 아니라 객체임 스프링 입장에서 한 번 생각해야됨 객체가 오면 기본 디폴트가 json 방식으로 데이터를 만들어서 http에 응답하겠다. -> HttpMessageConverter라는 애가 동작을 함 return값이 그냥 문자면 StringConverter라는 애가 동작을 함 return이 객체이면 JsonConverter라는 애가 객체를 json스타일로 바꿈 바꾼거를 나를 요청한 서버나 클라이언트에게 보내줌

  • 기본 객체처리: MappingJackson2HttpMessageConverter : 객체를 json으로 바꿔주는 라이브러리
profile
ㅎㅇㅌ

0개의 댓글