목록[백엔드]/[JPA | 학습기록] (13)
개발자로 후회없는 삶 살기

서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 스프링 데이터 JPA 적용스프링은 Repositoy를 인터페이스로 구현체를 CGLIB으로 등록해서 편리한 기능을 제공한다. Jpa 레포지토리에는 find 관련 메서드들이 이미 구현되어 있어서, 가져다 사용하면 된다. jpa 레포지토리는 RDB 관련 메서드만 제공한다. Page Sort는 data 하위 인터페이스로 레디스 몽고를 다 지원한다. 몽고와 레디스도 페이지와 정렬을 지원하므로 추상화한 것이다. 스프링 데이터는 데이터 공통 기술이고 스프링 데이터 JPA는 RDB 기술이다. 몽고, 레디스를 쓰면 스프링 데이터를 다 사용할 수 있다. - 쿼리 메서드 기능이처럼 findAll 같은 공통 기능을 제공하는데, ..

서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- JPQL 소개JPA는 다양한 방법으로 SQL을 사용할 수 있다. 🚨 나이가 18 이상인 회원을 검색하고 싶다면 em.find로 할 수 있나?따라서 JPQL이 나왔고 엔터티 객체 중심으로 쿼리를 짤 수 있다. m은 엔터티 자체를 의미하며, m 객제 자체를 조회하라는 의미이다. → 규칙1) 엔터티 필드는 대소문자 구분함2) jpql 키워드는 대소문자 구분 없음3) 별칭(m) 필수 → Type, QueryType은 반환 타입이 명확할 때(Member) Query는 명확하지 않을 때(이름과 나이) createQuery에 타입 정보를 줄 수 있으면 Type을 쓰고, 문자만 쓰면 String도 class를 할 수 있..

서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 프록시프록시가 뭔지 알아보고 활용해보자, 예를들어서 멤버에 팀이 있는데 멤버를 조회할 때 팀도 DB에서 무조건 조회해야 할까? 고민하는 상황이다. 멤버와 팀을 같이 출력하는 경우라면, 회원과 연관된 팀을 불러와서 출력하고, 이런 비즈니스 로직에서는 멤버를 가져오고 팀도 한 번에 한 방 쿼리로 가져오면 좋을 것이다. 근데, 팀은 출력하지 않고 회원만 출력하려고 하면? DB에서 연관됐다고 해서 사용하지 않는 팀도 가져오면 손해이다. 언제는 멤버와 팀을 같이 사용하고 언제는 멤버만 사용하고 하면, 낭비를 고려해야 한다. JPA는 이걸 프록시로 해결한다. ⇒ 프록시 기초em.find : DB에서 진짜 객체를 가져온..

서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 연관관계 매핑 시 고려사항1. 다중성db는 다측에 1측의 fk를 두며, 객체는 이를 따라 다측에 JoinColumn을 한다. 대부분 다대일을 많이 쓰고, 일대일도 가끔 사용하고 다대다는 절대로 안한다. 2. 단, 양 방향DB는 방향의 개념이 없고, fk 하나로 양쪽에 접근할 수 있지만, 객체는 참조를 두어 직접 접근해야하고 단방향 2개가 양방향이다. ⇒ 다대일1. 단방향주인에 참조를 두고, DB는 다측에 외래키, 객체는 JoinColumn을 한다. 가장 많이 사용하는 방법이다. 2. 양방향1측에 List를 두어 양방향을 만들 수 있다. 설계할 떄는 양방향을 전혀 고려하지 않아도 되고 어플 개발 단계에서 jp..

서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 엔터티 매핑 소개객체와 테이블을 매핑하고 필드와 컬럼, 기본키, 연관관계를 매핑한다. - 객체와 테이블 매핑 @EntityEntity가 붙은 클래스는 JPA가 관리하는 엔터티로, 붙지 않으면 jpa와 전혀 관계 없는 클래스이다. → 주의점1) 기본 생성자2) final, enum, 인터페이스, 이너 클래스 불가3) 필드에 final 불가jpa는 리플랙션을 하기 때문에, 기본 생성자가 필수이다. name은 실제 테이블에서 매칭되는 테이블을 골라서 매핑할 수 있다. - 스키마 자동 생성jpa는 엔터티 분석 기능으로 어플 로딩 시점에 테이블 자동 생성 기능을 제공한다. 장점 ✅보통 개발을 할 때 설계를 다 마치고..

서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 영속성 컨텍스트JPA에서 가장 중요한 2가지는 엔터티와 테이블 매핑과 영속성 컨텍스트이다. 웹에서 고객 요청이 오면, 매니저 1, 2를 생성하고 매니저가 내부적으로 커낵션을 써서 db를 쓴다. → 영속성 컨텍스트란?엔터티를 영구 저장하는 환경이다. JPA는 저장한다고 DB에 바로 넣는게 아니라, 컨텍스트에 저장한다. 매니저가 내부에 컨텍스트 공간을 가지고 있다. - 엔터티 생명주기1) 비영속컨텍스트와 관련이 없는 상태이다. 2) 영속컨텍스트에 객체를 관리하는 상태이다. set까지는 비영속이고 persist를 하면 영속화된다. persist는 뭐 하는 거야? ✅JPA는 DB에 저장하는 게 아니라 우선 컨텍스트..

서론 ※ 이 포스트는 다음 강의의 학습이 목표임을 밝힙니다. https://www.inflearn.com/roadmaps/149 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵 - 인프런 | 로드맵 Java, JPA 스킬을 학습할 수 있는 개발 · 프로그래밍 로드맵을 인프런에서 만나보세요. www.inflearn.com 본론 프록시가 뭔지 알아보고 프록시의 활용을 알아봅니다. 예를 들어서 멤버와 팀이 있는데 멤버를 조회할 때 팀도 db에서 조회해야 할까? 고민하는 상황입니다. try { Member member = em.find(Member.class, 1L); printMemberAndTeam(member); tx.commit(); } catch (Exception e) { tx.rollback(..

서론 ※ 이 포스트는 다음 강의의 학습이 목표임을 밝힙니다. https://www.inflearn.com/roadmaps/149 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵 - 인프런 | 로드맵 Java, JPA 스킬을 학습할 수 있는 개발 · 프로그래밍 로드맵을 인프런에서 만나보세요. www.inflearn.com 본론 - 상속관계 매핑 객체의 상속을 JPA에서 어떻게 처리하는지 알아봅니다. 객체는 상속이 있는데 RDB는 없습니다. 근데 RDB에는 비슷하게 슈퍼타입, 서브타입 관계라는 기법이 있고 상속과 그나마 유사해서 매핑해서 사용할 수 있습니다. 상속관계 매핑이란? ✅ 객체의 상속과 DB의 슈퍼, 서브를 매핑하는 것입니다. RDB에서 음반, 영화, 책이 있고 그것들의 공통적인 속성을 물품 ..