[SpringBoot] 웹 개발 기초

15851 단어 SpringbootSpringboot

✔️ 웹 개발 방법

  • 정적 컨텐츠
    : 파일 그대로 웹 브라우저에 내려줌
  • 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 응답에 반환

좋은 웹페이지 즐겨찾기