스프링 웹 개발 기초

2022. 7. 26. 11:122022/Spring

정적 컨텐츠

서버에서 하는것 없이 파일 그대로 웹브라우저에 그대로 뿌려주는 것

 

src/main/resources/static 에서 정적 콘텐츠를 제공

위와 같이 html에서 작성한 그대로 화면으로 뿌려준다.

  1. localhost:8080/hello-static.html을 들어가게되면, 내장 톰캣 서버에서 요청을 먼저 받게 된다.
  2. 첫번째로 Controller 단에서 먼저 hello-static 컨트롤러가 있는지 확인한다.
  3. 없는 경우에는 resources 폴더에서 찾게된다.

 

MVC와 템플릿 엔진

가장 흔하게 사용하는 방식으로 JSP 같은게 템플릿 엔진이 된다.

서버에서 프로그래밍을 해서 html을 동적으로 바꿔서 내리는 방식으로 이를 하기 위해서 MVC 사용

 

MVC = Model + View + Controller

이전에는 View에서 Controller의 역할까지 한번에 하였다.

 

하지만 이제는 비즈니스 로직을 처리하거나, 내부적인 것을 처리하고 화면단에서 필요한 것을 담아서 넘겨주는 것을  Controller와 Model이 역할을 맡고 View는 화면을 그리는데 집중한다.

 

HelloController.java

1. hello-mvc가 들어오게 되면 해당 메소드에 먼저 매핑이 된다.(GetMapping)

url을 통해 받은 name 값은 Controller에서 String name으로 들어오게되고, 이는 Model에 담겨서 hello-templates을 찾는다.

hello-templates.html

2. view의 역할을 하는 "hello-templates.html"을 .../resource/templates 폴더 아래에 만들어 준다. Controller을 통해 넘어온 동일한 html 파일을 찾아 렌더링하게 된다. 이때 p태그에서는 받는 값은 서버를 타고 돌면서  Model을 통해 받아온 name 값을  화면단에 뿌리게 된다. 

(viewResolver : view를 찾아주고, template 엔진 (Thymeleaf 템플릿 엔진을 찾아줌))

 

API

json 포맷으로 클라이언트에게 데이터를 전달하는 방식 (view, react 등) 또는 서버끼리 통신 할 때

예시1

@ResponseBody는 http에서 body부에 데이터("hello" + name)데이터를 집접 넣어주겠다는 의미 즉 view가 따로 없고 데이터가 바로 클라이언트에게 보여진다.

예시1

 

여기서 조금 더 들어가보면, JSON 형태로 데이터를 뽑아주는 것을 API라고 하는데 아래와 같다.

 

예시2

위의 예시와 달리 이번에는 문자 데이터 그대로가 아닌 객체를 반환하게 된다.

이렇게 객체를 반환하게 되면  url에서 입력받은 값을 value로 하여 Json 형태로 아래와 같이 표출된다.

 

 

@ResponseBody가 없는 경우에는 viewResolver에 바로 넘겼던 것과 달리 http 응답에 데이터를 그대로 넣어버리도록 동작 -> 문자인 경우에는 응답을 바로 했지만, 객체인 경우에 Json방식으로 데이터를 만들어서 http 응답에 반환하는 것이 디폴트!

 

즉, @ResponseBody를 사용하는 경우, Http body에 문자내용을 직접 반환하게 된다. 

이런 경우에 viewResolver 대신 HttpMessageConverter가 동작하게 되고, 

문자의 경우에 StringHttpMessageConverter, 객체의 경우에 MappingJackson2HttpMessageConverter가 동작하게 됨

 

byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어있다.