Search

스프링 웹 개발 기초

1. 정적 컨텐츠

파일을 그대로 웹 브라우저에 내려주는 방법
공식 사이트에 들어가보면
스프링 부트는 정적컨테츠를 /static 폴더에서 찾아서 제공된다고 써져있음.
static 폴더안에 html 생성 후 해당 주소로 호출하면
김영한 강사님의 강의 자료입니다!
웹 부라우저에서 해당 주소를 톰캣 서버로 넘겨주고
톰캣 서버는 컨트롤러에 hello-static을 넘겨주는데, 컨트롤러에 없어서
내부에 있는 해당 주소를 찾아서 정적으로 내보내 준다.

2. MVC와 템플릿 엔진

서버에서 프로그래밍해서 HTML을 동적으로 바꿔주는 내려주는 방법
(과거의 jsp, php → 템플릿 엔진)
Model
View
Controller
과거의 jsp에 모든걸 다 처리한 방식을 Model1 방식이라 한다.
현재는 view는 화면을 그리는데 집중
비즈니스 로직이나 내부적인걸 controller가 집중하고
화면에 필요한 데이터를 넘겨주는게 model
인텔리제이에서 command + p 누르면 옵션을 볼 수 있다.
required가 기본적으로 true여서 굳이 안써줘도 된다.
타임리프 템플릿엔진을 쓸려면
<html xmlns:th="http://www.thymeleaf.org">
HTML
복사
이렇게 추가해주고
<p th:text="'hello ' + ${name}">hello! empty</p>
HTML
복사
이런식으로 name에 대한 데이터값이 들어오면 hello! empty 가 아니라 hello {데이터값} 으로 출력된다.
소스보기 하면 이렇게 나온다
김영한 강사님의 강의 자료입니다!
컨트롤러에서 model에 데이터를 담아서 viewResolver(화면 해결자 역할 - view를 찾아주고 템플릿 연결)가
리턴되는 hello-template랑 똑같은 애를 찾아서 타임리프 템플릿으로 처리해! 라고 넘겨준다.
그리고 템플릿 엔진이 변환해서 html을 웹브라우저에 반환

3. API

JSON이라는 데이터 구조 포맷으로 클라이언트한테 데이터를 전달하는 방법. (서버끼리 통신할때)
@GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name){ return "hello "+ name; }
Java
복사
@ResponseBody
http 통신 프로토콜에서 헤더부와 바디부로 나눠짐.
바디부에 이 데이터를 넘겨주겠다 라는 어노테이션이다.
view와 다르게 소스보기 하면 소스는 안보이고 넘어온 데이터값만 출력된다.
이제 문자가 아니라 데이터를 보내줘야 한다면
controller에서 hello라는 객체를 만들어서 거기에 name을 담아서 보내준다.
인텔리제이에서 command + shift + enter 누르면 다 완성해준다.
ctrl + enter 누르면 getter , setter 생성 가능
javabean 표준 규약에 맞춰서 만들어졌다. (property 접근 방식)
static class Hello { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Java
복사
key value로 이루어진 JSON 방식으로 출력된다.
김영한 강사님의 강의 자료입니다!
컨트롤러가 웹브라우저에서 던져준 hello-api를 찾아서 보니까 @ResponsBody가 있는걸 보고
HTTP 응답에 그대로 이 데이터를 넣어서 넘겨줘야겠다 싶은데!! 보니까 문자가 아니라 객체라서
json 방식으로 데이터를 만들어서 http에 넘겨준다.
@ResponsBody가 있으면
HttpMessageConverter가 동작하면서
단순 문자면 StringConverter(StringHttpMessageConverter 라이브러리)가 동작
객체면 JsonConverter(MappingJackson2HttpMessageConverter 라이브러리)가 동작

*참고