[스프링 부트와 JPA 활용1] 섹션1. 프로젝트 환경설정

jada·2024년 1월 23일
0

Spring 스터디

목록 보기
15/35

스프링 부트 + JPA

스프링부트는 복잡하고 어려운 스프링 기술을 간결하고 쉽게 사용할 수 있도록 도와주는 기술이다. JPA는 강력한 Java ORM 표준 기술이다. 이 두 기술을 합치면 높은 개발 생산성을 유지하면서 빠르게 웹 애플리케이션을 개발할 수 있다.

프로젝트 생성

Dependencies 추가

  • Spring Web Starter : 웹 애플리케이션 개발시 반드시 필요
  • Thymleaf : modern server-side Java template engine
  • Spring Data JPA
  • H2 Database : 간단하게 내장 메모리로 실행할 수 있는 데이터베이스. 교육용, 테스트용으로 많이 사용한다.
  • Lombok : 애노테이션으로 Getter, Setter 간단하게 사용할 수 있게 해준다.

프로젝트 실행

라이브러리 살펴보기

앞서 gradle 프로젝트로 생성하였는데, gradle은 라이브러리들을 관리해주는 역할을 한다. (라이브러리들 간의 의존관계까지 관리해준다.)


각 라이브러리의 하위에는 해당 라이브러리가 의존하는 라이브러리들이 있다.

  • HikariCP - 커넥션 풀, 스프링부트 2점대부터는 기본으로 사용한다. 실제 운영에서 많이 쓴다고 한다.

  • slf4j - 로그를 찍는 인터페이스의 모음.

  • 핵심 라이브러리
    • 스프링 MVC
    • 스프링 ORM
    • JPA, 하이버네이트
    • 스프링 데이터 JPA
  • 기타 라이브러리
    • H2 데이터베이스 클라이언트
    • 커넥션 풀: 부트 기본은 HikariCP
    • WEB(thymeleaf)
    • 로깅 SLF4J & LogBack
    • 테스트
      참고: 스프링 데이터 JPA는 스프링과 JPA를 먼저 이해하고 사용해야 하는 응용기술이다.


View 환경 설정

Thymleaf

타임리프는 흔히 View Template(뷰 템플릿)이라고 부른다. 뷰 템플릿은 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해준다.
HTML 코드에 JAVA 코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이 도구이다. (JSP와 마찬가지로 서버 사이드에서 랜더링 해주는 도구.) html태그를 기반으로하여 th:속성을 이용하여 동적인 View를 제공한다.
장점

  • Natural Template
    단점
  • 익숙해지는 데 시간 걸림 -> 매뉴얼 봐야 함


타임리프를 이용해 서버 사이드 동적 화면 렌더링을 진행해보겠다.

@Controller
public class HelloController {
 @GetMapping("hello")
 public String hello(Model model) {
 	model.addAttribute("data", "hello!!");
 	return "hello";
 }
}
  • 스프링 부트 thymleaf viewName 매핑은 자동으로 다음과 같이 된다.
    • resources:templates/ +{ViewName}+ .html

resources/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>


Model을 통해 hello.html에 전달한 data 값이 동적으로 잘 랜더링된 것을 확인할 수 있다.

  • 정적 화면 컨텐츠 파일은 resources/static 폴더에 넣어둔다고 보면 된다.

  • 참고: spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이View 파일 변경이 가능하다. (캐싱 없애서 reload 가능하게 해줌)
    인텔리J 컴파일 방법: 메뉴 build Recompile

H2 데이터베이스 설치

개발이나 테스트 용도로 가볍고 편리한 DB, 웹 콘솔 화면 제공

https://www.h2database.com
- 다운로드 및 설치

  • 스프링 부트 2.x를 사용하면 1.4.200 버전을 다운로드 받으면 된다.
  • 스프링 부트 3.x를 사용하면 2.1.214 버전 이상 사용해야 한다.
    - 데이터베이스 파일 생성 방법
  • jdbc:h2:~/jpashop (최소 한번) - 파일 생성을 위해.
  • ~/jpashop.mv.db 파일 생성 확인
  • 이후부터는 jdbc:h2:tcp://localhost/~/jpashop 이렇게 네트워크 모드로 접속해야 한다.

JPA와 DB 설정, 동작확인

main/resources/application.yml

spring:
 datasource:
   url: jdbc:h2:tcp://localhost/~/jpashop
   username: sa
   password:
   driver-class-name: org.h2.Driver
 jpa:
   hibernate:
     ddl-auto: create
 properties:
   hibernate:
     # show_sql: true
     format_sql: true
logging.level:
 org.hibernate.SQL: debug

회원 엔티티

회원 리포지토리

테스트

  • 이 코드에서 @Transactional 이 없으면 트랜잭션이 없다는 에러가 난다. <- 엔티티 매니저를 통한 모든 데이터 변경은 항상 트랜잭션 안에서 일어나야 하기 때문이다!

  • @Transactional 이 테스트 코드에 있으면, DB를 롤백한다! -> 반복적인 테스트가 가능하다.

    • @Rollback(false)를 사용해 롤백하지 않고 커밋되도록 할 수 있다.
  • 같은 트랜잭션 안에서 엔티티를 저장하고 조회하면 영속성 컨텍스트가 똑같기 때문에, 같은 id(식별자)를 가지면 같은 엔티티로 식별된다.

- 쿼리 파라미터 로그 남기기

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
  • 참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.
  • 스프링부트의 장점 : Auto Configuration을 통해 라이브러리 정보를 다 세팅해준다.
profile
꾸준히 발전하는 개발자가 되자 !

0개의 댓글