📝 프로젝트 생성
스프링 부트 스타터를 이용해 스프링 프로젝트 생성한다. (https://start.spring.io/)
IntelliJ Gradle 대신에 자바 직접 실행
최근 IntelliJ 버전은 Gradle을 통해서 실행 하는 것이 기본 설정인데, 이렇게 하면 실행 속도가 느리다.
아래와 같이 변경하면 자바로 바로 실행해서 실행 속도가 더 빠르다.
📝 라이브러리 살펴보기
Gradle이나 Maven 같은 빌드 툴은 의존관계를 관리한다.즉, 의존관계가 있는 라이브러리를 함께 다운로드 한다.
스프링 부트 라이브러리
- spring-boot-starter-web
- spring-boot-starter-tomcat: 톰캣 (웹서버)
- spring-webmvc: 스프링 웹 MVC
- spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
- spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback, slf4j
- spring-boot
테스트 라이브러리
- spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
📝 View 환경설정
Welcom Page 만들기
<!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
스프링 부트가 제공하는 Welcome Page 기능
static/index.html 을 올려두면 Welcome page 기능을 제공한다. spring 공식 문서 - welcom page
스프링 부트
→ 스프링 생태계 자체를 감싸서 편리하게 사용할 수 있도록 도와준다.
→ 스프링 생태계는 매우 크다. 따라서 필요한 걸 찾는 능력이 중요하다.
→ 공식 문서 이용! (https://spring.io/)
thymeleaf 템플릿 엔진
- 스프링 공식 튜토리얼: https://spring.io/guides/gs/serving-web-content/
- 스프링부트 메뉴얼: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines
- thymeleaf 공식 사이트: https://www.thymeleaf.org/
Controller 만들기
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!");
return "hello";
}
}
hello/hellospring/controller/HelloController.java
Controller는 웹 애플리케이션의 진입점이다.
@GetMapping("hello") 는 웹 어플리케이션에서 localhost:8080/hello 에 접속하면 어노테이션이 붙은 hello 메서드를 호출해준다.
hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
resources/templates/hello.html
xmlns:th="<http://www.thymeleaf.org>" 는 템플릿 엔진인 thymeleaf를 선언한 문장이다.
즉, 이렇게 선언하면 템플릿 엔진으로서 thymeleaf 문법을 사용할 수 있다.
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p> 에서 ${data} 부분은 HelloController에서 model.addAttribute("data", "hello!"); 의 value인 “hello!”로 치환된다.
thymeleaf 템플릿엔진 동작 확인
실행: http://localhost:8080/hello
동작 환경 그림
- 웹 브라우저에서 http://localhost:8080/hello 를 던지면, 스프링 부트에 내장되어 있는 톰켓 서버가 받는다.
- 서버는 /hello 를 보고 스프링한테 던진다.
- 스프링의 HelloController의 @GetMapping("hello")에서 hello 에 매칭되어서 받는다.
- 이때의 Get은 HTTP Get방식, POST 방식 할 때의 그 get이다.
- HTTP URL을 임의로 치고 엔터치는 것이 get 방식이다.
- 해당 컨트롤러에 있는 public String hello(Model model) 메서드가 실행된다.
- 이때 넘어오는 model은 스프링이 만들어서 넣어주는 것이다.
- model.addAttribute("data", "hello!");
- model에 “data”는 “hello!”라고 넣는다.
- return "hello";
- "hello" 는 resources/templates에서 hello 를 찾아가서 렌더링하라는 의미이다.
컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver)가 화면을 찾아서 처리한다.
- 스프링 부트 템플릿엔진 기본 viewName 매핑
- resources:templates/ +{ViewName}+ .html
📝 빌드하고 실행하기
- Windows PowerShell 로 이동
- 프로젝트가 있는 디렉토리로 이동
- ./gradlew build 실행하면 빌드된다.
- build\libs로 이동해서 java -jar hello-spring-0.0.1-SNAPSHOT.jar 을 입력하면 실행된다.
💡주의💡
8080 포트는 두 개를 동시에 띄울 수 없기 때문에, IntelliJ에서 실행 중이라면 종료하고 cmd에서 실행해야 한다.
서버 배포할 때는 hello-spring-0.0.1-SNAPSHOT.jar 파일만 복사해서 서버에 넣고,
java -jar hello-spring-0.0.1-SNAPSHOT.jar 명령어를 실행하면 서버에서 스프링이 동작하게 된다.
💡잘 안되는 경우💡
./gradlew clean build 하면 build 폴더가 완전히 지워진다. 이후 다시 빌드하고, 실행하면 제대로 동작할 것이다.