본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

Spring 사전 준비52

[JPA] 복합 값 타입과 불변 객체 1. 복합 값(임베디드) 타입 아래 포스팅의 [3-3)@EmbeddedId 방식]과 사용 방법이 비슷하다. 아래 포스팅에서는 복합 키(@EmbeddedId)를 다룬 것이고, 이번 포스팅에서는 키가 아닌 복합 값(@Embedded)을 다룰 것이다. https://kimcoder.tistory.com/486 [JPA] 고급 매핑 기술 1. 객체의 상속 관계 매핑 - 객체의 상속 구조와 DB의 슈퍼타입-서브타입 관계를 매핑하는 것이다. 1) 조인 전략 (1) 특징 - 엔티티들을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키 kimcoder.tistory.com 임베디드 타입은 엔티티와 달리 식별자라는 개념이 없다.★ 예를 들어, Member 엔티티에 다음과 같은 정보들이 들어있다고 하자. Memb.. 2022. 8. 3.
[JPA] CASCADE 기능 JPA에서 엔티티를 저장할 때 모든 연관 엔티티는 영속 상태로 지정되어 있어야 한다. JPA에서는 이런 번거로움을 위해 부모만 영속 상태로 만들면 연관 엔티티까지 한 번에 영속 상태로 만드는 CASCADE 기능을 제공한다. 1. 영속성 전이 1) 영속성 전이란? - 부모의 영속 상태를 연관(자식) 엔티티까지 한 번에 적용하는 기능 2) 설정법 - 다음과 같이 엔티티에서 매핑 어노테이션의 cascade 속성을 이용하면 된다. @OneToMany(..., cascade=CascadeType.PERSIST) // cascade={...}와 같이 중괄호를 활용하여 여러 속성을 같이 사용할 수도 있다. private List children = new ArrayList(); - CASCADE의 종류는 다음과 같다.. 2022. 8. 3.
[JPA] 즉시 로딩과 지연 로딩 1. 즉시 로딩 1) 즉시 로딩 기법이란? - JOIN으로 한 번에 연관된 객체까지 미리 조회하는 방법 - @ManyToOne(fetch=FetchType.EAGER) 으로 설정한다. 2) JOIN 방식 - 즉시 로딩에서는 기본적으로 LEFT OUTER JOIN을 이용하여 조인한다. 그 이유는 외래 키가 NULL일 위험성 때문인데, 외래 키가 NULL이면 현재 엔티티도 조회되지 않는다. - 엔티티의 외래 키에 다음과 같이 NOT NULL을 설정하면 JPA는 외부 조인 대신에 내부 조인을 사용한다. @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(... , nullable=false) private Team team; 또는 optional 옵션으로 지정할 수도 있다. @M.. 2022. 8. 1.
[JPA] 프록시 객체 1. 프록시 객체란? - 실제 엔티티 객체 대신에 DB 조회를 지연할 수 있는 가짜 객체 - 연관 객체가 실제로 사용될 때만 DB에서 로딩해주는 지연 로딩을 이용할 때 필요하다. - 글로벌 fetch 전략을 FetchType.LAZY로 지정한 필드에 자동으로 적용되며, 프록시 객체를 직접 생성할 수도 있다. 2. 프록시 객체의 동작 1) 프록시 객체의 직접 생성 - EntityManager의 getReference() 메소드를 이용하면 DB 접근을 위임한 프록시 객체를 반환한다. Member member = em.getReference(Member.class, "member1"); - 프록시 클래스는 실제 클래스를 상속 받아서 만들어진다. 이 때 실제 객체에 대한 참조를 보관하며, 프록시 객체의 메소드를.. 2022. 8. 1.
[JPA] 고급 매핑 기술 1. 객체의 상속 관계 매핑 - 객체의 상속 구조와 DB의 슈퍼타입-서브타입 관계를 매핑하는 것이다. - 부모 엔티티를 조회하면 그 자식 엔티티도 함께 조회된다. 1) 조인 전략 (1) 특징 - 엔티티들을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 그대로 받아서 기본 키이자 외래 키로 사용하는 전략이다. - @Inheritance의 strategy 속성을 InheritanceType.JOINED로 지정하면 된다. (2) 장점 - 테이블이 정규화된다. - 외래 키 참조 무결성 제약조건을 활용할 수 있다. (3) 단점 - JOIN이 많이 사용되기 때문에 복잡하고 조회 성능이 저하될 수 있다. - 데이터를 등록하는 INSERT문이 2번 실행된다. (4) 예시 - 부모 테이블 ITEM이 자식 .. 2022. 7. 28.
[JPA] 일대일 매핑과 다대다 매핑 1. 일대일 매핑 1) 특징 - 둘 중 어느 곳에나 외래 키를 가질 수 있다. - 객체 매핑에 @OneToOne 어노테이션을 사용하고 DB의 외래 키에는 유니크 제약 조건을 건다. - 예시로 직원과 사물함의 관계가 있다. 2) 외래 키 전략 (1) 주 테이블에 외래 키를 두는 방법 - 외래 키를 객체 참조와 비슷하게 사용할 수 있음 (2) 대상 테이블에 외래 키를 두는 방법 - 테이블 관계가 일대일에서 일대다로 변경되어도 테이블의 구조를 유지하기 쉬움 - 단방향으로는 불가능한 전략이기 때문에 양방향으로 서로 참조하고 있어야 한다. 2. 다대다 매핑 1) 특징 - 일반적으로 연결 엔티티를 추가하여 일대다/다대일 관계로 분리한다. - 결론부터 말하자면, [4) 연결 엔티티에 새로운 기본 키를 부여하는 방식].. 2022. 7. 26.
내부 클래스의 종류 1. 중첩 클래스 (Nested Class) - 클래스의 내부에 정의되는 클래스를 중첩 클래스(nested class)라고 한다. - 중첩 클래스는 정적 클래스(Static Class)와 내부 클래스(Inner Class)로 분류할 수 있다. 2. 정적 클래스 (Static Class) - 독립적으로 오브젝트로 만들어질 수 있는 클래스로, new 키워드를 사용해서 객체를 생성할 수 없다. 대신, 클래스명 자체를 사용하여 접근할 수 있다. 3. 내부 클래스 (Inner Class) - 내부 클래스를 이용하면 외부 클래스의 멤버에 쉽게 접근할 수 있다. - 클래스의 캡슐화 : 외부에서 불필요한 클래스를 은닉하여 코드의 복잡성과 클래스 파일을 줄일 수 있다. - 내부 클래스에서 외부의 변수를 사용할 때는 외부.. 2022. 3. 17.
Spring 관련 용어 모음 Spring에 관한 문서나 책에 자주 등장할만한 용어들을 정리하고자 한다. 용어들은 계속해서 추가해나갈 것이다. 1. DI(의존성 주입) - 추상화 계층을 통해 모듈을 쉽게 교체할 수 있도록 만드는 것 2. 개방 폐쇄 원칙 - 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다는 원칙 - 변화가 일어나지 않고도 기능을 확장할 수 있도록 하는 것이 주 목적이다. 3. SOLID - 다음 5가지 객체지향 설계 원칙의 각 첫 글자를 따서 만든 단어이다. * SRP(The Single Responsibility Principle) : 단일 책임 원칙 * OCP(The Open Closed Principle) : 개방 폐쇄 원칙 * LSP(The Liskov Substitution Princip.. 2022. 3. 5.
[JPA] 단방향 매핑과 양방향 매핑 테이블 환경에서는 JOIN문을 이용하여 두 테이블간의 양방향 매핑이 가능하지만, 객체 환경에서라면 말이 달라진다. 그렇다면 객체에서는 어떻게 단방향/양방향 매핑을 구현할 수 있는지 알아보자. 참고로, JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다는 점에 주의하자. 1. 단방향 매핑 단순히 객체의 멤버로 객체를 지정하면 된다. package com.example.jpastudy.entity; import lombok.Getter; import lombok.Setter; import javax.persistence.*; @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(n.. 2021. 8. 18.