프록시 기초 em.find 같은 경우 실제 엔티티 객체를 조회한다. 하지만 em.getReference는 데이터 베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 여기서 가짜 객체가 뭘까? DB에 쿼리를 날리지 않지만 객체가 조회가 된다. 이게 무슨말일까 해당 코드는 member find 메서드가 실행되며 즉시 memberEntity의 모든값을 요청한다 // db에 값을 저장해준다 Member member = new Member(); member.setUsername("hello"); em.persist(member); em.flush(); em.clear(); Member member1 = em.find(Member.class, member.getId()); System.out.println..
분류 전체보기
상속관계 매핑 관계형 데이터베이스는 상속관계 X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 → 조인 전략 (DTYPE) 통합 테이블로 변환 → 단일 테이블 전략 (한 테이블에 컬럼으로 다 때려박고 DTYPE으로 테이블 종류 구분) 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 (전부 다른 테이블로 나눠버리기) 조인 전략 이런 식으로 어노테이션을 달아주면 테이블이 분리되고 해당 타입이 DTYPE으로 설정된다 해당 어노테이션을 붙히지 않으면 단일 테이블로 무식하게 생성된다. package hellojpa.section7; imp..
연관관계 기초 테이블 외래키 하나로 양쪽 조인 가능 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이서로 참조하면 양방향 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A→B B→A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음 그중 주인을 지정 외래키를 관리하는 참조가 주인 외래키에 영향을 주지 않음, 단순 조회만 가능 다대 일 (ManyToOne) 가장 많이 사용하는 연관관계 다대일의 반대는 일대다 일대 다 단방향 (OneToMany) 실무에서 잘 사용되지 않음 member (다) package hellojpa.section6; import jakarta.persistence.*; import lom..
mappedBy 테이블은 기본으로 FK - PK간의 양방향 연관관계 1개로 이루어져있지만 객체는 FK → PK, PK → FK의 단방향 연관관계 2개로 이루어져 있다 이렇듯 객체끼리의 연관관계를 설정해주려면 각 객체마다 서로를 참조하는 필드값이 존재해야 한다 연관관계의 주인 양방향 매핑 규칙 객체의 두 관계중 하나를 연관관계의 주인으로 지정 연관관계의 주인만이 외래키를 관리(등록, 수정) 주인이 아닌쪽은 읽기만 가능 주인은 mappedBy 속성 사용X 주인이 아니면 mappedBy 속성으로 주인 지정 FK를 가지고 있는 객체(Many)가 주인이고 PK로 FK와 다대 일의 관계를 유지하고 있는 객체(One)는 해당 객체를 가지고 있는 List와 mappedBy를 선언해서 주인을 등록한다. Sub packa..
Gateway 사용자의 요청을 각각의 서비스로 전달해주는 역할을 한다 (교통정리) 만들어놓은 Ureka server에 요청을 전달해야 함으로 Eureka client로 프로젝트를 생성해야 한다 Cateway의 yml server: port: 8000 eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: spring: application: name: gateway-service cloud: gateway: routes: # 해당 작업을 수행하는 라우터의 id값 - id: first-service # 앞으로 들어오는 요청중 first/로 들어오는 모든 요청은 해당 ip와 port버튼을 가진 서버로..
MSA 환경 서비스와 서비스는 원격 호출로 구성 서비스 클라이언트가 서비스를 호출할때 서비스의 위치를 알아낼 수 있어야 한다. 이러한 서비스가 디스커버리 Service discovery와 Client server 각 서비스의 위치를 등록해 놓는 전화번호부와 같은 서버 GPT서비스 디스커버리는 다음과 같은 기능을 수행합니다: 서비스 등록: 각 서비스는 자신의 위치, IP 주소, 포트 번호, 서비스 유형 등을 서비스 디스커버리 메커니즘에 등록합니다. 서비스 검색: 클라이언트 애플리케이션은 특정 서비스를 필요로 할 때, 서비스 디스커버리 메커니즘을 사용하여 해당 서비스의 위치를 검색합니다. 서비스 상태 업데이트: 서비스 디스커버리는 서비스의 상태 변화를 감지하고 업데이트할 수 있으며, 서비스의 가용성 및 신뢰..
·일상
그동안 프로젝트에 집중하느라 놓쳤던 JPA 공부를 다시 시작했다. 프로젝트를 진행하며 살인적인 스케쥴에 정신을 놓아버릴것만 같았는데 다른 분들을 보니 회고도 작성하시고 개인 공부도 챙겨하시는 분도 계신걸 보니 나는 아직 먼것같다. 초심을 되찾고 다시 한번 힘차게 도약해봐야징
객체와 테이블 매핑 @Entity JPA가 관리하는 클래스 JPA에서 사용하려면 @Entity 어노테이션을 필수 기본생성자는 필수로 있어야함 final, enum, interface, inner 클래스는 사용 X final 필드 사용 X // entity로 선언 @Entity @Setter @Getter // MBR 테이블과 매칭할것 @Table(name = "MBR") public class Member { // JPA가 가동되며 사용될 기본 키값 @Id private Long id; // DDL 생성기능은 DDL을 자동 생성할때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다. // unique값과 length를 Column 어노테이션에서 설정해줄 수 있다 // 쉽게말해 자동으로 테스트용 스키마..
JPA의 준영속상태 영속 상태의 엔티티가 영속성 컨텍스트에서 분리 영속성 컨텍스트가 제공하는 기능을 사용 못함 (darty checking같은 기능들) // find로 엔티티를 찾아오는 순간 영속화 된다 Member member = em.find(Member.class, 150L); member.setName("AAAAAA"); // detach를 사용해 준영속화 시켜 컨텍스트에서 제외한다 em.detach(member); System.out.println("============================"); tx.commit(); 위 코드에서는 select 퀴리만 생성되고 update 쿼리는 생성되지 않는다. // find로 엔티티를 찾아오는 순간 영속화 된다 Member member = em.f..
리액트의 비동기 처리 방식 import React from 'react'; const AsyncTest = () => { const test1 = () => { console.log("test1 함수") } const test2 = () => { console.log("test2 함수") } const test3 = () => { console.log("test3 함수") } const syncTest = () => { test1(); test2(); test3(); } return ( 자바스크립트 동기방식 처리 ); }; export default AsyncTest; 해당 코드는 지극히 평범한 자바 스크립트의 동기처리방식이다 (블로킹 방식) 하나의 쓰레드에서 순차적으로 동작을 처리한다. ex) test..