Peony의 기록 창고 🌼
article thumbnail
[JPA] 프록시와 연관 관계
SpringBoot/JPA 기본 2022. 12. 23. 02:40

프록시 ❓Member를 조회할 때 Team도 함께 조회해야 할까? package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntit..

article thumbnail
[JPA] 고급 매핑
SpringBoot/JPA 기본 2022. 7. 2. 15:40

상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란 객체의 상속과 DB의 슈퍼타입-서브타입 관계를 매핑하는 것을 의미한다. : 조인전략(각각 테이블로 변환), 단일 테이블 전략, 구현 클래스마다 테이블 전략(서브타입 테이블로 변환) 기법이 있다. Album, Movie, Book은 모두id, name, price를 가지고 있다(공통 변수) 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE"..

article thumbnail
[JPA] 다양한 연관관계 매핑
SpringBoot/JPA 기본 2022. 6. 28. 20:50

연관관계 매핑 시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 즉, 방향의 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 (단방향) 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향(객체 입장 : 단방향을 2개) 연관관계 주인 외래 키를 관리하는 곳을 연관관계 주인으로 관리하자. 주인의 반대편은 단순 조회만 가능하도록 설계하는 것이 바람직하다. 다대일 [N:1] 다대일(N:1) 단방향 ERD 가장 많이 사용하는 연관관계이다. 다대일의 반대 → 일대다 다대일 양방향 ERD 외래 키가 있는 쪽이 연관관계의 주인이다. 양쪽을 서로 참조하도록 개발한다..

article thumbnail
[JPA] 연관 관계 매핑 기초
SpringBoot/JPA 기본 2022. 6. 28. 01:24

단방향 연관관계 목표 객체와 테이블 연관관계의 차이를 이해해야 한다. 객체의 참조와 테이블의 외래 키를 어떻게 매핑하는지에 대해 이해한다. 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리가 필요 연관관계가 필요한 이유 : 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원(N)과 팀(1)은 다대일 관계이다. 객체를 테이블에 맞추어 모델링 객체를 테이블에 맞추어 모델링 코드 @Entity public class Member { @Id @G..

[JPA] 엔티티 매핑
SpringBoot/JPA 기본 2022. 6. 26. 20:30

객체와 테이블 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne,@JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 필수! 주의사항 기본 생성자 필수 (파라미터가 없는 public 또는 protected) final 클래스, enum, interface, inner 클래스 사용할 수 없다. 저장할 필드에 final 키워드를 사용할 수 없다. 속성 name JPA에서 사용할 엔티티 이름 지정. 기본값 : 클래스 이름을 그대로 사용(예: Member) 같은 클래스..

article thumbnail
[JPA] 영속성 컨텍스트
SpringBoot/JPA 기본 2022. 6. 23. 20:48

JPA 에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 JPA를 보통 쓰게되면, 엔티티 매니저 팩토리와 엔티티 매니저에 대해 이해를 해야한다. 예를 들면, 고객의 요청이 올 때마다 엔티티 팩토리를 통해 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 데이터 커넥션을 사용해서 데이터베이스를 사용하게 된다. ❓그럼 영속성 컨텍스트란 뭘까? 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 EntityManager.persist(entity); : DB에 저장한다기보다 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 의미이다. → 영속성 컨텍스트에 엔티티를 저장한다. 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다. 엔티..

article thumbnail
[JPA] JPA 시작하기
SpringBoot/JPA 기본 2022. 6. 22. 18:07

JPA 시작하기 프로젝트 생성 DB 설치하기 ⇒ 실습용으로는 간단하게 사용되고 웹상황에서 콘솔창도 볼 수 있는 H2를 사용한다. H2 설치 가이드는 링크 글을 참고한다. 프로젝트 생성하기 Java 8 이상(8권장) Maven 프로젝트 groupId: jpa-basic artifactId: ex1-hello-jpa version: 1.0.0 프로젝트 설정 : Maven pom.xml 우리가 나중에 사용할 스프링 부트 버전에 있는 org.hibernate 버전을 확인하고, 그에 맞게 바꿔주어야 한다. https://spring.io/projects/spring-boot#learn → Reference Doc 클릭, → a single HTML page 클릭 H2 데이터 베이스 버전도 변경 필요! 4.0.0 ..

[JPA] JPA 소개
SpringBoot/JPA 기본 2022. 6. 21. 22:06

❓왜 jpa를 써야 할까? : SQL 중심적인 개발의 문제점 현재의 애플리케이션 개발 언어 트렌드 → 객체 지향 언어(ex : [Java, Scala, ...]) 현재 데이터베이스 세계의 헤게모니 → 관계형 DB(ex : [Oracle, MySQL, ...]) → 개발자가 객체로 데이터를 가공해도 DB에 저장할 땐, 결국 SQL을 사용한다. → SQL 중심적인 개발 ! → 객체를 관계형 DB에 관리한다는 것이 문제 ! ❓무엇이 문제일까? 1. 무한 반복, 지루한 코드 기능하나 추가해서 테이블을 생성할 때마다 CRUD SQL을 다 만들어주어야 한다. → Jdbc, MyBatis가 매핑에 도움을 주기는 하지만 그래도 개발자가 다 짜야함! Example : 회원 객체를 만들고 DB에 CRUD를 하는 기능이 있..

article thumbnail
[Spring] 스프링 컨테이너와 스프링 빈
SpringBoot/Spring Basic 2022. 2. 5. 01:08

스프링 컨테이너 ApplicationContext 기존 : 개발자가 AppConfig를 사용해서 직접 객체를 생성 & DI → 스프링 컨테이너 사용 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용 : @Bean이라 적힌 메서드를 모두 호출 -> 반환된 객체를 스프링 컨테이너에 등록 스프링 빈 : @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용. 스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 O 스프링 컨테이너 생성 @Configuration public class AppConfig { @Bean public MemberService memberService() { //생성자 주입 return new MemberServi..

article thumbnail
[Spring] 객체 지향 설계의 5가지 원칙(SOLID)
SpringBoot/Spring Basic 2022. 2. 5. 01:06

객체 지향 프로그래밍 컴퓨터 프로그램을 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있음. 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용 객체지향의 특징 추상화(Abstraction) : 여러 객체들의 공통적인 특징을 도출해 내는 것, 현실 객체를 추상화해서 클래스를 구성. 캡슐화(Encapsulation) : 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것, 데이터를 직접 노출시키지 않고 메서드를 이용해 보호. 상속(Inheritance) : 상위클래스의 속성을 하위클래스가 물려받는 것 다형성(Polymorphism) : 하나의 객체가 여러 형태를 가지는 것 다형성의 실세계 비..