Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Backtracking
- 해시맵
- 알고리즘
- 브루트포스
- 구현
- 너비우선탐색
- 네트워크
- 스프링
- 백준
- 프로그래머스
- Algorithm
- Network
- 깊이우선탐색
- greedy
- boj
- broadcast
- DFS
- Spring
- BFS
- dynamic programming
- 동적계획법
- switch
- HashMap
- DynamicProgramming
- 그리디
- 해시
- programmers
- 이분탐색
- DP
- 백트래킹
Archives
- Today
- Total
옌의 로그
[Spring] 스프링 입문 | 2. 스프링 웹 개발 기초 본문
(본 게시글은 인프런 스프링 입문 강의에 의해 작성되었습니다.)
스프링 웹 개발 기초
정적 컨텐츠
- Welcome Page를 만들었던 것 처럼 서버에서 무언가 하는 것 없이 파일을 웹 브라우저에 그대로 내려주는 것을 뜻함
(파일 자체를 client에게 그대로 전달)
resources/static/hello-static.html
<!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 관련 컨트롤러를 찾음
- 컨트롤러가 없기 때문에 static 쪽에서 정적 리소스를 찾아간다
MVC와 템플릿 엔진
- MVC : Model, View, Controller
- 템플릿 엔진 : 동적으로 웹 페이지나 문서를 생성하기 위해 사용되는 도구나 소프트웨어. 템플릿 엔진은 정적인 템플릿과 동적인 데이터를 결합하여 최종 출력물을 생성한다
- html을 그냥 전달하는게 아닌.. 서버에서 프로그래밍해서 내리는 것을 템플릿 엔진이라 한다. 이것을 하기 위해 MVC 모델을 사용한다
- 과거에는 Controller랑 View가 나누어져 있지 않았음. View에서 모든 걸 다 했다
- 요즘엔 MVC 방식을 많이 사용
- View > 화면을 띄우는데 모든 역량을 집중
- Controller > 비즈니스 로직가 관련된 작업
Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
// 외부에서 파라미터 입력을 받아오기
model.addAttribute("name", name);
return "hello-template";
} // 뷰라는 템플릿이 있는 방식
}
View
resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
http://localhost:8080/hello-mvc?name=yeeun
MVC, 템플릿 엔진 이미지
- 내장 톰캣 서버가 도메인을 스프링에 던짐
- 스프링은 helloController를 호출
- helloController는 model에 get 쿼리 파라미터를 받아 return 시키는데, 이 때 viewResolver에 넘긴다
- viewResolver는 모델의 값을 hello-template.html에 렌더링 시켜서 반환한다
- viewResolver는 웹 애플리케이션에서 사용되는 뷰를 식별하고 선택하는 기능을 제공하는 클래스나 구성요소이다
- 주로 웹 애플리케이션의 컨트롤러에서 생성된 모델 데이터를 특정 뷰와 연결하여 최종적인 출력 결과를 생성하는 역할을 수행한다
API
- json 포맷을 활용해 데이터를 전달. 과거엔 xml을 많이 썼다
- API의 경우 보통 서버끼리 통신할 때 사용한다. (서버끼리 html파일을 주고받을 필욘 없으니까!)
@ResponseBody 문자변환
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody // http 응답 body 부분에 이 데이터를 직접 넣겠다는 의미
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
} // 그냥 냅다 데이터를 내려주는 방식
}
- @ResponseBody를 사용하면 뷰 리졸버(viewResolver)를 사용하지 않는다
- 대신 HTTP의 response body 부분에 문자 내용을 직접 반환한다
@ResponseBody 객체 반환
@Controller
public class HelloController {
@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;
}
}
}
// 자바 빈 표준방식 : 게터, 세터
// 프로퍼티 접근 방식
- @ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환된다
@ResponseBody 사용 원리
- @ResponseBody를 사용시
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter가 동작
- 이게 문자야 객체야? 판단 후 변환
- 기본 문자처리 : StringHttpMessageConverter
- 기본 객체처리 : MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다
(참고: 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다)
'스터디 > 스프링' 카테고리의 다른 글
[Spring] 스프링 핵심 원리 기본편 | 1. 객체 지향 설계와 스프링 (0) | 2023.08.24 |
---|---|
[Spring] 스프링 입문 | 5. 회원관리 예제 - 웹 MVC 개발 (0) | 2023.08.20 |
[Spring] 스프링 입문 | 4. 스프링 빈과 의존관계 (2) | 2023.07.06 |
[Spring] 스프링 입문 | 3. 회원관리 예제 - 백엔드 개발 (0) | 2023.07.06 |
[Spring] 스프링 입문 | 1. 프로젝트 환경설정 (0) | 2023.06.12 |
Comments