목록전체 글 (147)
BE전문가 프로젝트
1. Hibernate 라이브러리 추가 - 하이버네이트를 추가해주는데 여기서 스프링 버전에 맞게 선택해주는 것이 가장 이상적이다. - 스프링부트 홈페이지에 Reference를 가서 orf.hibernate를 ctrl+f 하여 찾아보면 지금 버전에 맞는 하이버네이트 버전을 알 수 있다. 라이브러리에서 보면 javax.persistence를 찾아볼 수 있다. JPA는 인터페이스인데 인터페이스 구현체로 하이버네이트를 선택했다는 것을 알 수 있다. 1.1 could not find artifact org.springframework 오류 스프링부트 프로젝트 생성하였는데 오류가 발생(위에 오류메시지) 기존에 존재하던 Library 오류가 원인 가능성 높다. 해결방법 사용자/내폴더/.m2안에 있는 repositor..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cr6lVH/btrJBKf99qx/kJANL1a1lXZHjTDtPEQkk1/img.png)
JPA -Java Persistence API - 자바 진영의 *ORM 기술표준 *ORM - Object-relational mapping(객체 관계 매핑) - 객체는 객체대로 설계 - 관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑 = 대중적인 언어에는 대부분ORM 기술이 존재(type script, python 등) JPA는 애플리케이션과 JDBC 사이에서 동작함 개발자가 직접 JDBC API를 사용하는 것이 아닌 JPA에게 명령하면 API를 사용하하도록 함 JPA 동작(저장) 적절한 sql문을 만들어 jdbc API를 통해 db로 보냄 JPA는 표준 명세 - jpa는 인터페이스의 모음 - jpa 2.1 표준 명세를 구현한 3가지 구현체(하이버네이트, Eclip..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ClLUO/btrIOvqdzZ9/A0WWsc7QSISlHLkiFdZ0fK/img.png)
JPA 탄생배경 1. SQL 중심적인 개발의 문제점 - 반복되는 코드, 지루한 코드 ex)CRUD - 수정시 객체를 수정해야하며 동시에 DB 컬럼도 설정을 따로 해줘야한다. 따라서 SQL의존성을 많이 띄게된다. 2. 패러다임의 불일치 객체 관계형 DB 동일한 특성들을 묶어서 사용함을 목표로함 데이터를 정규화해서 보관을 목표로함 서로 다른 목표를 가지고 있기때문에 설계에 어려움을 겪을 수 있다. 3. 객체와 관계형 데이터베이스의 차이 1. 상속 - 객체에는 상속관계가 존재하지만 관계형 DB에는 상속 관계가 없다(상속과 비슷한게 있지만 정확하게는 없음) ex) - Album에 insert를 할 때 테이블이 2개이기 때문에 sql을 두번 작성해야한다. - Select시에는 join을 해야하며 movie를 가져..
엔티티 설계시 주의점 모든 연관관계는 지연로딩으로 설정! - 즉시로딩 : 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 실무에서 모든 연관관계는 모두 lazy로 설정 @XToOne(OneToOne, ManyToOne)은 기본 fetch값이 EAGER이기 때문에 모두 LAZY로 바꿔줘야한다 (fethch = FETCHTYPE.LAZY) package jpabook.jpashop.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dABPA5/btrB8Qndw3j/xSHg9D9KszCsAPBXa5TbG1/img.png)
기능 목록 회원 기능 - 회원 등록 - 회원 조회 상품 기능 - 상품 등록 - 상품 수정 - 상품 조회 주문 기능 - 상품 주문 - 주문 내역 조회 - 주문 취소 기타 요구사항 - 상품은 재고 관리가 필요하다. - 상품의 종류는 도서, 음반, 영화가 있다. - 상품을 카테고리로 구분할 수 있다. - 상품 주문시 배송 정보를 입력할 수 있다 다대다 관계가 JPA에서는 성립되지 않기 때문에 join테이블을 생성하여 이어질 수 있도록 한다 Foreign Key가 연관관계의 주인이 되는 것이다. 반대편에 있는 것은 단순 조회에 사용된다. 연관관계 매핑 분석 회원과 주문 일대다, 다대일의 양방향 관계 연관관계의 주인은 외래키가 있는 ORDERS을 주인으로 정한다 따라서 Order.member를 ORDERS.MEM..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b0FYDk/btrCcFzmXFs/hxaJRPHYjzoZvnAbzDtT20/img.png)
Yml을 통한 기본 설정 spring: datasource: url: jdbc:h2:tcp://localhost/~/test;MVCC=TRUE username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true logging: level: org.hibernate.SQL: debug bulid.gradle plugins { id 'org.springframework.boot' version '2.6.7' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id..
JPA의 성능 최적화 기능 1. 1차 캐시와 동일성 보장 - 간은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상 2. 트랜잭션을 지원하는 쓰기 지연 - 비슷한 쿼리들은 한번에 보내준다. ex) insert 비슷한거 3개 동시에 등록(commit되는 순간 한번에 들어감) 3.지연 로딩 - 지연로딩 : 객체가 실제 사용될 때 로딩 - 즉시로딩 : Join SQL로 한번에 연관된 객체까지 미리 조회 상황에 맞게 사용하기(옵션을 통해 간단하게 사용가능) 영속성 영속성 컨텍스트 - 엔티티를 영구 저장하는 환경이라는 뜻 - 논리적인 개념 - 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 엔티티의 생명주기 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 세팅만 한 상..
보호되어 있는 글입니다.