스프링

개발/JPA

Spring Bean으로 등록된 EntityManager

자바 동적 프록시 기술을 알고 읽으시는 게 좋습니다!!! JPA를 처음에 배우면 엔티티 매니저는 여러 스레드가 동시에 접근하므로 스레드 간 공유하면 절대 안된다고 학습한다. 그러나 스프링 부트 애플리케이션을 돌려보면 처음에 엔티티 매니저가 스프링 빈으로 등록되는 것을 확인할 수 있다. '스프링 부트 자동 구성을 통해 엔티티 매니저가 스프링 빈으로 등록, 즉 싱글톤으로 사용이 되는 거 같아' 위와 같은 의문점이 들었고, 이에 관련해서 구글에 찾아보기 시작했다. 결론을 말하면 스프링 빈으로 등록되는 것은 엔티티 매니저 가짜 객체고 실제 애플리케이션에서 로직이 수행될 때 진짜 엔티티 매니저가 사용된다는 것이다. 이러면 쓰레드 세이프하다고 말할 수 있다. 단순히 그렇구나 하고 넘어간 것을 오늘은 눈으로 확인해보..

독서/토비의 스프링

토비의 스프링 Vol.1 6장 AOP

포스팅 시작하겠습니다. 6.1 트랜잭션 코드의 분리 지난 챕터에서 우리는 서비스 추상화를 이용해 UserService에서 특정 트랜잭션 기술에 종속적이지 않은 깔끔한 코드를 만들었다. 그러나 여전히 비즈니스 로직을 수행해야만 하는 UserService에 트랜잭션 기술 코드가 들어있다. 이를 해결하기 위해 데코레이터 패턴을 적용했다. UserService 인터페이스를 만들고 이를 구현한 비즈니스 로직을 수행하는 UserServiceImpl 클래스와 트랜잭션을 수행할 UserServiceTx 구현클래스를 작성했다. UserServiceTx가 UserServiceImpl을 인스턴스 변수로 받아 트랜잭션 경계 설정 코드를 진행하고 비즈니스 로직 관련 부분은 UserServiceImpl 메서드를 호출하면서 위임한..

독서/토비의 스프링

토비의 스프링 Vol.1 5장 서비스 추상화

실습 코드는 아래에서 확인 가능합니다. https://github.com/happysubin/book-study/commits/main GitHub - happysubin/book-study Contribute to happysubin/book-study development by creating an account on GitHub. github.com 5.1 사용자 레벨 기능 추가 이전 시간까지는 UserDao에서 User 객체를 단순히 CRUD 하는 작업만 가능했는데, 이번 파트 부터는 특별한 비즈니스 로직을 추가했다. UserDao에서 User 객체를 모두 가져와서 일정 방문 횟수와 추천 수를 넘기면 User 객체의 레벨을 올리는 로직이다. 레벨을 나타내기 위해 Enum을 사용했다. 이번 파트에서..

독서/토비의 스프링

토비의 스프링 Vol.1 2장 테스트

2장은 테스트에 관련된 내용입니다. 실습은 아래에서 확인할 수 있습니다. https://github.com/happysubin/book-study/commit/d31fcf6587d719e39cb28e62abc7ff7634b7c179 Feat: 토비의 스프링 2장 학습 마무리 · happysubin/book-study@d31fcf6 Show file tree Showing 4 changed files with 127 additions and 33 deletions. github.com 스프링이 제공하는 가장 중요한 가치는 객체지향과 테스트다. 이번 2장에서는 스프링이 제공하는 가장 중요한 가치 중 하나인 테스트에 대해 살펴본다. 애플리케이션은 요구사항이 들어오면서 변하고 복잡해진다. 테스트 코드를 잘 작성..

Debin
'스프링' 태그의 글 목록