본문 바로가기

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

[Spring Boot 스터디] 이정욱 #1주차 - 섹션 1, 2 ".... . .-.. .-.. ---"

반응형

테스트 라이브러리 정리

  • spring-boot-starter-test는 스프링 부트 테스트를 위한 라이브러리다.
  • junit은 테스트 프레임워크로서 사용된다.
  • mockito는 목 라이브러리로 사용된다.
  • assertj는 테스트 코드 작성을 편하게 해 주는 라이브러리다.
  • spring-test는 스프링과의 통합하여 테스트할 수 있게 지원해 주는 라이브러리다.

View 환경설정

스프링부트는 WelcomePage를 제공한다.

static/index.html을 올려두면 Welcome Page를 적용할 수 있다.

Welcome Page 적용한 모습 또한 thymeleaf 엔진을 사용하고 있어,

controller를 이용해 값을 반환하고 사용하는 것이 가능하다.

 

java/hello/hellospring/controller/HelloController.java

javaCopy code
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

resources/templates/hello.html

```
javaCopy code
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

```

위 두 가지 파일을 추가하고 다시 실행한 뒤 localhost:8080/hello에 접속해보면 화면이 나온다

빌드하고 실행하기

터미널에서 프로젝트 위치로 이동하고, 아래 명령어를 실행한다.

./gradlew build

실행이 되면 build/libs로 이동한다.

cd build/libs

jar 파일이 만들어져 있는 것을 확인할 수 있다.

이제 이 파일을 실행하면 된다.

java -jar hello-spring-0.0.1-SNAPSHOT.jar

웹 브라우저에서 확인해보자.

정상적으로 실행된다!

나중에 배포할 때, 이 jar 파일만 서버에 넣고 실행하면 된다.

섹션2

1. 웹 개발 방법

  • 정적 컨텐츠: 파일을 그대로 웹브라우저에 전달하는 것
  • MVC와 템플릿 엔진: 서버에서 프로그래밍해서 html을 동적으로 바꾸는 것 (대부분 이 방식 채택)
  • API: json 등의 포맷으로 클라이언트에 데이터 전달하는 방식

2. 정적 컨텐츠

스프링 부트에서 제공하는 정적 컨텐츠 기능은 다음과 같이 작동한다.

static/hello-static.html 파일이 존재할 때, 웹 브라우저에서 localhost:8080/hello-static.html에 접속한 경우

  1. 내장 톰캣 서버에서 스프링 컨테이너에 데이터 요청
  2. 스프링 컨테이너는 hello-static 관련 컨트롤러가 있는지 탐색 (컨트롤러가 우선순위를 가짐)
  3. 매핑된 컨트롤러가 없으므로 resources: static/hello-static.html을 찾아 반환함

3. MVC와 템플릿 엔진

MVC: Model, View, Controller

hello-mvc 컨트롤러와 hello-template.html 파일을 생성하고 매핑해 놓은 상태일 때

  1. 내장 톰캣 서버에서 스프링 컨테이너에 데이터 요청
  2. helloController의 hello-mvc 메소드에 매핑이 되어 있으므로 호출함
  3. name에 'spring'이라는 값을 넣은 경우 해당 값도 함께 스프링에 반환
  4. 스프링이 viewResolver를 통해 templates/hello-template.html을 찾아 Thymeleaf 템플릿에 처리 요청
  5. 템플릿 엔진에서 값을 변환하여 웹 브라우저에 넘김

실제로 파일을 만들어 놓고 웹 브라우저에서 name 파라미터 값으로 'spring!!!!'을 넣어 요청해 보면 아래와 같은 화면을 볼 수 있다.

      <html />

<http://localhost:8080/hello-mvc?name=spring>!!!!

4. API

HelloController.java에 아래 내용을 추가하여 API 동작 방식을 확인해보자.

  1. String을 반환하는 경우
      <java />

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
        return "hello " + name;// "hello spring"
}

@ResponseBody를 사용하면 ViewResolver를 사용하지 않고 HTTP의 Body에 문자 내용을 직접 반환한다.

  1. 객체를 반환하는 경우
      <java />

@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를 사용하면 ViewResolver 대신 HttpMessageConverter가 동작한다.

기본 문자 처리는 StringHttpMessageConverter가,

기본 객체 처리는 MappingJackson2HttpMessageConverter가 담당한다.

보통 스프링에서 이야기하는 API 방식은 객체 반환 방식을 의미한다.

반응형