[spring] 스프링 웹개발 기초 (스프링 입문 by 김영한)

su_y2on·2022년 1월 11일
0

Spring

목록 보기
1/30
post-thumbnail

스프링 웹개발 기초 - 동작방식 3가지




1. 정적컨텐츠

/resources/static에 hello-staic.html을 만든뒤 서버를 돌리고 http://localhost:8080/hello-static.html로 접속하면 html에서 구현한 화면이 나옵니다. 컨트롤러에 딱히 아무 코드를 작성해주지 않아도 자동으로 매핑이 되는데 이는 아래와 같이 동작하기 때문입니다.

톰켓서버에서 http://localhost:8080/hello-static.html을 던져줬을 때 해당 컨트롤러가 없다면 static으로가서 이름이 같은 html파일을 찾습니다. 그리고 여기서 발견되면 반환을 해줍니다



2. MVC방식

MVC는 Model, View, Controller를 뜻합니다.
아래와 같이 controller를 작성해주고

   // MVC방식
    @GetMapping("hello") // url mapping
    public String hello(Model model){
        model.addAttribute("data", "hello!!"); // (key , value)
        return "hello"; // template와 매핑
    }

resources/templates에 아래와 같은 html파일을 hello.html로 만들면
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Hello</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>


다음과 같이 동작하게 됩니다 먼저 path를 톰켓서버가 던져주면 path와 매핑되는 컨트롤러를 찾습니다. 그뒤에 model을 만들고 template에 던져줄 값을 (key : value) 형태로 모델에 넣어준 뒤에 template를 리턴하면 resources/templates에서 해당 template를 찾아 model에서 받아온 key(name)를 찾아 값(spring)으로 변환해준 뒤 반환합니다.



3. API방식

API방식은 주로 서버끼리의 통신에서 쓰이고 웹/앱 어플리케이션에서도 쓰입니다.
이는 controller에서 바로 응답을 반환해주는 형태입니다.

3-1 단순 문자열

controller에 아래와 같이 코드를 작성해줍니다. MVC와 다른점은 먼저 @ResponseBody가 붙었다는 점입니다. 이는 응답메세지의 body부에 return 값을 전달하겠다 라는 의미입니다. 또한 model이 없고 return을 template로 하지 않는 점에서도 차이가 있습니다.

여기서 @RequestParam("name")은 name이라는 쿼리를 받아 그 값을 name이라는 변수에 저장하겠다는 뜻이며 MVC에서도 사용할 수 있습니다.

   @GetMapping("hello-string")
    @ResponseBody // 응답 body부에 return값을 전달하겠다 / 문자 ( HttpMessageConverter의 StringConverter가 변환해줌)
    public String helloString(@RequestParam("name") String name){
        return "hello " + name; // "hello 파라미터"
    }

그렇다면 어떻게 반환값을 http 응답 메세지로 변환할 수 있을까요?
바로 HttpMessageConverter가 return 값을 받아 http 메세지로 변환을 해줍니다

지금과 같이 단순 문자열을 반환하는 경우에는 여러 converter중 stirngConverter가 작동하게 됩니다



3-2 객체

이번에는 controller에 아래와 같이 코드를 작성해줍니다

    // 객체
    @GetMapping("hello-api")
    @ResponseBody // 객체면 json으로 데이터 만들어서 전달 ( HttpMessageConverter의 JsonConverter가 변환해줌)
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello(); // 객체생성
        hello.setName(spring); // 이름설정
        return hello; // 객체를 넘김
    }

    // Hello 클래스 만들어주기
    static class Hello{
        private  String name;

        // ctrl + enter -> getter and setter하면 완성
        public String getName() {
            return name;
        }

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

위에서는 단순 문자열을 반환했다면 지금은 hello라는 객체를 반환해주고있습니다. 그리고 이 객체는 Hello 클래스의 정의에서 알 수 있듯이 name이라는 변수를 가지고 있습니다.

지금처럼 객체를 반환하면 HttpMessageConverter에서 JsonConverter가 작동하여 json형식으로 객체의 변수들을 반환해줍니다

전체 동작을 보면 아래와 같습니다

참고

  • 인프런 스프링 인문 by 김영한

0개의 댓글