정적 컨텐츠
static 폴더 안에 있는 파일을 그대로 고객에게 전달한다
이런식
static 파일 안에서 프로그래밍을 직접 하진 않고 요즘은 보통 MVC 패턴으로 코딩하는 추세
- 웹 브라우저에서 해당 html 주소를 요청
- 톰켓 서버는 스프링 컨테이너에 관련 컨트롤러가 있는지를 우선적으로 탐색한다
- 스프링 컨테이너에 해당 매핑이 없음
- 스프링 컨테이너에서 관련 컨트롤러가 없으면 그 때 resources/static 폴더에서 해당 파일이 있으면 그 파일을 반환한다
MVC(Model, View, Controller)
관심사 분리 !
View는 화면을 그리는 데에 모든 영향을 집중한다
Controller에서는 비즈니스 로직, 내부 로직 처리에 집중해야 하므로 관심사를 분리
Model에 관련 된 로직을 화면에 넘겨주는 방식
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
model에 담아서 보내면 View에서 렌더링할 때 사용
실제 서버에서 돌면 hello! empty값이 th:text 값으로 바뀐다
- 로컬호스트 8080에서 해당 주소 넘기기
- 스프링 부트 띄울 때 같이 띄우는 내장 톰켓 서버를 먼저 거침
- hello-mvc 요청을 스프링에 전달
- 스프링 컨테이너 helloController에 매핑이 되어있는 메서드 호출 → 리턴할 때 hello-template, model의 키: name으로, 값: spring을 넘김
- viewResolver라는 화면 해결자가 동작 : view를 찾아주고 템플릿 엔진을 연결시켜줌
- viewResolver가 return 값과 똑같은 스트링을 찾아서 템플릿 엔진에 처리해달라고 넘김
- 템플릿 엔진이 렌더링해서 변환을 하고 웹 브라우저에 넘긴다
API
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello" + name;
}
@ResponseBody
http의 body 부분의 데이터에 return 내용을 직접 넣어주겠다는 뜻
view가 없고, 문자 그대로 내려가는 방식
페이지 소스로 차리 확인하기
API는 다음과 같다
템플릿 엔진은 다음과 같다
1. 객체 만들기
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
이 Hello 클래스는 HelloController.Hello 등의 방식으로 사용할 수 있다 [static class]
getter, setter를 만들어준다 [단축키 커맨드+N]
2. 매핑해서, 객체 넘기기
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
return Hello 를 보면 알 수 있듯, 객체를 넘겼다
3. 웹 브라우저에 hello-api 요청
다음과 같이 json 구조로 나타남
json?
key : value 구조
getter setter
: 단축키 → 커맨트+N
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
name에 직접 접근할 수 없음 → private,
getter, setter 메서드로 접근 → 자바 빈 표준 방식, 프로퍼티 접근 방식
@ResponseBody가 없으면 → viewResolver에게 던짐
@ResponseBody가 있으면 → 그대로 데이터를 넘겨야 되겠구나 !
- 문자를 넘기면? StringConverter
- 객체를 넘기면? httpMessageConverter가 동작한다 -> JsonConverter
Hello 라는 객체가 오면, json 방식으로 데이터를 만들어서 http body에 반환을 하는 방식
@참고자료
[인프런] 김영한 - 스프링 입문 강의 (무료)
'개발일지 > Spring' 카테고리의 다른 글
[Server] TCP와 UDP (0) | 2023.09.26 |
---|---|
[Spring] 스프링 입문 - 회원 서비스 테스트 (0) | 2023.09.18 |
[Spring] 스프링 입문 - 회원 서비스 개발 (0) | 2023.09.14 |
[Spring] 스프링 입문 - 회원 리포지토리 테스트 케이스 (0) | 2023.09.13 |
[Spring] 스프링 입문 - 회원 도메인과 리포지토리 만들기 (0) | 2023.09.12 |