Spring Boot

[실전! 스프링 부트와 JPA 활용1] 01. 프로젝트 환경설정

kittity 2024. 7. 28. 00:04

 

실전! 스프링 부트와 JPA 활용1 강의를 듣고 정리한 내용입니다.
➡️ 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard

➡️ 코드 : https://github.com/leehanna602/spring-boot-jpa

 

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

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

www.inflearn.com

 

5. JPA와 DB 설정, 동작확인

Tip) TDD 템플릿 만들기

  • ctrl + alt + s ⇒ Settings
  • Live Templates 생성
    • Abbreviation : tdd
    • Template text
      @Test
      public void $NAME$() throws Exception {
          //given
          $END$
          //when
          
          //then
      
      }
    • define > java 설정
💡참고
https://www.inflearn.com/questions/110167/인텔리j-tdd-라이브템플릿-생성하는-방법-입니다

 

TestCode

  • @Transactional 어노테이션이 테스트 케이스에 있으면, 테스트 종료후 롤백 → DB에 데이터 생기지 않음
  • 만약, DB에서 확인하고 싶다면.. @Rollback(value = false) 추가
    @Transactional
    @Rollback(value = false)

 

영속성 컨텍스트에서 식별자가 같으면 같은 엔티티이다

  • 코드
    package jpabook.jpashop;
    
    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.annotation.Rollback;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.transaction.annotation.Transactional;
    
    import static org.assertj.core.api.Assertions.*;
    import static org.junit.Assert.*;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MemberRepositoryTest {
    
        @Autowired
        MemberRepository memberRepository;
    
        @Test
        @Transactional
        @Rollback(value = false)
        public void testMember() throws Exception{
            // given
            Member member = new Member();
            member.setUsername("memberA");
    
            // when
            Long saveId = memberRepository.save(member);
            Member findMember = memberRepository.find(saveId);
    
            // then
            assertThat(findMember.getId()).isEqualTo(member.getId());
            assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
            assertThat(findMember).isEqualTo(member); // true
            /* 영속성 컨텍스트에서 식별자가 같으면 같은 엔티티 */
            System.out.println("findMember == member: " + (findMember == member));
        }
    
    
    }

 

쿼리 파라미터 로그 남기기

  • 스프링 부트 2.x, hibernate5
    • org.hibernate.type: trace
  • 스프링 부트 3.x, hibernate6
    • org.hibernate.orm.jdbc.bind: trace
  • application.yml logging 설정
    logging:
      level:
        org.hibernate.SQL: debug
        org.hibernate.orm.jdbc.bind: trace
  • 외부 라이브러리 사용  
  • 참고
    • 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용.
    • 개발 단계에서는 편하게 사용해도 된다.
    • 하지만 운영에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.

 

728x90