본문 바로가기

서버/JPA3

AbstractRoutingDataSource 를 통한 DB replication 환경 설정과 Spring Data JPA에서의 Transactional 이슈 해결을 위해 스프링 구현 코드를 까보는 (약간은 바보 같은) journey.. 문제 상황 Spring Data Jpa에서 메서드 명만 작성하면 알아서 jpql을 만들어내주는 신기한 기능을 많이들 써봤을 것이다. 나 또한 그랬고, 이번에도 어김없이 사용하고 있었다. 다만, 현재 하고 있는 프로젝트에서는 현재 트랜잭션이 read-only일 시에는 read-only DB, 데이터 변경 관련 트랜잭션일 경우에는 write 전용 DB를 바라보게 하고 있었다. (전형적인 DB replication 구조) 이때 클라이언트 단에서 post로 데이터를 작성하고, 직후 get을 통해 데이터를 조회할 시 read DB와 write DB의 동기화 시간 차이로 인한 문제로 not found exception이 발생했고 새로고침하면 동기화가 되어 다시 데이터가 정상적으로 조회되는 상황이었다. 해결? 사실 .. 2023. 10. 22.
[JPA] 단방향, 양방향 연관관계 매핑과 주의점 *본 게시글은 김영한님의 자바 ORM JPA 표준 책을 보고 이해한 내용을 바탕으로 정리한 글입니다. 엔티티들은 대부분 다른 엔티티와 연관관계를 가지고 있다. sql문을 사용해서 테이블에 접근할 때는 외래 키를 사용하여 join을 하기 때문에 어떤 방향으로든 테이블을 탐색할 수 있다. 그러나 객체는 참조를 사용해서 관계를 맺는다. 즉, 서로 setter 혹은 생성자를 통해 서로의 참조를 넘겨주어야 한다. ORM에서 가장 중요하고 또 어려운 객체의 연관관계 매핑에 대하여 알아보자. (해당 포스팅에선 우선 이해를 위해 다대일 관계를 기반으로 설명하겠습니다.) 단반향 연관관계 JPA에서 연관관계를 매핑할 때는 따로 Id를 사용하지 않는다. Id를 사용하려면 아래와 같이 외래 키 식별자를 직접 다루어야 하고 이.. 2022. 10. 31.
[JPA] 영속성 컨텍스트 *본 게시글은 김영한님의 자바 ORM JPA 표준 책을 보고 이해한 내용을 바탕으로 정리한 글입니다. JPA가 제공하는 기능은 크게 엔티티와 데이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 매핑한 엔티티를 엔티티 매니저를 통해 영속성 컨텍스트와 데이터베이스에 CRUD(create, read, update, delete)하는 등 엔티티와 관련된 모든 일을 처리한다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저는 엔티티 매니저 팩토리를 통해 만들어낼 수 있다. 엔티티 매니저 팩토리 생성은 비용이 아주 많이 들고, 엔티티 매니저 팩토리는 애플리케이션을 개발할 때 굳이 여러 개 있을 필요가 없기 때문에 하나만 생성해야 한다. 즉, 싱글톤 객체로 관리해야 한다. //영.. 2022. 10. 29.