스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 환경설정
프로젝트 설정
-
스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성
https://start.spring.io
-
Project는 Maven과 Gradle 중 Gradle로 선택해준다.
- Gradle은 버전 설정을 하고 라이브러리를 가져오는 역할을 한다.
-
Dependencies는 Spiring Web과 Thymeleaf를 선택해준다.
Thymeleaf는 템플릿 엔진의 종류 중 하나이며, html을 만들어주는 역할을 한다.

-
기본적으로 src에 main, test 폴더로 나누어져 있다.
- main 밑에 java와 resources가 있고, java 밑에 실제 패키지와 소스 파일이 있다.
- test 폴더에는 test 코드와 관련된 소스들이 있다. → 테스트 코드가 중요하다는 걸 의미한다.
- resources에는 실제 자바 코드파일을 제외한 xml, properties 같은 설정 파일, html이 들어간다. → 자바 파일을 제외한 나머지라고 생각하면 된다.
-
build.gradle의 mavenCentral 이라는 공개된 사이트에서 라이브러리를 다운 받는다. 필요하다면 특정 사이트 url을 넣어서 바꿔줄 수 있다.
-
기본 메인 클래스를 실행한 후 localhost:8080으로 들어가면 에러 페이지가 나오는 것을 확인할 수 있다.

- 메인 메소드를 실행하면 Tomcat started on port(s): 8080 (http) …. 라는 메시지를 확인 가능하다.
- 스프링 부트 애플리케이션이 실행되면서 톰캣이라는 웹서버를 내장하고 올라오게 된다.
라이브러리 살펴보기
- External Libraries에 들어가면 가져온 라이브러리들을 확인할 수 있다. → 엄청 많다.
- Gradle이나 Maven같은 빌드 툴들은 의존 관계를 관리해준다.
- 만약 spring-boot-starter-web 라이브러리를 가져온다면 spring-boot-start-web 라이브러리가 필요로 하는 라이브러리들을 같이 가져와준다.

스프링 부트 라이브러리
- spring-boot-starter-web
- spring-boot-starter-tomcat: 톰캣 (웹서버)
- spring-webmvc: 스프링 웹 MVC
- spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
- spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-boot-starter-logging
- logback, slf4j → slf4j는 인터페이스이고 logback은 구현. 이 2가지 조합을 많이 사용
- 실무에서는 println을 사용하지 않고 로깅을 사용한다.
테스트 라이브러리
- spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
View 환경설정
Welcome Page 만들기
- Welcome Page란 도메인을 눌렀을 때 처음으로 나오는 페이지를 의미한다.
- resources/static/index.html을 통해 Welcome 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>
thymeleaf 템플릿 엔진
Controller
- 웹 애플리케이션에서 첫번째 진입점
- 클래스 선언부 위에 @Controller 어노테이션을 사용해 선언한다.
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
}
- @GetMapping 어노테이션을 사용하면 웹 어플리케이션에서 /hello가 들어오면 hello 메소드를 호출하게 해준다.
- 여기서의 Get은 http get
- 여기서의 Model은 MVC(Model - View - Controller)의 Model이다.
resource/templates/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>
- 여기서 th는 thymeleaf의 th
- 여기서 data는 model의 addAttribute를 해줄 때의 key이며 그 value는 hello!!
- 그러므로로 data가 hello!!로 치환될 것이다.
- https://localhost:8080/hello
동작 환경 그림

- 웹 브라우저에서 localhost:8080/hello라는 URL을 던지면 톰캣이라는 스프링 부트 내장 웹 서버에서 받는다.
- 톰캣 서버가 스프링 컨테이너에게 전달한다.
- 스프링 컨테이너가 컨트롤러에서(@Controller)에서 @GetMapping(”hello”)를 찾는다.
- helloController에 @GetMapping(”hello”)를 통해 hello라는 url에 매칭이 되고 해당 메소드가 실행이 된다.
- Spring이 Model이라는 것을 만들어서 값을 넣어준다.(key는 data, value는 hello!!)