개발자 미니민의 개발스터디

[김영한 스프링 강의] 스프링 웹 개발 기초

by mini_min

 

섹션 2. 스프링 웹 개발 기초


 

- 정적 컨텐츠
서버에서 하는 것 없이 파일을 웹 브라우저에 내려준 것 
- MVC와 템플릿 엔진 (가장 흔함)
예시 : JSP와 PHP
동적으로 바꿔서 내리는 것
- API
보통 JSON 데이터 구조 포맷으로 클라이언트에게 전달하는 방식



[정적 컨텐츠]
스프링 부트는 기본 설정으로 정적 컨텐츠를 제공한다.

[정적 컨텐츠 이미지]
웹 브라우저에서 hello-static 요청을 받음 -> spring 컨트롤러쪽에서 hello-static 관련 컨트롤러를 찾음 -> resources 에서 찾음 -> 있으면 반환 



[MVC와 템플릿 엔진]
모델, 뷰, 컨트롤러의 약자

뷰는 화면을 그리는 것에 모든 역량을 집중한다.
컨트롤러나 모델은 비즈니스 로직, 내부적인 처리에 집중해야한다. 

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



[MVC, 템플릿 엔진 이미지]
웹 브라우저가 요청을 받음 -> 내장 톰캣 서버 거침 -> 스프링 컨테이너는 컨트롤러의 메소드 호출해줌 -> 컨트롤러가 주는 return 값을 viewResolver 가 return 값과 똑같은 템플릿에 파라미터를 넣고 반환해준다. 



[API]

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

 


**ResponseBody 가 중요!
= http 에서 Body 부분에 데이터를 직접 넣겠다는 뜻이다. 

그대로 데이터를 내려준다. 
(뷰 같은거 거치지 않는다)

아래는 JSON 으로 넘기는 방식 

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



[ResponseBody 동작원리]
웹 브라우저가 요청 받음 -> 내장 톰캣 서버를 거침 -> 스프링 컨테이너에서 컨트롤러의 메소드를 찾아서 실행 -> @ResponseBody 가 객체를 넘기면 HttpMessageConverter 가 동작한다. 
단순 문자면 StringConverter, 이름과 값이 있으면 JsonConverter 가 동작한다. -> 반환 

1. ViewResolver 대신 HttpMessageConverter 가 동작한다.
2. 기본 문자 객체는 StringHttpMessageConverter
3. 기본 객체 처리는 MappingJackson2HttpMessageConverter
4. 기타 여러 처리는 HttpMessageConverter 가 기본

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기