스프링부트 웹 컨텐츠 유형

김재훈·2023년 5월 6일
0

SpringBoot

목록 보기
5/6

정적 컨텐츠

정적 컨텐츠란 서버에서 미리 준비된 파일을 클라이언트에게 제공하는 방식이다. 주로 HTML, CSS, JavaScript등과 같은 정적 파일들을 제공하며, 서버는 이러한 파일을 직접 제공하게 된다.

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>

아무 데이터의 변화도 없는 그냥 html 파일이다. 이걸 그냥 웹에 띄우기 위해 localhost:8080뒤에 /hello-static.html을 쳐줬다.

내장된 was로 웹을 띄우는 것을 확인 해 볼수 있다.

MVC

MVC패턴은 사용자 인터페이스를 로직과 분리하여 애플리케이션을 구성하는 방식이다. 모델은 애플리케이션의 상태와 비즈니스 로직을 나타내고, 뷰는 모델의 상태를 보여주는 사용자 인터페이스를 담당하며, 컨트롤러는 모델과 뷰 사이의 연결고리 역할을 한다.

hello-template.html
<html xmlns:th="http://www.thymeleaf.org">

<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

마찬가지로 html파일을 만들어 주었다. 템플릿 엔진인 타임리프를 통해서 동적으로 데이터를 삽입할 수 있게 만들어 주었다.

HelloController.java
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(value = "name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }

여기선 MVC패턴을 이용해서 Controller, View, Model을 분리해서 사용해줬다. View는 사용자가 보는 화면, Model은 View에 띄워줄 동적 데이터, Controller는 Model을 View와 연결시켜주는 통제자라고 생각하면 쉽다.
Model을 Controller의 메소드 안에있는 파라미터에 넣어주고, addAttribute 함수를 통해서 속성의 key를 name으로 설정해줬다. 클라이언트가 localhost:8080/hello-mvc 요청을 보내게 되면 FrontController가 적합한 Controller를 찾는다. 그리고 이 메서드를 찾아들어와서 viewResolver로 데이터 변환 후 hello-template을 반환시켜준다.

그리고 localhost:8080/뒤에 view이름을 넣고, 쿼리스트링 형태로 name값을 MVC를 대입시켜주면 화면에 데이터가 들어온 것을 확인해 볼 수 있다.

API

API는 애플리케이션 간 상호작용을 위한 프로그래밍 인터페이스이다. 주로 JSON이나 XML과 같은 데이터 형식으로 정보를 제공하며, 클라이언트는 이러한 API를 통해 서버와 통신하여 필요한 데이터를 받아온다.

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

API 유형은 따로 html파일 없이 Controller에서 바로 화면에 띄워준다. API 유형에는 String과 객체로 반환해줄 수가 있는데 먼저 문자 반환부터 알아보면 클라이언트가 hello-string으로 요청을 보내면, FrontController가 이 컨트롤러로 들어와서 일치하는 메소드를 찾는다. 그리고 @ResponseBody는 http에 있는 body부에 return하는 데이터를 직접 넣어준다는 뜻이다.

그래서 위처럼 쿼리스트링 형태로 StringAPI를 넣어주면 return에 있는 hello에 name의 value로 StringAPI가 들어가서 helloStringAPI가 화면에 출력되는 형식이다.

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;
        }
    }

다음은 객체로 반환해주는 방식인데, 객체를 먼저 만들어주고 클래스 안에 Hello라는 static class를 만들어준다. 그 다음 getter와 setter를 만들어주고 hello.setName(name);으로 파라미터를 넣어준다. 그리고 hello 객체를 return시켜주면

다음과 같이 JSON 형태로 출력되게 된다. JSON이란 KEY와 VALUE로 이루어진 데이터 방식이다.

먼저 웹브라우저에서 localhost:8080/hello-api를 치면 톰캣 내장서버에서 hello-api를 찾아서 Controller -> 메서드를 찾아서 들어가게 된다. 그 후에 @ResponseBody를 찾고 객체가 return으로 넘어왔기 때문에 JSON 방식으로 데이터를 만들어서 http응답에 반환해준다. viewReolver대신에 HttpMessageConverter 라는 것이 동작하고, 문자면 StringHttpMessageConverter가 동작하고 객체면 MappingJackson2HttpMessageConverter가 동작한다. 우리가 여기서 반환시켜 준 것은 객체이기 때문에 MappingJackson2HttpMessageConverter가 동작하고 웹브라우저에 다시 보내준다.

객체를 JSON으로 바꿔주는 라이브러리가 대표적으로 2가지가 있는데 Jackson과 Gson이다. SpringBoot는 Jackson을 디폴트로 탑재한다.

profile
사랑페페집사

0개의 댓글