Java 11 이상 설치, IDE::IntelliJ 사용
Gradle groovy, Java version, Spring Boot version 선택 후 generate -> 생성된 프로젝트를 *.zip 파일 형태로 다운로드
Group: domain name
Artifact: build된 결과물 이름
Spring Web, Thymeleaf(template engine)
application class의 main method를 실행한다.
tomcat web server 통해 서버 실행
Gradle 통해 의존성있는 모든 라이브러리 다운로드함
logback, slf4j: 로깅
juint, assertj...: test tool
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
resources/static/index.html
index.html은 서버 실행 시 첫 화면으로 자동 설정
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "Hello!!");
return "hello";
}
}
localhost:8080으로 들어온 요청이 helloController로 전달
helloController는 model에 적당한 속성(데이터)를 추가하고 template page의 이름을 String으로 반환
template engine에 의해 html 렌더링 후 응답
UNIX/Linux 환경
$ gradlew build
Windows 환경
$ gradlew.bat build
실행
$ java -jar /build/libs/*.jar
project 디렉터리에 포함된 gradle 스크립트를 실행한다.
배포시 빌드된 jar 파일을 전달하고, 서버에서는 이를 실행
Spring 기본 제공 기능
resources/static/ 밑에 파일을 작성
사용자 인터페이스(View), 데이터베이스(Model), 비지니스 로직(Controller)를 분리하여 어플리케이션을 작성하는 디자인 패턴
http 요청 -> 적절한 controller에 전달 -> model 적용 -> template rendering -> http 응답
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value="name", required = false) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
요청을 보내는 클라이언트와 응답을 보내는 서버로 구분. 프로그램과 프로그램, 클라이언트와 서버를 연결하는 매개체 역할, 규칙의 집합을 API라 한다.
Representational State Transfer, 자원을 이름으로 구분하여 자원의 상태를 주고받는 모든 것. URI로 자원을 명시, HTTP Method(POST, GET, PUT 등)을 통해 자원에 동작을 적용하는 것.
@ResponseBody (http response body에 직접 삽입)
객체를 반환 시 json 형태로 변환되어 응답
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
@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;
}
}
}