본문 바로가기
웹 개발/Back End

스프링 입문 - 스프링 웹 개발 기초

by L3m0n S0ju 2021. 12. 31.

 

 

1. 정적 컨텐츠    ->    그냥 html 파일 출력

2. MVC와 템플릿 엔진    ->    model 객체에 데이터를 담아서 html에 전송 후 출력

3. API    ->    json 파일 형태, 예를 들어 서버끼리 통신할 때 주로 사용

 

 

 

 

 

1. 정적 컨텐츠

https://github.com/Lemon-soju/springboot-newbie-project/commit/621f5c5f39287dc0ea751833b4e044e92dfc11d0

 

Merge pull request #3 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@621f5c5

static content

github.com

 

 

위 코드와 같이 hello-static.html에 직접 접속하는 고전 방식

 

 

 

 

 

 

 

 

 


2. MVC와 템플릿 엔진

 

MVC는 Model + View + Controller의 줄임말로 Controller에서 Model 객체를 통해 html을 불러오고 html에서 {name}과 같이 동적으로 서버에서 받은 데이터를 출력할 수 있는 View가 있다. 아래와 같이 hello-mvc에 접속하면 스프링에서는 viewResolver를 통해 View를 보여준다.

 

 

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>

 

 

 

 

실행: 127.0.0.1:8080/hello-mvc?name=lemon_soju

 

 

git 주소 -> 

https://github.com/Lemon-soju/springboot-newbie-project/commit/d0aed7b48f2dc25af85cd486ff9c275f5a7462a3

 

Merge pull request #4 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@d0aed7b

spring mvc and template engine

github.com

 

 

 

 


API

 

API 방식은 위 두 방식과 다르게 html을 반환하는 것이 아니라 문자 자체를 반환한다. 예를 들어 아래와 같이 name에 변수에 데이터를 저장하고 반환하는데 웹 페이지에서 페이지 소스 보기를 해도 html이 아닌 문자만 입력되어 있다. @ResponseBody를 앞에 붙이면 스프링에서는 템플릿 엔진과는 달리 html 페이지가 아닌 문자나 객체를 직접 반환한다. 스프링은 viewResolver가 아닌 HttpMessageConverter를 통해 문자나 객체를 반환한다.

 

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
    return "hello " + name;
}

 

 

 

 

 

 

 

보편적으로 사람들이 많이 사용하는 API의 핵심 기능은 다음과 같다. 아래 코드와 같이 Hello 객체에 name을 설정하고 Hello 객체를 반환하면 Json 타입으로 반환된다.

 

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
    Hello hello = new Hello(); // Ctrl + Shift + Enter 누르면 자동 완성
    hello.setName(name);
    return hello;
}
static class Hello{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

 

 

 

 

 

https://github.com/Lemon-soju/springboot-newbie-project/commit/a0575f4267c416fb78a72a1c7629484273f955f8

 

Merge pull request #5 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@a0575f4

api

github.com

 

 

댓글