| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 오류
- 순환문
- 깃허브 블로그
- 환경설정
- jsp
- 파워서플라이
- 공부
- for문
- ORA-01407
- 무결성 제약조건
- Ajax
- 이클립스
- Oracle
- 오류모음
- MSI
- 오라클
- spring
- 설정
- 이클립스단축기
- ORA-02292
- 티스토리 블로그
- 별 찍기
- 인터페이스
- 스프링
- 전화번호부
- 백준문제
- 자바
- while
- 백준
- 백준문제풀이
- Today
- Total
danDevlog
[Spring Boot] 정적 컨텐츠 / MVC와 템플릿 엔진 / API 본문
정적 컨텐츠는 서버에서 무언가 작업하는거 없이 바로 웹 브라우저로 띄어준다.

동작 방식
웹 브라우저 -> hello.html요청 -> 톰캣서버 요청 접수 후 스프링에게 넘김 -> 스프링은 hello라는 컨트롤러를 찾음 -> 관련 컨트롤러가 없으면 resources/static/hello.html이라는 정적 콘텐츠를 찾아서 웹 브라우저에게 반환
Model1 에서는 JSP가 모든 model, contorller, view 의 역할을 수행해서 파일 하나에 상당한 코드가 있었다.
Model2 에서부터 Model, Controller, View가 따로 나누어져서 역할을 수행한다.
Model은 data 정보들의 가공 / View는 사용자게에 보여지는 부분 / Controller는 모델과 뷰 사이를 이어주는 다리 역할
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
웹브라우저에서 localhost:8080/hello-mvc 를 요청하면 내부 Tomcat서버가 이를 스프링에게 알려준다.
그러면 관련된 Controller에서 GetMapping으로 적혀진 내용과 일치하면 매핑된 해당 메소드를 실행한다.
@RequestParam으로 매개변수를 입력받는다. 해당 어노테이션을 사용하면 반드시 웹브라우저 주소창에서 매개변수를 넘겨주어야 한다.
브라우저에서 localhost:8080/hello-mvc?name=spring 을 입력하면 name 부분에 spring이 들어간다.
modek에서 name:spring 이라는 데이터를 꺼내어 hello-template과 함께 return 한다.
그 후 ViewResolver가 hello-template이라는 이름의 view가 있는지 찾고 찾았으면 view에 템플릿 엔진 처리를 완료한 후, 웹 브라우저에 전달한다.
-Html을 내리냐 / API로 내리냐
정적 컨텐츠를 제외하면 스프링의 동작 방식에는,
mvc 패턴으로 html을 내려주는 방식 / API를 사용하는 방식(html X) 의 두 가지 방법이 있다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name; // "hello spring"
}
@ResponseBody 어노테이션은 http통신 프로토콜의 body부에 데이터를 직접 넣어주겠다라는 뜻이다.

name=string으로 했기때문에 return값이 hello string이 된것이다.


해당 페이지에서 페이지 소스보기를 하면 html태그같은것이 전혀 없이 hello string 만 나오게된다.
즉, api 방식을 사용하면 return시에 view(html)가 필요없이 정말 데이터 그대로 반환된다.
단순 문자열이 아닌 데이터를 반환할 때는 어떨까
@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;
}
}
Hello라는 객체를 만들고 이름을 정하고 이를 반환한다.

객체를 반환하면, 다음과 같이 JSON 형태인 key와 value 형태로 반환이 된다.
- viewResolver 대신에 HttpMessageConverter가 동작
- HTTP의 BODY에 문자 내용을 직접 반환 (HTML BODY TAG를 말하는 것이 아니다)
웹브라우저 http://localhost:8080/hello-api를 요청 -> 톰캣 내장서버가 스프링에게 알려줌 ->
@ResponseBodt 어노테이션을 통해서 HttpMessageConverter가 해당 데이터를 자료형에 맞게 변환하여 http body에 붙여 응답
-정리-
정적컨텐츠 : 파일을 그대로 바로 내려준다.
MVC와 템플릿 엔진 : 템플릿 엔진을 Model View Controller 방식으로 쪼개서 View를 렌더링해줘서 클라이언트에게 전달해준다.
API : 객체 반환. / HttpMessageConverter를 통해서 JSON방식으로 변경해서 반환을 해줌 View같은거 없이 바로 httpResponse에 넣어서 반환해줌
'Spring 입문' 카테고리의 다른 글
| [Spring Boot] 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2022.03.26 |
|---|---|
| [Spring Boot] 회원 관리 예제 - 서비스 개발 / 서비스 테스트 (0) | 2022.03.22 |
| [Spring Boot] 회원 관리 예제 - 회원 리포지토리 테스트 케이스 작성 (0) | 2022.03.22 |
| [Spring Boot] 회원 관리 예제 - 도메인과 리포지토리 만들기 (0) | 2022.03.21 |
| [Spring Boot] 사전 환경 준비 (0) | 2022.03.21 |