728x90

백엔드/Spring 53

[Spring] Spring Data JPA

Spring Data JPAJPA를 보다 쉽게 사용할 수 있도록 도와주는 프레임워크데이터베이스와의 상호작용을 단순화하고, 반복적인 작업을 줄임복잡한 쿼리를 작성하지 않고도 CRUD(Create, Read, Update, Delete) 작업을 쉽게 수행할 수 있음접근스프링 데이터 JPA는 리포지토리 인터페이스를 통해 데이터 접근을 제공JpaRepository 또는 CrudRepository를 상속받아 필요한 메서드를 정의 (JpaRepository는 CrudRepository의 기능을 포함)사용 방법JpaRepository를 상속받아 제네릭은 엔티티 타입과 식별 자로 사용될 데이터 타입을 정의 public interface MemberRepository extends JpaRepository 상속 구조Re..

백엔드/Spring 2024.09.22

[Spring] JPA 컬렉션 조회 최적화 & OSIV

JPA 컬렉션 조회일대다 (One-to-Many), 다대다 (Many-to-Many) 관계에서 발생하는 조회로 객체 내부 필드로 컬렉션을 가질 때 발생엔티티 조회 -> DTO 변환엔티티를 직접 조회한 뒤 내부 컬렉션과 엔티티를 DTO로 변환하여 반환단점: 지연 로딩 설정 시 프록시 초기화로 수많은 추가 쿼리 발생엔티티 조회(fetch 조인) -> DTO 변환엔티티 조회 시 fetch 조인을 통해 미리 연관된 객체와 컬렉션을 다 가져온 뒤 DTO로 변환fetch 조인을 통해 1번의 쿼리로 미리 모든 데이터를 가져와 추가 쿼리가 발생하지 않음단점: 페이징 불가능 -> 일대다로 조인하여 쿼리시 데이터가 중복되는 현상으로 원하는 페이징이 불가능(toOne 관계 제외)둘 이상의 컬렉션에 fetch 조인 불가능 -..

백엔드/Spring 2024.09.21

[Spring] JPA 지연 로딩 & 조회 성능 최적화

JPA 지연 로딩데이터베이스에서 객체를 가져오는 방식으로 필요한 시점에만 데이터를 로드지연 로딩이 설정된 관계(예: @OneToMany, @ManyToMany)에서는 JPA가 프록시 객체를 생성프록시 객체는 데이터의 위치 정보를 가짐지연 로딩 설정 시 조회 -  엔티티를 노출하는 경우지연 로딩 설정 시 엔티티를 직접 노출할 경우 지연 로딩으로 객체와 연결된 다른 객체의 데이터는 가져오지 않음연관된 객체는 실제 엔티티가 아닌 프록시 객체로 Jackson 라이브러리는 이 프록시 객체를 JSON으로 변경 불가하여 에러  발생 -> Hibernate5JakartaModule을 사용할 경우 프록시 객체를 처리 가능DTO를 사용한 조회엔티티를 조회한 뒤 DTO를 사용하여 변환하여 사용하는 방법엔티티를 조회하여 DT..

백엔드/Spring 2024.09.20

[Spring] API

API (Application Programming Interface)소프트웨어 구성 요소 간의 상호작용을 정의하는 인터페이스프로그램이 서로 통신하고 데이터를 주고받을 수 있도록 하는 일종의 계약 또는 규약기본 개념인터페이스: 두 시스템이나 애플리케이션 간의 통신을 가능하게 하는 규칙과 명세를 제공기능 호출: 개발자는 API를 통해 특정 기능을 호출하거나 데이터를 요청 가능데이터 교환: 주로 JSON이나 XML 형식으로 데이터 교환동작 방식클라이언트에서 API 요청포함 정보HTTP 메서드: 어떤 작업을 수행할지를 정의 (예시: GET, POST, PUT, DELETE...)URL: 요청할 자원의 주소 (예시: https://api.example.com/users)헤더: 요청에 대한 추가 정보를 포함 (예..

백엔드/Spring 2024.09.19

[Spring] JPA - JPQL(Java Persistence Query Language)

JPQL (Java Persistence Query Language) JPA에서 사용하는 쿼리 언어로 테이블을 대상으로 하는 SQL과 다르게 자바 객체를 대상으로 쿼리JPQL 쿼리는 EntityManager를 통해 실행기본적인 쿼리는 SELECT, UPDATE, DELETE, JOIN 등의 SQL 구문과 유사하나 객체를 대상으로 사용쿼리 내 엔티티와 엔티티의 속성은 대소문자를 구분별칭을 필수로 사용 엔티티, 임베디드, 스칼라 타입에 대해 프로젝션 가능사용법EntityManager의 createQuery()의 파라미터에 JPQL 문을 넣어 사용예시) em.createQuery("select m from Member m") -> 반환 타입 Query 인터페이스반환 타입을 명시적으로 지정하여 사용 가능 예시)..

백엔드/Spring 2024.09.13

[Spring] JPA 값 타입

JPA 값 타입엔티티가 아닌 단순히 값으로 표현되는 객체 주로 엔티티의 필드로 사용되며 엔티티가 소유하는 값 또는 속성을 나타냄기본 값 타입 자바의 원시 타입, 래퍼 클래스, String에 해당하는 값값의 생명주기를 엔티티에 의존함기본 값 타입은 항상 값을 복사하여 공유하지 않음 임베디드 타입 (Embedded)복합적인 여러 속성을 하나의 객체로 묶어 관리기본 값 타입들을 모아서 만든 타입객체를 필드 값으로 가지나 데이터베이스 테이블 상에선 임베디드 타입 내부 필드 값이 엔티티에 추가되어 있음@AttributeOverride를 사용하여 같은 값 타입을 사용하는 경우 이름을 다르게 설정 가능사용법@Embeddable: 값 타입을 정의하는 곳에 표시, 임베디드 타입의 클래스에 정의@Embedded: 값 타입..

백엔드/Spring 2024.09.12

[Spring] JPA 프록시

JPA 프록시EntityManager의 getReference()를 사용하여 엔티티 객체의 프록시를 반환getReference()는 엔티티의 ID를 기준으로 해당 엔티티의 프록시를 생성실제 클래스를 상속받아서 만들어짐프록시 객체는 실제 객체의 참조를 보관프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출프록시 객체 초기화프록시 객체 반환 시 실제 데이터베이스에 조회 쿼리가 실행되지 않음프록시 객체를 처음 사용하는 시점 초기화 되며 쿼리가 실행프록시 객체가 초기화되어도 실제 엔티티 객체로 변경되지는 않음영속성 컨텍스트에 이미 찾을 엔티티가 존재한다면 getReference()를 사용해도 프록시 대신 실제 엔티티 반환준영속 상태에서 프록시를 초기화할 시 오류 발생즉시 로딩 & 지연 로딩즉시 로딩엔..

백엔드/Spring 2024.09.11

[Spring] 연관관계 매핑

JPA 연관관계 매핑자바 객체와 데이터베이스 테이블 간의 관계를 매핑하는 과정객체의 참조와 데이터베이스 외래키를 매핑객체를 테이블에 맞춰 모델링객체의 참조가 아닌 테이블의 외래키를 객체가 가지게 모델링참조가 아닌 외래키 자체를 들고 있기 때문에 외래키 테이블 참조를 위해선 추가적인 쿼리가 필요상속 관계 표현이 힘듦연관관계가 매우 복잡한 경우 효과적일 수 있음 객체를 참조 형태로 모델링객체를 객체답게 참조 형태로 모델링단방향 연관관계한 엔티티만 다른 엔티티를 참조할 수 있는 일방적인 관계한쪽에서만 객체를 탐색 가능외래키를 사용하는 객체를 직접 참조양방향 연관관계두 엔티티가 서로 참조할 수 있는 관계두 방향 모두 객체를 탐색 가능두 엔티티의 일관성 유지를 위해 양쪽에서 매핑이 필요연관관계 주인양방향 연관관계..

백엔드/Spring 2024.09.10

[Spring] JPA 엔티티 매핑

엔티티 매핑 Entity Mapping데이터베이스 테이블과 자바 객체 간의 관계를 정의하는 과정객체와 테이블 매핑@Entity 어노테이션을 사용하여 클래스가 엔티티임을 표시기본 생성자가 필수로 존재abstract 클래스 사용 가능final 클래스, enum, interface, inner 사용불가내부 필드 변수 final 사용 불가@Entity해당 클래스를 엔티티로 사용속성name: JPA에 사용할 엔티티 이름 정의(기본값 클래스 이름)@Table엔티티와 매핑할 테이블 지정속성name: 매핑할 테이블 이름 설정, (기본값 엔티티 이름)catalog: 데이터베이스 카탈로그를 지정schema: 데이터베이스 스키마를 지정uniqueConstraints(DDL): DDL 생성 시에 유니크 제약 조건 생성@Ent..

백엔드/Spring 2024.09.09

[Spring] 영속성 컨텍스트 (Persistence Context)

영속성 컨텍스트(Persistence Context)JPA의 엔티티 매니저(EntityManager)가 관리하는 엔티티 객체의 저장소데이터베이스와 애플리케이션의 엔티티 객체 간의 동기화를 담당하고 트랜잭션의 생명 주기 동안 엔티티 객체를 관리자바의 컬렉션에 담는 것과 비슷한 개념영속성 컨텍스트 상태비영속(Transient)엔티티가 영속성 컨텍스트에 의해 관리되지 않는 상태데이터베이스에 아직 저장되지 않은 상태로 엔티티가 만들어지기만 한 상태영속(Persistent)엔티티가 영속성 컨텍스트에 의해 관리되고 있는 상태데이터베이스와 동기화되고 상태 변경이 감지되어 트랜잭션 커밋 시 데이터베이스에 반영준영속(Detached)엔티티가 영속성 컨텍스트와 분리된 상태데이터베이스와 동기화되지 않으며, 변경 사항이 데이..

백엔드/Spring 2024.09.08
728x90