✅ JPA 프록시란?💡여기서 설명하는 부분은 hibernate의 proxy에 관한 내용이다 객체가 객체 그래프로 연관된 객체들을 탐색할때, 데이터베이스에 저장되어 있는 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라 실제 사용하는 시점에 데이터베이스에서 조회(지연 로딩)할 수 있게 해주는 기술이다. 프록시 객체는 실제 클래스를 상속 받아서 만들어진 겉모양만 똑같은 가짜 객체다. 여기서 사용된 프록시는 타겟에 대한 접근 제어로 사용되었다. cross cutting concern으로 사용된 것은 아니다. 🔻프록시 구조실제 클래스를 상속 받아서 만들어진다.실제 클래스와 겉모양이 같다.사용하는 입장(Client)에서 진짜 객체인지 프록시 객체인지 알지 못하고 항상 진짜 객체인 것처럼 사용한다. 🔻프록시 위..
✅ 상속관계 매핑 객체지향에는 클래스끼리 상속관계가 존재하지만 데이터베이스에서 테이블 간의 상속관계는 지원하지 않는다. 그 대신 데이터베이스의 슈퍼타입, 서브타입 관계라는 모델링 기법을 통해서 객체의 상속관계를 표현할 수 있는 방법이 있다. Item 테이블이 슈퍼타입, Album, Movie, Book 테이블들이 서브타입으로 모델링된 것이다. 🔹조인 전략 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") // default : DTYPE @DiscriminatorValue("value") 부모 타입과 자식 타입을 모두 테이블로 만드는 전략이다. 이후 자식 타입 조회 시 조인을 통해 조회하는 방식으로 사용..
⚙️ 학습 환경Intellij IDEh2 DB : 2.2.222hibernate : 5.6.15.Final 💡JPA의 연관관계 매핑은 객체의 참조와 테이블의 외래 키를 매핑하는 것에서의 간극의 차이를 해결하고, 객체를 객체 답게 사용하기 위한 방법이다. 현재까지 데이터지향적인 방법으로 객체를 설계했다면 객체를 객체답게 사용하기 위한 방법을 매핑으로 해결한다. 연관관계를 매핑할 때는 다음 3가지를 고려해서 매핑해야 한다. 👉 회원과 팀의 관계가 있을 경우를 예시로 들었다.방향(Direction)단방향 : [회원 → 팀] or [팀 → 회원], 둘 중 한 쪽만 참조하는 것을 단방향 관계라 한다 양방향 : [회원 → 팀, 팀 → 회원], 양쪽 모두 서로 참조하는 것을 양방향 관계라 한다 다중성(Multipli..
💡"Auto Increment 전략"은 데이터베이스에서 테이블의 기본 키(primary key) 값을 자동으로 증가시키는 전략이다. 기본 키 값은 보통 숫자로 표현되며, 각 새로운 레코드(행)이 추가될 때마다 자동으로 증가한다. ✅ IDENTITY 전략IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임하는 전략이다. 데이터베이스가 기본 키를 자동으로 생성해준다. Entity Classpackage jpabook.start; import javax.persistence.*; @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String userName; ..
✅ 더티체킹이란?Dirty Checking은 영속성 컨텍스트(Persistence Context)에서 엔티티(Entity)의 변경 사항을 자동으로 감지하고, 변경된 내용만을 데이터베이스에 동기화하는 기능이다. 이는 영속성 컨텍스트에서 Entity를 스냅샷으로 상태 변화를 추적하고 있기 때문에 가능하다. 💡—파일시스템의 Dirty Checking JPA의 Dirty Checking의 개념은 파일 시스템의 Dirty Checking의 개념에서 나왔다. 디스크에 데이터를 저장하는 것은 많은 리소스 비용이 발생하기 때문에 파일 시스템은 메모리에 변경된 데이터를 모아서 디스크에 일괄 쓰거나 적절한 시간에 쓰도록 조절함으로써, 비용이 많이 드는 디스크 쓰기 작업의 수를 줄일 수 있다. @Slf4j @Required..
✅ 영속성 컨텍스트란?우리말로 간단하게 이야기하면 ‘엔티티를 영구 저장하는 환경’이라는 뜻으로 번역하고 있다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍트에 인티티를 보관하고 처리한다. EntityManagerFactory(엔티티 매니저 팩토리):EntityManagerFactory는 EntityManager 인스턴스를 생성하고 관리하는 역할을 한다. 일반적으로 JPA 애플리케이션이 시작될 때 하나만 생성된다.EntityManagerFactory는 어떤 영속성 유닛(보통 persistence.xml 파일에 정의됨)을 사용할 것인지와 관련 설정을 제공하여 생성된다. EntityManager(엔티티 매니저):EntityManager는 엔티티에 대한 CRUD(Create, Rea..
✅ Dialect란? Dialect는 방언이라는 뜻이다. SQL의 표준을 지키지 않거나 특정 데이터베이스에서만 사용하는 기술을 dialect라고 한다. 다른 데이터베이스 시스템에서 찾을 수 없는 고유한 기능, 확장 및 문법을 포함한다. ➡️ 예를 들면데이터 타입 : 가변 문자 타입으로 MySQL은 VARCHAR, 오라클은 VARCHAR2를 사용한다.다른 함수명 : 문자열을 자르는 함수로 SQL 표준은 SUBSTRING()을 사용하지만 오라클은 SUBSTR()을 사용한다페이징 처리 : MySQL은 LIMIT를 사용하지만 오라클은 ROWNUM을 사용한다 JPA 구현체들은 이런 문제를 해결하려고 다양한 데이터베이스 방언 클래스를 제공한다. 이로써 특정 데이터 베이스의 의존적인 방언 처리는 JPA를 사용하게 되..
✅ JPA란? JPA는 "Java Persistence API"의 약자로, Java 언어를 사용하여 객체 지향 프로그래밍과 관계형 데이터베이스 간 상호 작용을 지원하는 자바 표준 스펙이나 API이다. JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다. 애플리케이션과 JDBC 사이에서 동작한다. #Spring Data JPA와는 다르다. Spring Data JPA를 JPA를 조금 더 편리하게 사용하기 위해 확장한 기술이다. 🔹ORM 기술이란?ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. ORM은 SQL문의 수행 결과를 매핑하는 것이 아닌 DB 테이블의 데이터 그 자체와 객체를 매핑한다. 개발자가 직접 SQL을 작성..
✅ 메서드 시그니처(Method signature)란?Java에서 메서드 시그니처는 메서드의 정의에서 메서드 이름과 매개변수 리스트의 조합을 말합니다. 메서드 이름과 매개변수 리스트가 중요한 이유는 메서드의 오버로딩과 메서드 시그니처 추상화 때문입니다. 메서드 시그니처 추상화는 나중에 배울 개념이므로 간단하게 오버로딩 때문에 중요하다고 이해하고 있으면 될 것 같습니다. Java 컴파일러는 메서드 이름과 매개변수 리스트를 통해 메서드 간의 차이를 식별한다. public class MyClass { public int calculateSum(int a, int b) { return a + b; } public void printMessage(String message) { System.out.println(..
🔥앞에서 람다를 왜 사용하고, 기본적으로 어떻게 사용하는지 살펴보았습니다. 여기서는 람다 표현식을 더 자세하게 알아보겠습니다. ✅ Syntax of Lambda Expressions➡️ 람다 표현식은 다음과 같은 구성 요소로 이루어져 있습니다.() 괄호로 둘러싸인 콤마로 구분된 formal 파라미터의 리스트CheckPerson.test 메서드는 Person 클래스의 인스턴스를 나타내는 p라는 하나의 파라미터를 가지고 있습니다.Note: 람다 표현식에서는 파라미터의 데이터 타입을 생략할 수 있습니다. 또한, 하나의 파라미터만 있는 경우에는 괄호를 생략할 수도 있습니다. 예를 들어, 다음 람다 표현식도 유효합니다.p -> p.getGender() == Person.Gender.MALE && p.getAge(..