[TIL] 23.05.26 Spring Data JPA 복습 (1)

hyewon jeong·2023년 5월 26일
0

TIL

목록 보기
125/138

1. 프로젝트 설정

  1. 스프링이 바로 띄워지는 것이 아닌 그라들을 통해 띄워지면 [Test worker] 와 함께 느려진다.

    해결방법 : 설정- 빌드-그라들 - 그라들로 셋팅된값을 인텔리제이로 변경해주면 그라들을 통하지 않고 띄워져 빠르다.

  2. 롬복 설정 시

    설정 - annotation Processors 검색 - Enable annotation processing클릭 설정

리눅스 ls 명령어 옵션

자주 사용하는 옵션

  • l : 파일들을 나열할때 자세히 출력한다.
  • a : 경로안의 모든 파일을 나열한다.(숨김파일도 포함)
  • R : 위치한 디렉토리 하부 디렉토리의 파일까지 모두 출력한다.
  • h : 파일크기를 해석하기 편하게 출력한다.
  • r : 출력 결과를 내림차순으로 정렬한다.
  • t : 출력 결과를 파일이 수정된 시간을 기준으로 정렬한다.

ls -alrth 
숨김파일을 포함한 모든 파일을 나열할때 , 내림차순 정렬, 수정시간을 기준 정렬을 통해 자세히 출력한다. 
또한 파일의 크기를 해석하기 편하게 출력한다. 

2. application.yml 설정

spring:
  datasource:
  url: jdbc:h2:tcp://localhost/~/datajpa
  username: sa
  password:
  driver-class-name: org.h2.Driver
jpa:
  hibernate:
    ddl-auto: create
    # 객체를 보고 자동으로 테이블 생성 여부. 생성 - create, 비생성 - none
    # 테스트이기 때문에 create로 설정하며
    # 실제로는 none 으로 합니다. create이면 기존의 테이블을 전부 밀어버립니다.

  properties:
    hibernate:
      show_sql: true
      format_sql: true
    logging.level:
      org.hibernate.SQL: debug
    # 콘솔창에 파라미터 값을 보고 싶을때 주로 개발할때, 실전에서는 성능저하 가능성 고려하여 사용해야함. 하지만 보기 불편하여 좀더 깔끔하게 파라미터 값을 보여주기위해서는
    # 아래 코드는 주석 처리후
    # build.gradle 에
    # implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7' 외부라이브러리 추가하면 깔끔하게 파리미터값을 보여준다.
    #  org.hibernate.type: trace


  # show_sql : 옵션은 System.out 에 하이버네이트 실행 SQL을 남긴다.
  # org.hibernate.SQL : 옵션은 logger를 통해 하이버네이트 실행 SQL을 남긴다.

build.gradle 설정

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.12'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    //h2사용
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    //쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로,
    // 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.
    // 부트 3.0 에서는 지원하지 하도 별도의 파일 및 추가 설정해야함.
    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

4. SpringBootTest 시

  1. @Transation 어노테이션 사용
  • 스프링 jpa는 데이터의 변경사항을 트랜잭션을 통해 처리 되므로 @Transaction 을 달아 줘야 한다.
  • import org.springframework.transaction.annotation.Transactional;
    이것으로 import 하는것이 더 많은 것을 제공하므로 좋다.
  • 테스틑 통과 후 데이터베이스는 롤백이 되어 버린다 . 만약 데이터를 남기고 싶다면
    @Rollback(false) 어노테이션을 사용하면 롤백 되지 않은채 커밋되어 데이터를 볼수 있다. (개발에서는 빠르게 확인 할 수 있어 좋지만, 실전에서는 사용 금지!)
import com.example.datajpa.entity.Member;
import org.springframework.transaction.annotation.Transactional;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;

@SpringBootTest
@Transactional // 테스트가 끝난후 데이터를 롤백하기  위해
@Rollback(false) // 만약 롤백을 원하지 않을경우엔 이 어노테이션을 사용함, 실전에서는 ! 사용 노노!
class MemberJpaRepositoryTest {

  @Autowired
  MemberJpaRepository memberJpaRepository;

  @Test
  public void testMember(){ //public 생략가능
    Member member = new Member("memberA");
    Member savedMember = memberJpaRepository.save(member);
    Member findMember = memberJpaRepository.find(savedMember.getId());

    assertThat(findMember.getName()).isEqualTo(member.getName());
    assertThat(findMember.getId()).isEqualTo(member.getId());
    assertThat(findMember).isEqualTo(member);

  }
}

참고 : 김영한 강의 Spring Data Jpa

profile
개발자꿈나무

0개의 댓글