Spring38 @Transactional 동작원리 Build Up Spring Aop 2가지 방식 JDK Dynamic Proxy 동적으로 생성하는 전략으로 타겟의 Interface 기준으로 Proxy를 생성한다. Reflection 이 비싸다는 특징이 있다. CGLIB Proxy 스프링 부트가 기본적으로 제공하는 방식이다. 바이트 코드를 조작하여 프록시 객체를 생성한다. 인터페이스가 아닌 상속을 한 타켓을 호출하게 된다. 동작과정 @Transcational을 메소드 또는 클래스에 명시하게 되면 Spring AOP를 통해 타겟이 상속하고 있는 인터페이스 또는 타겟을 상속한 프록시 객체가 생성된다. SpringAop를 사용하고 있기 때문에 @Transactional을 사용하고 있는 클래스의 메소드를 호출 할 때 유념해야 한다. → @Transactiona.. Spring 2022. 12. 23. 트랜잭션 주의 1. Inner Method에서의 동작 public class BooksImpl implements Books { public void addBooks(List bookNames) { bookNames.forEach(bookName -> this.addBook(bookName)); } @Transactional public void addBook(String bookName) { Book book = new Book(bookName); bookRepository.save(book); book.setFlag(true); } } Q. 해당 코드가 있고 addBook을 호출하는 Controller는 잘 호출될까? A. 해당 코드에서 발생할 수 있는 문제는 @Transaction AOP가 적용되지 않는것이다. .. Spring/주위주위 2022. 12. 23. EntityManger.persist()를 하고 ID값을 반환하는 과정 내가 알고 있던 persist() ,find() JPA의 EntityManget. 객체에서 find메소드는 EntityManget.find( $Object.class, Obejct.getId() ) 으로 사용한다. 그러므로 find를 할 때 1차 캐시를 조회하고 DB로 가져와 영속성 컨텍스트에 올린다. 하지만 em.persist()를 하면 쓰기지연에 보관되고 식별자 값은 알아서 만들어주는 줄 알고 있었다. Q. 보통 저장을 할때 em.persist($Object); 를 통해 Persistenc Context에 올려놓는다(1차 캐시) 그런데 만약 Repository에서 em.persist( $Obejct )를 진행하고 반환 값이 $Obejct.getId()라면? 식별자가 null인 경우는 어떻게 영속성 컨.. Spring/JPA 2021. 7. 2. [Unit Test] Mockito [ 마틴 엉클 밥 선생님의 단위테스트 말씀(F.I.R.S.T) ] Fast 단위테스트는 가능한 빠르게 실행되어야 한다.(실행에 있어 느린 테스트는 꺼리게 된다면 잘못 만든 테스트다) @SpringBootTest 어노테이션은 해당 애플리케이션의 모든 빈을 IoC Container에 등록하고 테스트를 진행하므로 테스트다 느려진다. Independent 단위테스는 객체의 상태, 메소드, 이전 테스트 상태, 다른 메소드의 결과 등에 의존해서는 안된다. 따라서 단위테스트는 어떠한 순서로 실행하더라도 성공해야 한다. 이전에 만든 테스트코드는 Repository들에 의존을 하고 있어 한 번 실행한 뒤에는 이미 중복된 ID가 DB에 존재하기 때문에 실패한다. (@Transacional 로 인해 DB를 롤백하기 때문에 .. Spring/spring Issue 2021. 7. 1. JPA JPA Java Persistence API 자바 ORM 기술에 대한 표준API다. ORM : 객체와 관계형 DB를 매핑한다는 뜻이다. 객체와 관계형 DB사이의 차이를 해결해주는 좋은 도구이다. JPA 장점 특정 구현 기술에 대한 의존도를 줄이고 다른 구현 기술로 손쉽게 교체할 수 있다. 왜 JPA를 사용하는가? 생산성 Mybatis, SQL매퍼를 사용하면 JDBC API 사용 코드를 많이 줄일 수 있지만 여전히 반복적인 CRUD를 작성해야 한다. 객체 중심적 설계에서 일정 Boundary에 도달하게 되면 데이터 중심 설계로 변질된다. JPA는 실행시점에 자동으로 SQL을 만들어서 실행한다. SQL 작성이 주가 아닌 어떤 SQL이 실행될지 생각만 하면된다. 유지보수 SQL을 직접 다루면 엔티티의 필드만 .. Spring/JPA 2021. 5. 10. 이전 1 2 3 4 5 ··· 8 다음