@Entity를 붙이면 일어나는 일 - JPA 내부 동작 원리
·
Java
들어가며 지난 글에서는 JPA의 핵심 메커니즘인 영속성 컨텍스트(Persistence Context)에 대해 정리했다. 데이터가 메모리 상에서 어떻게 관리되고 플러시되는지를 이해했다면, 이제 근본적인 의문이 생긴다. 어떻게 @Entity 어노테이션 하나 붙였다고 DB와 연동될까?또한 우리는 흔히 스프링 데이터 JPA를 사용하며 인터페이스만 선언하고 구현체는 만들지 않는다. 그럼에도 save() 메서드는 동작한다. 이번 글에서는 어노테이션이라는 메타데이터가 컴파일과 런타임 과정을 거쳐, 어떻게 리플렉션과 프록시 기술을 통해 실제 DB 동작으로 이어지는지 그 내부를 파헤쳐본다. 어노테이션의 정체: 그냥 주석일 뿐이다어노테이션은 아무 의미 없는 주석과도 같다@Entity나 @Getter 같은 어노테이션을 붙이..
JPA 영속성 컨텍스트
·
Java
스프링 부트와 JPA를 사용하다 보면 개발이 편해진다. SQL을 직접 짤 필요도 없고, 그저 코드로 작성하면 데이터가 저장된다.MyBatis나 직접 SQL을 작성하던 시절에는 모든 것이 명확했을 것이다. INSERT 쿼리를 실행하면, 정확히 그 시점에 DB에 데이터가 들어갔다. 하지만 JPA는 다르다.분명 데이터를 수정했는데 update() 메서드를 호출하지 않아도 DB가 변경되고, save()를 호출했는데도 즉시 INSERT 쿼리가 나가지 않는다.이것을 이해하려면, 그리고 JPA를 이해하려면 영속성 컨텍스트를 알아야한다. 이번 글에서는 JPA가 왜 영속성 컨텍스트라는 중간 단계를 두엇는지, 이로 인해 얻는 이점은 무엇인지 알아보겠다. 영속성 컨텍스트란?해석하면 엔티티를 영구 저장하는 환경이다. JPA를..