SpringBoot Master/Slave DB 세팅 2
·
Spring
지난번 포스팅에서는 Master/Slave DB를 사용하기 위해 어떻게 세팅을 하는지에 대해 다뤘다. 이러한 세팅을 적용하면서 궁금증이 생겼다. 세팅을 하기 위해 자료를 찾은 것과 그동안 공부했던 것들을 바탕으로 대충은 어떻게 동작하는지는 알게되었으나 더 자세히 알고 싶어졌다. 그래서 이번 글에서는 이 세팅이 어떻게 동작하는지 알아보기위해 코드를 훑어보는 시간을 가져보려고 한다. 개인 공부 용으로 남겨 놓는거라 복잡합니다. 핵심 부분은 LazyConnectionDataSourceProxy에 있으니 그 부분만 보시는 것을 추천합니다. 실행할 로직은 간단한 조회 API 입니다. @RestController public class AppApi { private final AppService appService..
JPA findOne, getOne 차이점
·
Spring
JPA는 @Transactional 로 묶인 곳에서 Entity 를 관리해요. @Transactional 은 스프링에서 트랜잭션을 관리하는 방법 중 하나인데, 프록시를 이용해서 타겟 오브젝트를 감싸고 트랜잭션 시작/끝 부가기능을 앞뒤에서 제공해요. 때문에 외부에서 접근해야 프록시가 적용되기 때문에 @Transactional 이 적용된 자기 자신(this)의 다른 메소드를 호출하려면 그냥 하면 안되고 부가적인 작업이 필요해요. JPA는 데이터베이스로의 무분별한 접근을 막기위해 영속성 컨텍스트에서 엔티티를 관리해요. 엔티티를 관리할 때 Lazy 란 개념이 있어요. 어떤 엔티티의 모든 필드가 필요한것이 아닐 경우가 있어요. A가 B를 필드로 가지고 있는데, B엔티티의 모든 필드가 당장 필요한게 아니라 A엔티티..