Back-End
-
[Spring Data JPA] 기본 사용법 정리Back-End/Spring Boot 2022. 8. 12. 03:41
전에 공부했던 Spring Data JPA의 기본 사용법을 정리하고자 한다. ✔️ Dependency build.gradle 파일의 dependencies 부분에 다음을 추가하자. implementation ‘org.springframework.boot:spring-boot-starter-data-jpa’ ✔️ 공통 인터페이스, JpaRepository 적용 Spring Data JPA는 JpaRepository 라는 공통 인터페이스를 제공한다. 이 인터페이스는 기본적인 CRUD와 페이징 등 유용한 기능을 제공해주며, 적용하는 방법도 간단하다. JpaRepository를 상속하는 인터페이스를 구성하면 된다. T: 엔티티 타입 ID: 식별자 타입 public interface EntityRepository..
-
9. 값 타입 (2)Back-End/JPA 2022. 6. 10. 14:06
5. 값 타입 컬렉션 (Collection Value Type) 값 타입을 하나 이상 저장하려면 컬렉션에 저장하면 된다. 이때 2가지 어노테이션이 필요하다. @ElementCollection: 값 타입 컬렉션을 사용하는 속성에 표시한다. @CollectionTable: 컬렉션을 위한 추가 테이블을 매핑한다. 생략 가능하며, 기본값으로 {엔티티 이름}_{컬렉션 속성 이름} 테이블과 매핑한다. 위의 다이어그램에서 favoriteFoods는 기본값 타입 컬렉션이고, addressHistory는 임베디드 타입 컬렉션이다. 관계형 데이터베이스 테이블의 컬럼 안에 컬렉션을 포함할 수 없기 때문에, 두 가지 값 타입 컬렉션 모두 별도의 테이블을 추가하고, 추가한 테이블을 매핑해야 한다. favoriteFoods 와 ..
-
9. 값 타입 (1)Back-End/JPA 2022. 6. 9. 12:05
JPA의 데이터 타입을 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 단순한 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 값 타입은 기본값 타입(basic value type), 임베디드 타입(embedded type), 컬렉션 값 타입(collection value type) 3가지로 나눌 수 있다. 값 타입은 식별자가 없고 추적할 수 없는 정보라고 볼 수 있다. 지금부터 값 타입에 대하여 알아보자. 1. 기본값 타입 (Basic Value Type) 예제 코드) @Entity public class Member { @Id @GeneratedValue private Long id; ..
-
8. 프록시와 연관관계 관리Back-End/JPA 2022. 6. 7. 11:01
1. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 사용하지 않는 연관된 엔티티까지 데이터베이스에서 함께 조회해두는 것이 효율적이지 않다. JPA는 이런 문제를 해결하기 위해, 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법인 지연 로딩을 제공한다.지연 로딩 기능을 사용하려면 실제 엔티티 객체 데신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요하고, 이것을 프록시 객체라 한다. 📌 참고! JPA의 지연 로딩 JPA 표준 명세는 지연 로딩의 구현 방법을 JPA 구현체에 위임했다. 이후의 내용은 하이버네이트 구현체에 대한 내용이다. 1.1. 프록시 기초 JPA에서 식별자로 엔티티 하나를 조회할 때는 EntityManager.find() 를 사용한다. 이 메소..
-
7. 고급 매핑Back-End/JPA 2022. 5. 3. 15:50
1. 상속 관계 매핑 관계형 데이터베이스에는 상속이라는 개념이 없다. 대신 객체의 상속 개념과 가장 유사한 슈퍼타입 서브타입 관계라는 모델링 기법을 사용할 수 있다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현하기 위한 방법은 3가지가 있다. 1. 각각의 테이블로 변환: JPA에서는 조인 전략이라 한다. 2. 통합 테이블로 변환: JPA에서는 단일 테이블 전략이라 한다. 3. 서브타입 테이블로 변환: JPA에서는 구현 클래스마다 테이블 전략이라 한다. 1.1. 조인 전략 (Joined Strategy) 엔티티 각각을 모두 테이블로 만들고, 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키와 외래 키로 사용하는 전략이다. 예제 코드 @Entity @Inheritance(strateg..
-
6. 다양한 연관관계 매핑Back-End/JPA 2022. 4. 30. 23:33
1. 다대일 N:1에서 외래키는 항상 N쪽에 있다. 따라서 N:1 양방향 관계에서 연관관계의 주인은 N쪽이다. 1.1. 다대일 단방향 (N:1) 한쪽만 참조를 하고, 반대편은 참조하지 않는다(참조하는 필드가 없다). 다(N)쪽 테이블 매핑 엔티티에 참조 필드 추가 @ManyToOne @JoinColumn(name = 외래키이름) 1.2. 다대일 양방향 (N:1, 1:N) 외래키가 있는 쪽이 연관관계의 주인이다. 주인이 아닌 쪽은 항상 연관관계에 있는 엔티티를 조회만 해야한다. 항상 서로를 참조한다. 항상 서로를 참조하도록 하려면 연관관계 편의 메소드를 작성하는 것이 좋고, 무한루프에 빠지지 않도록 검사하는 로직을 넣어주는 것이 좋다. // 회원 엔티티 내부 public void setTeam(Team t..
-
5. 연관관계 매핑 기초Back-End/JPA 2022. 4. 23. 17:25
1. 단방향 연관관계 위와 같은 다대일 단방향 연관관계가 있을 때는 2가지의 어노테이션을 통해 다음과 같이 구현이 가능하다. @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; private Stirng username; //연관관계 매핑 @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //연관관계 설정 public void setTeam(Team team){ this.team = team; } ... } @Entity public class Team { @Id @Column(name = "TEAM_ID") private String id; private..
-
4. 엔티티 매핑Back-End/JPA 2022. 4. 17. 02:01
데이터베이스 스키마 자동생성 애플리케이션 실행 시점에 데이터베이스 테이블이 자동으로 생성된다. hibernate.hbm2ddl.auto 속성 옵션 설명 개발 환경 추천 전략 create 기존 테이블 삭제 후 새로 생성. drop + create 개발 초기 CI 서버 create-drop 기존 테이블 삭제 후 새로 생성 + 애플리케이션 종료 시 생성한 DDL 삭제. drop + create + drop CI 서버 update 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정한다. 개발 초기 테스트 서버 validate 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. DDL을 수정하지 않는다. 테스트 서버 스테이징 서버 운영 서버 ..