본문 바로가기

WINK-(Web & App)/Spring Boot 스터디

[2024-2 Spring Boot 스터디] 김문기 #1주

반응형

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라는 어노테이션을 사용하는 방법 도 있다.

반응형