본문 바로가기

JAVA41

[JPA] JPA 프록시 정리 ≣ 목차해당 글을 읽기전에 프록시 객체에 대해서 알고 오시는 걸 추천합니다.  JPA에서는 왜 프록시 객체를 사용할까??JPA에서는 프록시 객체를 사용하여 객체지향의 장점을 살리면서 관계형 데이터베이스의 성능 문제를 해결합니다. 객체는 연관된 객체들을 자유롭게 탐색하고 조회할 수 있지만, 관계형 데이터베이스에 매핑된 엔티티 객체는 연관된 테이블의 데이터를 조회하기 위해 JOIN을 사용해야 하므로 자유도가 떨어집니다.여기서 '자유도가 떨어진다'는 것은, 객체지향에서는 객체 간의 관계를 통해 쉽게 데이터를 탐색할 수 있지만, 관계형 데이터베이스에서는 연관된 테이블의 데이터를 조회하기 위해 JOIN 쿼리를 작성해야 하기 때문에 자유도가 떨어진다는 의미입니다. 추가적으로, 실제로 연관된 테이블을 사용하지 않는 .. 2024. 11. 14.
[Spring + JPA] JPA 상속관계 매핑 ≣ 목차상속관계 매핑관계형 데이터베이스는 상속 관계 기능이 없지만, 슈퍼타입-서브타입 관계를 통해 유사한 개념을 구현할 수 있습니다. 슈퍼타입은 공통 속성(칼럼)을 가진 상위 개념을 나타내고, 서브타입은 슈퍼타입 속성을 공통적으로 가지고 개별적인 속성(칼럼)을 가질 수 있습니다. 예를 들어, '직원'이라는 슈퍼타입이 있을 때, '인사 부서'와 '마케팅 부서'는 각각의 서브타입으로, 서브타입들은 '직원'의 속성을 가지면서 각기 다른 특성을 가질 수 있습니다.  이제부터 슈퍼 타입을 부모 테이블으로 부르고, 서브 타입을 자식 테이블이라고 말하겠습니다.  상속관계 매핑 전략1. 조인전략 - JOINED 조인 전략은 부모 클래스와 자식 클래스 각각에 대해 별도의 테이블을 생성하고, 이들 테이블 간의 관계를 조인.. 2024. 11. 12.
[Spring + JPA] Entity 연관 관계 매핑 - 관계 유형 ≣ 목차 연관관계 매핑 시 고려사항 관계 유형관계 유형은 데이터베이스 입장에서 필요한 개념으로 적절한 매핑으로 데이터 무결성과 일관성을 유지할 수 있습니다. 관계 유형에 따라 일대일, 일대다, 다대다와 같은 다양한 방식으로 객체와 테이블 간의 연관성을 정의할 수 있으며, 이는 쿼리 성능, 데이터 접근 방식, 객체 간의 상호작용에 영향을 미칩니다. 그리고 관계 유형에 따라 외래키 관리와 연관관계 주인의 설정이 달라지므로, 잘못 설정할 경우 JPA가 비효율적이거나 작성할 수 있습니다. 단방향/양방향테이블은 외래키 하나로 양쪽에서 조회가 가능하므로 단방향과 양방향으로 구분할 필요가 없습니다. 반면 객체는 참조용 필드가 있는 쪽으로만 조회가 가능해서 한쪽 엔티티에서만 다른 엔티티를 참조하면 단방향, 두 엔티티가.. 2024. 11. 8.
[Spring + JPA] JPA 연관관계 정리 #2 - 양방향 매핑 시 주의사항 ≣ 목차양방향 매핑 시 가장 많이하는 실수양방향 연관관계를 설정할 때 아래와 같이 주의해야 하는 점이 있습니다.양방향 연관관계 주인 객체 필드에 값을 설정하지 않는 경우양방향 연관 관계 설정 시 무한 루프를 주의 주인 객체에 필드 값을 설정하지 않는 경우 아래 코드는 Member 객체(테이블)에 주인 필드가 존재하는 상황입니다.tx.begin(); try { Member2 member = new Member2(); member.setUserName("member1"); member.setAge(19); em.persist(member); Team team = new Team(); .. 2024. 11. 7.
[Spring + JPA] JPA 연관관계 정리 #1 ≣ 목차DB와 객체에 패러다임 불일치JPA 연관 관계를 알아보기 전에 객체와 데이터베이스 테이블 간의 차이점을 살펴보면, 객체는 참조를 통해 연관된 객체를 찾는 반면, 테이블은 외래 키를 사용하여 연관된 테이블을 찾습니다. 이렇게 객체와 테이블 사이에는 패러다임 불일치가 발생합니다.  객체를 테이블 위주로 구성@Table(name = "Member")@Entitypublic class Member2 { @Column(name = "TEAM_ID") private Long teamId; // 테이블 패러다임에 맞춰서 구성}Team team = new Team();team.setName("TeamA");em.persist(team);Member2 member = new Member2();membe.. 2024. 11. 6.
[Spring + JPA] JPA 애노테이션 정리 ≣ 목차테이블 관련@Entity JPA를 사용해서 테이블과 매핑할 클래스를 의미하며, 기본 생성자가 무조건 있어야 됩니다.  @Table 속성기능기본값 name  매핑할 테이블 이름 지정 및 매핑객체 이름을 사용 catalog  데이터베이스 catalog 매핑  schema  데이터베이스 schema 매핑  uniqueConstraints DDL 생성 시에 유니크 제약 조건 생성 @Table( name = "table_name", // 매핑할 테이블 이름 변경 catalog = "my_catalog", // 데이터베이스 catalog 매핑 schema = "my_schema", // 데이터베이스 schema 매핑 uniqueConstraints =.. 2024. 11. 3.
[JPA] 영속성 컨텍스트 개념 정리 ≣ 목차 영속성 컨텍스트를 알아보기 전에, 엔티티 매니저 팩토리와 엔티티 매니저에 대해 간단히 설명하겠습니다.  엔티티 매니저 팩토리엔티티 매니저 팩토리는 엔티티 매니저 인스턴스를 생성을 담당하는 객체입니다. 애플리케이션의 수명 동안 재사용되며, 애플리케이션이 시작될 때 한 번만 생성하는 것이 좋습니다. 기본적으로 요청마다 새로운 엔티티 매니저를 생성합니다.  엔티티 매니저엔티티 매니저는 데이터베이스와 상호 작용하는 역할을 합니다. 요청이 있을 때마다 새로운 엔티티 매니저 인스턴스가 생성되어 데이터베이스와의 연결을 관리합니다. 이 엔티티 매니저는 내부적으로 데이터베이스 커넥션을 사용하여 다음과 같은 CRUD 작업을 수행합니다.  영속성 컨텍스트(Persistence Context)애플리케이션과 DB 사이.. 2024. 11. 1.
[Java] uses unchecked or unsafe operations 에러 해결 해당 오류를 몇 번 경험해본 적이 있는데, 문득 자바에서는 해당 오류를 경고 메시지만 보여주는 이유가 궁금해져서 자세히 알아보려고 합니다. 1. uses unchecked or unsafe operations. 에러 원인해당 경고는 제네릭이 필요한 자료형이나 객체를 사용할 때, 제네릭 자료형을 명시하지 않아서 발생합니다. 이로 인해 타입 안전성이 보장되지 않고 ClassCastException오류가 발생할 수 있습니다. 2. 해결 방법해결 방법은 간단합니다. 제네릭이 필요한 부분에 적절한 자료형을 명시해 주시면 해당 오류를 쉽게 해결할 수 있습니다. -----------------------해결 전 ----------------------@SpringBootApplicationpublic class Ge.. 2024. 10. 14.
JDK 동적 프록시와 CGLIB ≣ 목차데코레이터 패턴과 프록시 패턴의 문제데코레이터 패턴과 프록시 패턴은 객체의 기능을 동적으로 추가하거나 제어하는 데 유용하지만,  패턴들을 적용하기 위해서는 많은 클래스들을 새로 생성해야 하는 단점이 있습니다.예를 들어, 100개의 클래스에 패턴을 적용하려면 100개의 추가 클래스를 만들어야 하며, 프록시 체인이 복잡해질 경우 그 수는 더욱 늘어날 수 있습니다. 이러한 문제를 해결하기 위해 자바에서는 JDK 동적 프록시와 CGLIB라는 두 가지 방법을 제공합니다. JDK 동적 프록시JDK 동적 프록시는 Java에서 제공하는 기능으로, 인터페이스를 기반으로 한 동적 프록시를 생성합니다. 이 방식은 리플랙션 을 활용하여 실행 시점에서 프록시 객체를 생성하고 해당 프록시 객체를 통해서 메서드를 호출합니다.. 2024. 9. 18.
자바 리플렉션(Reflection) 간단 정리 ≣ 목차  리플렉션자바 리플렉션은 런타임 시점에서 클래스의 메타데이터를 분석하고, 객체의 속성이나 메소드를 동적으로 접근할 수 있는 기능을 제공합니다. 이를 통해 컴파일 시점이 아닌 실행 시점에 필요한 코드가 동적으로 생성되어 실행되도록 합니다.리플렉션의 장점유연성: 외부 라이브러리나 프레임워크 없이도 런타임에 클래스 정보를 얻고, 메소드를 호출하거나 속성을 변경할 수 있습니다.확장성: 새로운 기능을 추가하거나 변경할 때, 코드 수정 없이도 동적으로 처리할 수 있습니다.리플렉션의 단점성능 저하: 리플렉션을 사용하면 메소드나 필드에 접근하기 위해 추가적인 처리가 필요하기 때문에 일반적인 코드보다 느릴 수 있습니다.보안 문제: 내부 구현에 직접 접근하기 때문에 캡슐화를 위반할 수 있으며, 예상치 못한 에가 .. 2024. 9. 17.