Spring-Boot 기본 강의

Hallelujah·2025년 9월 5일

Spring Boot

목록 보기
6/6

build.gradle

// 캐쉬도 없애고 thymeleaf고치고 서버 다시 띄울때 시간 절약
implementation 'org.springframework.boot:spring-boot-devtools'

영속성 컨텍스트

package jpabook.jpashop;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.*;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {
    @Autowired MemberRepository memberRepository;

    @Test
    @Transactional
    // 테스트 끝나도 데이터 유지
    //@Rollback(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
        assertTrue(findMember.getId().equals(member.getId()));
        assertTrue(findMember.getUsername().equals(member.getUsername()));
        assertTrue(findMember.equals(member));
    }
}

assertTrue(findMember.equals(member)); 은 true이다.
왜냐하면 같은 transaction안에서 저장하고 조회하면 영속성 컨텍스트가 똑같다. 같은 영속성 컨텍스트에서는 아이디 값이 같으면 같은 엔티티로 식별한다.

sql쿼리 진행되면서 데이터 추적하기

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

    // data추적하기
    implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:${version}")

하지만 운영 단계에서는 제외할 필요가 있다-> sql로그 분석이니까

profile
개발자

0개의 댓글