Spring 3

[JPA] JPA를 제대로 이해하기 위한 영속성 컨텍스트 심층 분석 (flush, merge)

1. 영속성 컨텍스트의 정의 및 역할** 영속성 컨텍스트란? 영속성 컨텍스트란, 엔티티를 영구 저장하는 환경을 뜻한다. JPA에서는 데이터베이스와의 작업을 처리하기 위해서 엔티티 매니저(Entity Manager)를 사용하는데, 이 엔티티 매니저가 관리하는 범위가 바로 영속성 컨텍스트이다. 엔티티 매니저는 엔티티가 영속성 컨텍스트 환경에 저장되고 나면, JPA는 이 엔티티의 생명주기를 관리한다. 엔티티는 데이터베이스에 저장될 때 항상 ID 값으로 구분되어 저장하는데, JPA는 이 ID값을 사용해서 엔티티의 동일성을  보장한다. 즉 엔티티를 여러 번 조회하더라도, ID값이 같다면 해당 엔티티들은 모두 동일한 주소를 가지는 인스턴스가 된다. 이 매커니즘은 데이터의 일관성을 유지하는데 중요한 역할을 한다.  ..

Spring 2024.11.12

[JPA] Cascade.REMOVE와 orphanRemoval의 차이점

먼저 고아 객체가 뭔지 알아보자. 고아 객체고아 객체란, 특정 객체가 메모리 상에 존재하지만, 어떤 참조 변수나 포인터에서도 접근할 수 없는 상태가 되어 더 이상 유용하게 사용할 수 없는 객체를 말한다.예를 들어, 리뷰를 달 수 있는 사이트에서 한 회원이 리뷰를 작성했다고 가정하자. 그리고 만약 회원이 얼마 지나지 않아 그 사이트에서 탈퇴해 없어진 상태가 됐을 때, 그 회원이 작성했었던 리뷰는 더이상 접근할 수 없는 상태가 되는데, 이런 경우를 고아 객체라고 한다.  @Entity@Getter@NoArgsConstructorpublic class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private S..

Spring 2024.11.09

[JPA] JPA Entity를 팩토리 메서드로 생성하는 이유

최근에 JPA를 사용해서 회원가입 기능을 포함한 웹사이트를 개발해보았다. 오늘은 내가 받았던 피드백을 바탕으로, 어떻게 정적 팩토리 메서드가 코드를 리팩토링 해주는지에 대해 알아보려고 한다. 먼저 정적 팩토리 메서드(static factory method)란 인스턴스 생성을 위한 정적 메서드를 뜻하는데, 기본적으로 new 키워드를 사용해서 직접 객체를 생성하는 대신, 클래스 내에 정의된 정적 메서드를 통해 객체의 인스턴스를 반환받는 방식을 의미한다.  한번 예시로 정확하게 어떤 것을 의미하는지 알아보자. 회원가입 기능을 구현하기 위해서 기본적인 코드를 작성했다고 가정하자.Controller에서 사용자 정보를 검증하는 로직을 거쳐서 해당 정보를 Service에 전달해 줬을 것이고, Service 내부에서는..

Spring 2024.10.29