일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 우테코
- 스프링
- Spring Framework
- git
- 우아한 테크코스
- 패스트캠퍼스
- 코딩
- rebase
- Jackson
- 프로그래머스
- Programming
- VCS
- 깃
- 기술면접
- 프로그래밍
- 우테코 프리코스
- 코딩테스트
- 기술블로그
- multi-thread
- Python
- 버전관리
- 개발자
- django
- 깃허브
- 파이썬
- utterances
- 우아한 형제들
- github
- 배달의 민족
- 자바
- Today
- Total
목록Spring (2)
아둥바둥 개발일기
1. JPA, 하이버네이트 엔티티가 영속성 컨텍스트에 관리되면 1차 캐시부터 변경 감지까지 얻을 수 있는 혜택이 많다. 하지만 영속성 컨텍스트는 변경 감지를 위해서 스냅샷 인스턴스를 보관하므로 더 많은 메모리를 사용하는 단점이 존재한다. flush 호출하지 않음 dirty checking(변경 감지)하지 않음 readOnly=true 옵션을 주면 스프링 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정한다. 이렇게 하면 강제로 플러시를 호출하지 않는 한 플러시가 일어나지 않는다. 따라서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않아서 엔티티의 등록, 수정, 삭제가 동작하지 않는다. flush 할 때 일어나는 스냅샷 비교와 같은 무거운 로직을 수행하지 않으므로 성능이 향상된다. ..
스프링에서 @Transactional은 AOP로 구현한다. 스프링의 프록시 매커니즘에는 두 가지 - JDK Dynamic Proxy, CGLIB Proxy 가 있다. 스프링부트에서는 CGLIB Proxy가 default로 사용된다. JDK Dynamic Proxy 인터페이스에 대한 Proxy만을 지원, 클래스에 대한 Proxy를 지원할 수 없다. Target 클래스에 Proxy를 적용할 때 PointCut을 통해 Advice되는 메서드를 지정한다. JDK Proxy를 사용하면 Target 클래스에 대한 모든 메서드 호출(PointCut으로 지정하지 않은 메서드도)이 일단 JVM에 Intercept된다(이 때 reflection이 사용된다). 그 후에 메서드의 Advice 적용 여부를 판단하게 된다. 이는..