일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- Array.asList
- 코딩테스트
- Spring MVC 구성요소
- 코드스테이츠
- Spring MVC 동작원리
- String.valueOf()
- 싱글톤패턴
- 버블정렬
- 재귀함수
- 백준
- 구간합구하기
- MySQL
- vm인스턴스생성
- OOP
- 자바
- 11659
- Spring Web MVC
- 백준 11659
- 스택
- 프로그래머스
- 투포인터알고리즘
- 코드스테이츠 백엔드
- 클라우드에서 도커 실행하기
- 인텔리제이
- 재귀와반복문
- 성능테스트툴
- GCP
- java
- List.of
- Today
- Total
순간을 기록으로
[Spring] 스프링 웹 개발의 방법 3가지 본문
스프링을 이용한 웹 개발에는 3가지 방법이 있습니다.
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
1.정적 컨텐츠
클라이언트(브라우저)가 요청하면 서버에서 어떠한 연산도 없이 파일 그대로 웹브라우저에게 주는 방법
소스코드
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
브라우저에서 localhost:8080/hello-static.html입력하면(요청하면) 내장 톰캣 서버가 요청을 받습니다. 요청을 받은 내장 톰캣 서버는 우선 'hello-static'과 관련된 컨트롤러가 있나 찾습니다. 만약 관련 컨트롤가 없다면 resoruce 디렉토리 아래에서 'hello-static.html'을 찾습니다. 그리고 찾은 hello.static.html을 클라이언트(브라우저)에게 주면서 응답합니다.
2.MVC와 템플릿엔진
현재 가장 많이 사용되는 웹 개발 방식. 서버에서 정보를 추가하여 파일을 주는 방식
Movel: 도메인, 엔티티 역할
View: 화면을 그리는 역할
Controller: 로직을 처리하는 역할
Controller
controller/HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
View
resource/templates/hello.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
실행
localhost:8080/hello-mvc?name=spring
구조
웹브라우저에서 localhost:8080/hello-mvc?name=spring하고 요청을 보낸다. 뒤에 ?를 사용하여 GET방식으로 파라미터를 넘기는 방식이다. 톰캣 서버는 요청을 받고 hello-mvc와 관련된 컨트롤러로 연결해준다. 컨트롤러에서 연산처리를 하고 viewResolver로 넘어간다. viewResolver는 해석하면 화면해결사로 관련있는 view(html)을 찾고 연결해준다. 그리고 타임리프(템플릿 엔진)은 렌더링(조합)을 해서 html에 자바코드가 있는 것을 값으로 다 바꾸어 브라우저에게 반환을 한다.
3.API 방식
클라이언트에게 html 파일을 반환하는 게 아닌 데이터(문자열, 객체 등..)을 반환하는 방식
1.@ResponseBody 문자 반환하기
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody를 사용하면 뷰리졸버(viewResolver)를 사용하지 않는다. 왜냐하면 뷰리졸버는 관련있는 view(html)을 찾고 연결해주는 역할이다. 하지만 이번에는 html을 반환하지 않는다. 대신 HTTP의 Body에 문자 내용을 직접 반환할 예정이다.
실행
localhost:8080/hello-string?name=spring
결과
url로 요청을 보내고 결과 화면에서 페이지 소스보기를 누르면 문자열 "hellospring"만 반환된 것을 알 수 있다.
2.@ResponseBody를 이용해 객체 반환하기
@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() { // Getter, Setter은 자바 빈 규약이다. property 접근 방식이라고도 한다.
return name;
}
public void setName(String name) {
this.name = name;
}
}
@ResponseBody를 사용해서 return에 객체를 넣으면 JSON 타입으로 변환되어 객체가 반환된다.
실행
localhost:8080/hellp-api?name=spring
해당 url로 접속을하면 결과 화면으로 JSON 형식으로 객체를 받은 것을 알 수 있다.
구조
@ResponseBody를 사용해서 HTTP Body 부분에 문자 내용을 직접 반환한다. MVC에서는 뷰리졸버가 동작했지만 API 방식에서는 HttpMeesageConverter가 동작한다. 기본 문자는 StringHttpMessageConverter 라이브러리가 사용되고 기본 객체는 MappingJackson2HttpMessageConverter 라이브러리가 사용된다. byte 와 기타 처리는 HttpMesaageConverter에 기본적으로 등록되어있다.
'Development > Spring' 카테고리의 다른 글
[Spring] 스프링 빈을 등록하는 방법2: 직접 등록하기 (0) | 2021.11.19 |
---|---|
[Spring] 스프링 빈을 등록하는 방법1: 컴포넌트 스캔 (0) | 2021.11.19 |
[Spring] Spring Boot Devtools (0) | 2021.11.17 |
[인텔리제이] .iml file does not exist (0) | 2021.11.17 |
스프링부트로 hello 스프링 프로젝트 시작해보기 (0) | 2021.11.09 |