ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] 스프링 웹 개발 흐름 살펴보기 - 정적, MVC, API
    Back-End/Spring Boot 2022. 9. 26. 18:02

     

    스프링 부트에서 컨트롤러를 통해 화면을 띄우는 방법을 크게 3가지로 나눌 수 있다.

     

    1. 정적 컨텐츠
    2. MVC와 템플릿 엔진
    3. API

     

     


     

    정적 컨텐츠

     

    정적 컨텐츠는 말 그대로 동적인 작업 없이 정적으로 view 페이지에 작성한 내용을 그대로 화면에 출력하는 것이다. 

    resources -> static에 hello-static.html 페이지 작성 후 localhost:8080/hello-static.html url 검색 시 화면이 출력된다.

    <!DOCTYPE HTML>
    <html>
    <head>
     <title>static content</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    정적 컨텐츠 입니다.
    </body>
    </html>

     

     

     

    MVC와 템플릿 엔진

     

    MVC는 Model, View, Controller를 의미한다. 

     

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

     

    컨트롤러에 파라미터 값을 받는 매개변수를 @RequestParam 어노테이션을 통해 설정했다. return 값에는 해당 메서드에서 저장한 값들을 출력할 view name을 적는다.

     

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

     

    @RequestParam(value="name", required = false) String name 은 url에 name이라는 파라미터로 들어온 값을 메서드에서 String name으로 사용하겠다. false는 값이 들어오지 않아도 된다는 의미이다. 따라서 파라미터로 값을 안 넘겼을 때 에러가 나지 않고 null값이 들어간다.

     

     

     

     

    API

     

    API란? Application Programming Interface의 약자로, Application Programming 응용 프로그래밍을 뜻하고 Interface는 서로 다른 두 개의 시스템이 정보를 주고 받도록 이어주는 경계를 뜻한다. 즉) API는 운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 말한다.

     

    이전의 서버는 백엔드에서 데이터를 이용해 완성된 HTML을 브라우저에게 전달해줘, 브라우저는 단순한 뷰어 역할로 쓰였다. 하지만 요즘 서버는 브라우저에서 필요한 데이터만을 전달하는 API 서버의 형태로 변환하고 있다. 즉) 서버는 브라우저에게 완성된 HTML이 아닌, 브라우저에서 요구하는 순수한 데이터를 전해준다. 

     

    @ResponseBody는 일반적인 jsp와 같은 뷰로 전달되는 게 아니라, 데이터 자체를 전달하기 위한 용도임을 알려주는 어노테이션이다. @ResponseBody를 사용하면 HTTP BODY에 문자 내용을 직접 반환한다. 

     

    이때 viewResolver 대신 HTTPMessageConverter가 동작하는데, 반환값에 무엇을 받았냐에 따라 처리하는 방식이 다르다. 만약 문자인 경우 StringHttpMessageConverter, 객체인 경우 MappingJackson2HttpMessageConverter 로 불린다.

     

     

      //문자열 처리
      @GetMapping("hello-string")
        @ResponseBody //HTTP body에 아래 return한 데이터를 직접 넣어주겠다.
        public String helloString(@RequestParam("name") String name){
            return "hello" + name;
        }
    
    //객체 처리
        @GetMapping("hello-api")
        @ResponseBody
        public Hello helloApi(@RequestParam("name") String name ){
            Hello hello = new Hello(); //ctril + shift + enter 누르면 자동 문장 닫기
            hello.setName(name);
            return hello; //객체가 오면 json 방식으로 처리하겠다.
        }
    
        static class Hello {
            private String name;
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
        }

     

     

    < 문자열 처리 >

     

    helloString 메서드에서는 문자열 + 매개변수의 값을 반환한다. @ResponseBody를 사용하면 뷰리졸버를 사용하지 않고 HTTP에 BODY 문자 내용을 그대로 반환한다.

     

     

    < 객체 처리 >

     

    @ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 반환된다. XML이나 JSON으로 반환할 수 있는데 JSON 형식을 많이 사용한다. 

     

     

    API를 이용한 @ResponseBody 사용 원리는 아래와 같다.

     

     


     

    참고로 IntelliJ에서 getter/setter 를 사용하기 위한 단축키는 alr + insert이다.! 

    반응형

    댓글

Designed by Tistory.