테스트 라이브러리 정리
- 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에 접속한 경우
- 내장 톰캣 서버에서 스프링 컨테이너에 데이터 요청
- 스프링 컨테이너는 hello-static 관련 컨트롤러가 있는지 탐색 (컨트롤러가 우선순위를 가짐)
- 매핑된 컨트롤러가 없으므로 resources: static/hello-static.html을 찾아 반환함
3. MVC와 템플릿 엔진
MVC: Model, View, Controller
hello-mvc 컨트롤러와 hello-template.html 파일을 생성하고 매핑해 놓은 상태일 때
- 내장 톰캣 서버에서 스프링 컨테이너에 데이터 요청
- helloController의 hello-mvc 메소드에 매핑이 되어 있으므로 호출함
- name에 'spring'이라는 값을 넣은 경우 해당 값도 함께 스프링에 반환
- 스프링이 viewResolver를 통해 templates/hello-template.html을 찾아 Thymeleaf 템플릿에 처리 요청
- 템플릿 엔진에서 값을 변환하여 웹 브라우저에 넘김
실제로 파일을 만들어 놓고 웹 브라우저에서 name 파라미터 값으로 'spring!!!!'을 넣어 요청해 보면 아래와 같은 화면을 볼 수 있다.
<html />
<http://localhost:8080/hello-mvc?name=spring>!!!!
4. API
HelloController.java에 아래 내용을 추가하여 API 동작 방식을 확인해보자.
- String을 반환하는 경우
<java />
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;// "hello spring"
}
@ResponseBody를 사용하면 ViewResolver를 사용하지 않고 HTTP의 Body에 문자 내용을 직접 반환한다.
- 객체를 반환하는 경우
<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 방식은 객체 반환 방식을 의미한다.
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[Spring Boot 스터디] 황현진 #1 주차 - 섹션 1, 2 "👋 🌸" (1) | 2023.07.14 |
---|---|
[Spring Boot 스터디] 이지원 #1 주차 - 섹션 1, 2 "Hello Spring" (0) | 2023.07.14 |
[Spring Boot 스터디] 류건 #1주차 - 섹션 1, 2 "안녕, 봄" (0) | 2023.07.13 |
[Spring Boot 스터디] 목진협 #1 주차 - 섹션 1, 2 "Hello Spring" (0) | 2023.07.13 |
spring Boot 스터디 1주차 조현상 (0) | 2023.07.13 |