스프링 부트와 JPA 활용1 - 1. 프로젝트 환경설정
Updated:
김영한님의 인프런 강의 - 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
위 강의를 정리한 내용입니다.
I. 프로젝트 생성
스프링 부트 프로젝트 생성 : https://start.spring.io/
의존 라이브러리
1. Spring Web
웹 구동을 위해 필요한 라이브러리들의 집합
2. Thymeleaf
템플릿 엔진이란?
템플릿 엔진은 동적 컨텐츠
를 생성하는데 사용된다. 즉, 스프링 웹 MVC의 뷰를 담당하여,
컨트롤러가 전달하는 데이터를 사용하여 동적으로 화면을 구성한다.
템플릿 엔진은 서버사이드와 클라이언트사이드로 나눌 수 있다.
서버사이드 템플릿 엔진
: 서버에서 가져온 미리 정의된 템플릿에 넣어 HTML을 그리고 클라이언트에게 전달한다.클라이언트사이드 템플릿 엔진
: HTML 형태로 코드를 작성, 동적으로 DOM을 그리게 해준다.
개요
서버사이드 자바 템플릿 엔진이다. 같은 템플릿 엔진으로 JSP
를 사용하는 경우가 있으나,
현재는 Thymeleaf
로 넘어가는 추세. 특히 스프링 부트는 JSP
의 사용을 권장하지 않고 있다.
3. Spring Data JPA
JPA? Spring Data JPA?
JPA
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스다.
- 인터페이스이기 떄문에 특정 기능을 하는 라이브러리가 아님을 명심하자.
- JPA는 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의한 방법이다.
Spring Data JPA
- Spring에서 제공하는 모듈로, JPA를 더 쉽게 사용할 수 있도록 도와준다.
- JPA를 한단계 더 추상화시킨
Repository
라는 인터페이스를 제공한다.
4. H2 Database
데이터베이스. MySQL도 사용할 수 있으나, 예제를 위해 교육용으로 선택.
5. Lombok
Getter
, Setter
등을 어노테이션으로 간단하게 만들어준다.
II. View 환경 설정
HelloController.java
//HelloController.java
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!!");
return "hello";
}
}
클라이언트가 @GetMapping
의 주소로 접근하면, 해당 컨트롤러를 불러오고 컨트롤러 내에서 데이터를 모델에 실어서 return
에 해당하는 뷰로 넘긴다.
예시에서는 data
라는 키의 값에 hello!!!
를 넣어서 hello.html
로 보내게 된다.
- 뷰는
resources:templates/ + {ViewName} + .html
가 기본경로이다.
hello.html
<!-- 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>
localhost:8080/hello
로 접근하면 서버사이드 렌더링이 이루어져 기존의 안녕하세요. 손님
대신 안녕하세요. hello!!!
가 출력된다.
개발자도구
<!-- localhost:8080/hello 개발자도구 -->
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p >안녕하세요. hello!!!</p>
</body>
</html>
III. JPA와 DB 설정, 동작확인
application.yml 설정
show_sql: true
는 sql로그를 System.out으로 보여준다.
org.hibernate.SQL: debug
는 sql로그를 로거를 통해서 보여준다.
-> 따라서 show_sql
은 사용하지 않는다.
Member, MemberRepository 클래스 작성 및 테스트
@Transactional
어노테이션이 테스트케이스에 붙으면 테스트 후 결과를 롤백한다.
따라서 실제 DB에 자료가 저장되지는 않는다.
Rollback(false)
어노테이션을 붙이면 롤백을 막을 수 있다.
쿼리파라미터로 로그남기기
application.yml
에
org.hibernate.type: trace
를 추가하면 실제 쿼리파라미터를 볼 수 있다. -> 확인하기 번거로움
외부 라이브러리 p6spy
를 사용하자.
build.gradle
에
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
다른 라이브러리들은 스트링부트가 버전을 자동으로 설정하나,
해당 라이브러리는 따로 버전을 설정해주어야 한다.
Leave a comment