JPA

JPA 프로젝트 환경설정

ppirae 2022. 4. 17. 16:43

프로젝트 생성

롬복 적용

1. Prefrences plugin lombok 검색 실행 (재시작)

2. Prefrences Annotation Processors 검색 Enable annotation processing 체크 (재시작)

3. 임의의 테스트 클래스를 만들고 @Getter, @Setter 확인

 

IntelliJ Gradle 대신에 자바 직접 실행

최근 IntelliJ 버전은 Gradle로 실행을 하는 것이 기본 설정이다. 이렇게 하면 실행속도가 느리다. 다음과 같이 변경하면 자바로 바로 실행해서 실행속도가 더 빠르다.

Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle

Build and run using: Gradle -> IntelliJ IDEA

Run tests using: Gradle -> IntelliJ IDEA


라이브러리 살펴보기

  • 핵심 라이브러리
    • 스프링 MVC
    • 스프링 ORM
    • JPA, 하이버네이트
    • 스프링 데이터 JPA

View 환경 설정

요즘은 JSP 보다 thymeleaf 를 사용하는 추세이다.

thymeleaf의 장점은 HTML의 마크업을 해치지않고 사용(Natural templates)이 가능하다.

(요즘은 admin을 만들때 vue.js나 react를 사용한다.)

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!!");
        return "hello";
    }
}

retrun "hello"를 해도 templates/hello.html (view)이 열리는 이유는

스프링 부트의 thymeleaf가 viewName을 자동으로 매핑 해주기 때문이다.

resources:templates/ +{ViewName}+ .html

 

static 폴더 아래는 아예 렌더링을 거치지 않는 순수한 정적인 html 파일을 넣고,

templates 폴더 아래는 렌더링을 거치는 동적인 html 파일을 넣는다.

 

implementation 'org.springframework.boot:spring-boot-devtools'

//참고: spring-boot-devtools 라이브러리를 build.gradle에 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다.

인텔리J 컴파일 방법: 메뉴 build -> Recompile


H2 데이터베이스 설치

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

저번 스프링 강의때 설치하여 패스.


 

JPA와 DB 설정, 동작확인

사실 JPA 기본편을 듣지않고 활용편을 듣다보니 이해가 잘 안가는 부분이 많았는데

중요하다고 생각되는 부분 몇군데를 적어보았다.

 

엔티티 매니저를 통한 모든 변경은 항상 트랜잭션 안에서 이루어져야 한다.

@Transactional 을 추가하는데 springframework를 사용하는걸 추천 -> 사용할 수 있는 옵션이 많다.

@Transactional 어노테이션은 @Test 코드 내에 있으면 테스트가 끝난 후 롤백한다. -> 따라서 H2 DB에 내용이 없음

@Rollback(false) 어노테이션을 추가하면 테스트 결과를 DB에서 눈으로 볼 수 있다.

 

같은 영속성 컨텍스트 안에서는 id 값이 같으면 같은 엔티티로 인식한다. (1차 캐시 ?)

findMember == member 랑 같음.

 

쿼리 파라미터 로그 남기기 <- 이게 굉장히 좋다.

외부 라이브러리 사용 (p6spy)

https://github.com/gavlyukovskiy/spring-boot-data-source-decorator

스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'

 

개발단계에서는 로그를 남기는게 좋지만

운영 및 배포 단계에서는 생각해봐야 한다.

성능을 저하시키거나 병목현상이 발생할 수 있기 때문에

성능테스트 후 받아들일수 있는 정도면 남겨도되지만

보통 개발단계에서만 로그를 남기는 것을 권장한다.


//스프링 공부할 때 스프링 가이드를 적극 이용할 것.

https://spring.io/guides

 

Spring | Guides

 

spring.io


인프런 김영한님의 스프링 부트와 JPA 활용1을 듣고 작성한 글입니다.

https://inf.run/Q67u

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강

www.inflearn.com