Gradle 이란?
gradle은 오픈소스 빌드 자동화 툴로, 거의 모든 타입의 소프트웨어를 빌드할 수 있는 유연함을 가진다.
하지만 인텔리제이의 외부 라이브러리를 열어보면 내가 설정한 것 외에도 많은 라이브러리들이 추가되어있는 것 을 볼 수 있다.
왜 그런걸까??
그 이유는 Gradle은 의존관계가 있는 모든 라이브러리를 전부 함께 다운로드하기 때문이다.
View 환경 설정
1. Welcome Page
- 스프링 부트는 Welcome Page 기능을 제공한다.
=> static폴더에 index.html을 넣어두면 스프링부트가 처음 실행 할 때 이 html 파일을 Welcome Page로 보여준다.
2. thymeleaf 템플릿 엔진 이란?
- thymeleaf 템플릿 엔진은 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어 주는 뷰 템플릿 엔진이다.
- 서버를 가동하지 않으면 순수 html, 가동하면 동적 html을 확인할 수 있다.
- 이때 컨트롤러에서 리턴 값으로 문자를 반환하면 ViewResolver가 해당 화면을 찾아서 처리한다.
ex) "hello" 를 컨트롤러가 리턴 하면 resources:templates/hello.html 을 리턴한다.
스프링 웹 개발 기초
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
1. 정적 컨텐츠
정적 컨텐츠란?
=> 클라이언트의 요청을 받고 서버에 미리 저장된 HTML, CSS, JS 등의 파일을 그대로 응답해 보여주는 것.
우선 내장 톰켓 서버는 요청을 받은 후 스프링에게 요청을 넘겨서 관련 컨트롤러를 찾게 되는데 만약 해당 요청과 관련 이 있는 컨트롤러가 없을 경우 static 폴더에 있는 정적 컨텐츠를 찾아서 웹 브라우저에게 넘겨 주게 된다.
2. MVC와 템플릿 엔진
- MVC는 Model, View, Controller를 의미한다.
예전에는 View와 Controller를 분리 하지 않았지만 요즘에는 분리해서 사용하고 있다. - Model: 애플리케이션의 정보, 데이터를 나타낸다. 우리는 Model에 데이터를 담아서 화면 쪽에다 넘겨준다
- View: 데이터 및 객체의 입력, 출력을 담당한다. 데이터를 기반으로 사용자들이 볼 수 있는 화면을 담당하는 기능을 한다.
- Controller: 비즈니스 로직이나 서버와 관련된 작업을 하는 것.
정적 컨텐츠 때와는 다르게 해당 요청을 처리 할 수 있는 controller가 있는 상황이다.
우리는 Model객체에 데이터를 담은 뒤 전달하여 우리가 보는 화면에 데이터를 보여 줄 수 있다.
※이때 우리는 thymeleaf 템플릿 엔진을 통해 model에 담은 데이터를 화면에 출력 할 수 있다.
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
}
예를 들어 우리가 이렇게 model.addAttribute 메소드를 통해 데이터를 넣어 준다면
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
우리는 thymeleaf 템플릿 엔진을 이용하여 이와 같이 화면에 우리가 넘겨준 데이터를 보여줄 수 있다.
3. API
MVC 와 다른 점은 뭘까?
=> 이 방식은 View가 없고 리턴 문자열을 그대로 http의 body에 직접 반환 해준다
우리는 이 기능을 사용하기 위해 특별히 @ResponseBody라는 어노테이션을 사용한다.
- @ResponseBody를 사용 하면 View Resolver를 사용하지 않는다.
- 이때 만약 우리가 객체를 리턴 해준다면 해당 객체의 필드 이름과 필드 값을 각각 key,value로 하는 Json 형태로 반환하게 된다.
- viewResolver 대신 HttpMessageConverter가 동작하게 되는데,
이때 만약 기본 문자를 리턴 하면 StringHttpMessageConverter가 동작하고 객체를 리턴 하면 MappingJackson2HttpMessageConverter가 동작하게 된다.
※Tip. @ResponseBody와 @Controller 어노테이션을 합쳐서 @RestController라는 어노테이션을 사용하는 방법 도 있다.
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[2024-2 Spring Boot 스터디] 김아리 #1 주차 (1) | 2024.10.09 |
---|---|
[2024-2 Spring Boot 스터디] 조상혁 #1주차 (3) | 2024.10.09 |
[2024 Spring Boot 스터디] 유태근 #3 주차 - 컴포넌트 스캔과 의존관계 자동 주입 (0) | 2024.07.11 |
[2024 Spring Boot 스터디] 남윤찬#2 주차 - 6~7 섹션 (0) | 2024.07.06 |
[2024 Spring Boot 스터디] 정호용 #3 주차 - 5~6장 (미완) (0) | 2024.06.10 |