Spring

JPA와 DB 설정, 동작확인

date
Jun 28, 2023
slug
스프링부트-JPA-활용1-1
status
Public
tags
실전! 스프링 부트와 JPA 활용 1
author
summary
[실전! 스프링 부트와 JPA 활용 1] 섹션 1 강의 정리
type
Post
thumbnail
updatedAt
Jun 28, 2023 03:25 PM
category
Spring
김영한
인프런

🍯 꿀팁


[1]. 단축키


  • cmd + opt + v

[2]. devtools


devtools


dependencies { implementation 'org.springframework.boot:spring-boot-devtools' }
  • 정적 렌더링 페이지 변경 일어날 때 마다 서버 restart 안해줘도 됨
    • 단축키 : 변경 파일에서 cmd + shift + F9 (mac)
 

[3]. 커스텀 라이브 템플릿


  • [custom command] + tab → 커스텀 코드 생성
    • ex) tdd + tab @Test public void $NAME$() throws Exception { //given $END$ //when //then } 코드를 생성해준다.

설정


  1. Settings → Live Template → 커스텀 그룹 추가
 

🔧 Annotations


  • @PersistenceContext : 해당 어노테이션이 있으면 EntityManage를 주입해준다.
  • @Transactional
    • @Test 와 함께 사용시에 테스트 수행 후 DB를 롤백해준다.
      • @Rollback(false) 를 달면 롤백 하지 않게 설정할 수 있다.
       
 
 

📝 강의 정리


[1]. 커맨드와 쿼리를 분리해라


public Long save(Member member){ em.persist(member); return member.getId(); } /** public Member save(Member member){ em.persist(member); return member; }**/
 

📌 Member가 아닌 Long을 리턴하는 이유?

  • 멤버를 저장하는 과정이 사이드 이펙트를 일으키는 커맨드이기 때문에 리턴 값을 만들지 않는다.
 

[2]. em 을 통한 모든 데이터 변경은 트랜잭션 내에서 이뤄져야 한다.


@Test //@Transactional @DisplayName("Member Test") public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("7unho"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); }
  • @Transactional 어노테이션 없이 해당 테스트 코드를 수행하면 에러가 발생한다.
    • TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
 

📌 같은 영속성 컨텍스트 내에서 식별자가 같다면 같은 엔티티로 인식한다.

  • Assertions.assertThat(findMember).isEqualTo(member) == True
    • 같은 트랜잭션 안에서 엔티티를 저장하고 조회 → 같은 영속성 컨텍스트 안에서 이뤄짐
      • → 영속성 컨텍스트 안에서 ID 값이 같다면, 같은 엔티티 값을 가진다.
         

📎 출처