스프링 부트와 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