✏️ 웹브라우저에 url을 입력했을 때, 스프링 부트 동작 및 환경

< 1 >

@Controller 
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!"); //hello.html에서 {data}부분에 hello!!들어감
        return "hello";
    }

1. 웹브라우저에 localhost:8080/hello url을 입력한다.

2. 스프링부트는 '톰캣'이라는 웹서버를 내장하는데, 이 서버에서 url을 받아 스프링컨테이너에 보낸다.

3. 스프링컨테이너는 url의 hello와 @GetMapping("hello")를 보고 매핑하여 해당 메서드(hello)를 실행한다.

4. 스프링이 model을 만들어서 매개변수 부분에 넣어준다.

5. 그 model에 addAttribute. (key는 data 값은 "hello!!")

6. return "hello" : hello.html을 찾아서 위에 실행한 것들을 렌더링한다. (viewResolver가 hello 화면을 찾아서 처리해줌)


< 2 >

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

💡 @ResponseBody : http의 header, body 중 body 부분에 직접 내용을 넣어서 전달하게 해줌.

1. localhost:8080/hello-string?name=spring url 입력

2. 이 메서드 부분은 html없이 hello spring 그대로 출력된다. (페이지 소스보기 해도 html없이 hello spring 뜸)


< 3 >

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

💡 url 입력하면 json( {키:값}) 형태로 확인해볼수있다.

1. url 입력받는다.

2. 컨테이너에서 hello-api 찾는다.

3. 찾았는데 메서드에 @ResponseBody가 있다.

4. <2>번 예시에서(helloString) return이 문자면 문자 그대로 http에 던짐.

helloApi에서는 객체를 반환한다. (return hello)

5. 객체가 오면 기본적으로 json 방식으로 데이터를 만들어서 http응답에 반환하는것이 기본 정책. 따라서 json방식으로 응답한다.

* 기존에 @ResponseBody가 없을때는(<1>번예시) viewResolver가 동작하지만 @ResponseBody가 존재하면 HttpMessageConverter가 동작된다. 

6. 단순 문자라면?  StringConverter : StringHttpMessageConverter 동작

객체라면? JsonConverter : MappingJackson2HttpMessageConverter 동작

(💡 jackson이란 객체를 json으로 바꿔주는 라이브러리. 스프링은 jackson을 기본으로 탑재한다.)

해당 Converter에 의해서 객체가 json으로 변환된다.

 

+ Recent posts