스프링 웹 개발 기초 - 웹을 개발하는 3가지 방법

Dev.Dana·2021년 4월 8일
0

Spring

목록 보기
2/5
post-thumbnail

웹을 개발하는 세가지 방법

  • 정적 컨텐츠
    • 서버에서 하는것 없이 파일을 그대로 웹 브라우저에 내려주는 것
  • MVC와 템플릿 엔진
    • 가장 많이 하는 방식
    • JSP, PHP - 소위 말하는 템플릿 엔진 : HTML을 서버에서 데이터를 가져와 동적으로 바꿔서 만드는 것
    • Model, View, Controller ⇒ MVC
    • 서버에서 HTML을 좀 변형을 해서 웹 브라우저에 내려주는 방식
  • API
    • 요즘에는 JSON이라는 데이터 포맷으로 클라이언트한테 데이터를 전송해준다.
    • Vue.js, React.js를 사용할 때
    • 서버끼리 통신할 때 API방식을 사용한다.

정적 컨텐츠

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>

정적 컨텐츠

  • 웹 브라우저에서 요청하면 hello-static 관련 컨트롤러가 있는지 먼저 찾는다. (컨트롤러가 있는지 먼저 찾는것이 우선 동작)
  • 하지만 없으니, 그냥 html파일을 그대로~ 브라우저로 내보냄.

MVC와 템플릿 엔진

Controller

@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/template/hello-template.html

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

실행

http://localhost:8080/hello-mvc?name=spring

→ 나는 8090

MVC, 템플릿 엔진

  • 웹브라우저에서 get방식으로 name=spring이라고 요청하면 controller가 hello-template를 반환한다. viewResolver가 동적으로 html을 변환시키고 다시 웹 브라우저에 띄워준다.

API

꿀팁 단축키 : intelliJ에서 Ctrl + Shift + Enter ⇒ 자동완성...!

단축키 : Alt + Insert ⇒ getter + setter 생성

@ResponseBody 문자 반환

@Controller
public class HelloController { @GetMapping("hello-string")
 @ResponseBody
 public String helloString(@RequestParam("name") String name) {
 return "hello " + name;
 }
}
  • @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음
  • 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

@ResponseBody 객체 반환

@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 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨

@ResponseBody 사용원리

  • @ResponseBody 를 사용
    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신에 HttpMessageConverter 가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.

json?

  • key : value로 이루어진 구조

  • XML과 충돌하다가.. 최근에는 거의 json방식으로 통일이 되었다.

    → 프로젝트하면 json을 사용하세요~ 옛 legacy프로젝트만 xml씀

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글