오늘은 JPA의 더티 체킹과 머지의 차이점에 대해서 공부하였습니다. 이전에 JPA를 공부하면서 더티 체킹에 대해서는 알고 있었으나, Merge에 대해서는 처음 들어보았습니다. 그래서 Merge가 정확히 어떤 것을 의미하고, 또 어떠한 특징을 가지고 있는지에 대하여 알아보도록 하겠습니다. Dirty Checking 먼저, JPA를 공부하면서 제일 많이 접하는 단어인 더티 체킹입니다. 더티 체킹의 경우, 영속성 컨텍스트가 관리하는 Entity의 상태를 관찰하여 만약 Entity에 변화가 발생하였을 경우, Update 쿼리문을 통하여 Entity의 상태를 데이터베이스에 반영해주는 역할을 수행합니다. Merge JPA에서 사용하는 Merge의 경우, 'Entity의 내용을 수정한다'는 점에서는 더티 체킹과 매우 유사합니다. 즉, Merge 역시 데이터베이스에 저장되는 Entity의 내용을 변경시키는 기능을 수행합니다. 그러나, 동작하는 방식에서 차이점이 드러납니다
오늘은 JPA의 프록시에 대해서 알아보았습니다. 프록시 배경 프록시가 무엇인지에 대해서 알기 위해서는 우선 프록시가 어떠한 배경에서 탄생하였는지 확인해볼 필요가 있습니다. 일단 예를 들어서 설명하기 위한 Entity를 만들어 보겠습니다. 다음처럼 팀의 대한 정보가 담겨져있는 Team Entity와 특정 Team에 속한 Member Entity를 만들었습니다. Member의 경우, Team에 속하였기 때문에 Team과 연관 관계를 맺고 있음을 알 수 있습니다. 우리는 Member Entity를 생성하여 저장하기 위해서는 다음의 코드를 통하여 저장할 것입니다. 다음처럼 별도의 Team 객체와 Member 객체를 만든 뒤, 두 객체 사이의 연관 관계를 맺어준 뒤에 영속성 컨텍스트에 persist해줌으로써 데이터 베이스에 저장할 수 있습니다.  조인 전략 2) 단일 테이블 전략 3) 구현 클래스마다 테이블을 생성하는 전략 위 3가지의 전략을 알아보기 전에, 예시로 설명하기 위한 클래스 간의 상속 관계에 대하여 대충 설명하고 가겠습니다. ![](https://velog.velcdn.com/images/chrkb1569/post/95a174ce
이제까지는 JPA를 사용하면서, JPA가 영속성 컨텍스트를 사용한다는 사실은 알고 있었으나, 정작 영속성 컨텍스트가 무엇이고, 어떠한 역할을 수행하는지에 대해서는 알지 못하고 있었습니다. 그래서 오늘 영속성 컨텍스트의 개념과 기능들에 대해서 자세히 알아보는 시간을 가졌습니다. EntityManager & EntityManagerFactory 일단 영속성 컨텍스가 어떤 것이냐에 대하여 설명하기 전에, EntityManager와 EntityManagerFactory가 무엇인가에 대해서 알고 넘어가야합니다. 직설적으로 해석해보면 Entity를 관리해주는 대상이라는 것을 확인할 수 있을텐데, 일단 대충 그렇게 알고 확인해보면 될 것 같습니다. 다음처럼 Maven을 사용하여 프로젝트를 생성하였으며, H2를 데이터 베이스로 활용하였습니다. 여기서 중요한점이 저는 자바 11을 사용하여 프로젝트를 빌드하였는데, 자바 11에서부터 javab를 지원하지 않는다고합니다. 따라서 자바