반응형 Book/스프링부트 핵심가이드36 연관관계 매핑(of. 다대다(N:N) 매핑) 연관관계 매핑 RDBMS를 사용할 때는 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하는 것은 어렵다. JPA를 사용하는 애플리케이션에서도 테이블의 연관관계를 엔티티 간의 연관관계로 표현이 가능하다. 그 중에서 다대다(N:N) 매핑 방식에 대해 알아보겠습니다. 연관관계 매핑 종류와 방향 Many To Many : 다대다(N:N) 실무에서는 거의 사용되지 않는 구성이다. 예시) 상품과 생산 업체 : 한 종류의 상품이 여러 생산업체를 통해 생산될 수도 있고, 생산업체 한 곳이 여러 상품을 생산할 수도 있다. 다대다 연관관계에서는 각 엔티티에서 서로를 리스트로 가지는 구조로 만들어진다. '교차 엔티티' 라고 부르는 중간테이블을 생성하여 다대다 관계를 일대다 또는 다대일 관계로 해소시킨다. 다대다 단방.. Book/스프링부트 핵심가이드 2023. 11. 14. 연관관계 매핑(of. 다대일(N:1), 일대다(1:N) 매핑) 연관관계 매핑 RDBMS를 사용할 때는 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하는 것은 어렵다. JPA를 사용하는 애플리케이션에서도 테이블의 연관관계를 엔티티 간의 연관관계로 표현이 가능하다. 그 중에서 다대일(N:1) , 일대다(1:N) 매핑 방식에 대해 알아보겠습니다. 연관관계 매핑 종류와 방향 One To Many : 일대다(1:N) Many To One : 다대일(N:1) 상품 테이블 입장에서 볼 경우 다대일 관계 공급 업체 테이블 입장에서 볼 경우 일대다 관계 다대일 단방향 매핑 공급업체 엔티티 클래스 @Entity @Getter @Setter @NoArgsConstructor @ToString(callSuper = true) @EqualsAndHashCode(callSuper .. Book/스프링부트 핵심가이드 2023. 11. 14. 연관관계 매핑 (of. 일대일(1:1) 매핑) 연관관계 매핑 RDBMS를 사용할 때는 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하는 것은 어렵다. JPA를 사용하는 애플리케이션에서도 테이블의 연관관곌르 엔티티 간의 연관관계로 표현이 가능하다. 그 중에서 일대일(1:1) 매핑 방식에 대해 알아보겠습니다. 연관관계 매핑 종류와 방향 One To One : 일대일(1:1) 연관관계 이해 [예시] 재고관리시스템 재고로 등록되어 있는 상품 엔티티에는 공급업체의 정보 엔티티가 매핑되어있다. 공급업체 입장에서는 한 가게에 납품하는 상품이 여러 개가 있을 수 있으므로 상품 엔티티와 일대다 관계가 된다. 상품 입장에서 보면 하나의 공급업체에 속하게 되므로 다대일 관계가 된다. 데이터베이스에서 두 테이블의 연관관계를 설정하면 외래키를 통해 서로 조인해서 .. Book/스프링부트 핵심가이드 2023. 11. 14. JPA Auditing 개념과 활용 방법 JPA Auditing Spring Data JPA 에서는 자동으로 엔티티를 생성하거나 변경할 때마다 자동으로 넣어주는 기능을 제공하는 JPA Auditing에 대해 알아보겠습니다. JPA Auditing이란? JPA에서 'Audit'는 '감시하다' 라는 뜻으로, 각 데이터마다 '누가', '언제' 데이터를 생성했고 변경했는지 감시한다는 의미로 사용된다. 엔티티 클래스에 공통적으로 들어가는 필드가 있다. 생성 주체 생성 일자 변경 주체 변경 일자 JPA Auditing 기능 활성화 @EnableJPAAuditing 추가 @SpringBootApplication @EnableJpaAuditing public class AdvancedJpaApplication { public static void main(S.. Book/스프링부트 핵심가이드 2023. 11. 9. @Query 어노테이션 관련 내용 정리 @Query 어노테이션 사용하기 메서드의 이름만으로 쿼리 메서드를 생성할 수 있다. @Query 어노테이션을 사용해 직접 JPQL을 작성할 수 있는데 알아보겠습니다. @Query 어노테이션 JPQL을 사용하면 JPA 구현체에서 자동으로 쿼리 문장을 해석하고 실행하게 된다. 만약 데이터베이스를 다른 데이터베이스로 변경할 일이 없다면 직접 해당 데이터베이스에 특화된 SQL을 작성할 수 있다. 주로 튜닝된 쿼리를 사용하고자 할 때에 직접 SQL을 작성한다. @Query 어노테이션을 사용하는 메서드 @Repository public interface ProductRepository extends JpaRepository { @Query(" select p from Product as p where p.name .. Book/스프링부트 핵심가이드 2023. 11. 9. 정렬과 페이징 처리 방법과 예시 정렬과 페이징 처리 애플리케이션에서 자주 사용되는 정렬과 페이징 처리는 쿼리 메서드를 작성하는 방법을 기반으로 수행할 수 있다. 기본 쿼리 메서드를 통해서도 가능하다. 기본적인 정렬과 페이징 처리 방법을 알아보겠습니다. 정렬 처리하기 일반적인 쿼리문에서는 정렬을 사용할 때 ORDER BY 구문을 사용한다. 쿼리 메서드도 정렬 기능에 동일한 키워드가 사용된다. // Asc : 오름차순, Desc : 내림차순 List findByOrderByNumberAsc(String name); List findByOrderByNumberDesc(String name); 기본 쿼리 메서드를 작성한 후에 OrderBy 키워드를 삽입한다. 정렬하고자 하는 컬럼과 오름차순/내림차순을 설정하면 정렬이 수행된다. 쿼리 메서드에서.. Book/스프링부트 핵심가이드 2023. 11. 9. Spring Data JPA 쿼리 메서드 개념과 사용 방법 Spring Data JPA 활용 리포지토리 예제를 작성하고, 리포지토리 활용법을 테스트 코드를 통해 알아보겠습니다. JPQL JPQL은 JPA Query Language의 줄임말로써, JPA에서 사용할 수 있는 쿼리를 의미한다. JPQL의 문법은 SQL과 매우 비슷해서 데이터베이스 쿼리에 익숙한 사람들은 쉽게 사용할 수 있다. SQL vs JPQL SQL에서는 테이블이나 컬럼의 이름을 사용한다. JPQL은 엔티티 객체를 대상으로 수행하는 쿼리이기에 매핑된 엔티티의 이름과 필드의 이름을 사용한다는 것이다. 쿼리 메서드 기본 메서드는 식별자 기반으로 생성되기에, 별도의 메서드를 정의해서 사용하는 경우가 많다. 이 때 간단한 쿼리문을 작성하기 위해 사용되는 것이 쿼리 메서드 이다. 쿼리 메서드 생성 쿼리 메.. Book/스프링부트 핵심가이드 2023. 11. 8. lombok 설정 방법과 주요 어노테이션 lombok 사용 반복되는 코드의 작성을 생략할 때 도와주는 어노테이션인 lombok에 대해 알아보겠습니다. lombok 데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 Getter/Setter 같은 메서드를 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다. lombok 의 장점 어노테이션 기반으로 코드를 자동 생성하므로, 생산성이 높아진다. 반복되는 코드를 생략할 수 있어서 가독성이 높아진다. 롬복을 안다면 간단하게 코드를 유추할 수 있어 유지보수에 용이하다. lombok 의 의존성(dependencies) 생성 Maven(pom.xml) org.projectlombok lombok true Gradle(build.gradle) dependencies { compileOnly 'org.pro.. Book/스프링부트 핵심가이드 2023. 11. 3. Service, Controller 클래스 생성 및 메서드 구현 Service, controller 클래스 생성 및 메서드 구현 애플리케이션에서 핵심 기능을 제공하는 서비스, 비즈니스 로직과 클라이언트 요청을 연결하는 컨트롤러를 생성해보겠습니다. 서비스 클래스 만들기 서비스 레이어에서는 도메인 모델(Domain Model)을 활용해 애플리케이션에서 제공하는 핵심 기능을 제공한다. 핵심 기능을 구현하려면 세부 기능을 정의해야한다. 아키텍처의 한계를 극복하기 위해 아키텍처를 서비스 로직과 비즈니스 로직으로 분리하기도 한다. 도메인을 활용한 세부 기능들은 비즈니스 레이어 로직에 구현하고, 서비스 레이어에서는 기능 등을 종합해서 핵심기능을 전달하도록 구성하는 경우가 대표적이다. DTO 클래스 생성 ProductDto @Getter @Setter @NoArgsConstruct.. Book/스프링부트 핵심가이드 2023. 11. 3. DAO(Data Access Object) 개념과 클래스 구성 DAO 설계 데이터베이스 접근하기 위한 로직을 관리하는 객체인 DAO, 구성하는 방법에 대해 알아보겠습니다. DAO(Data Access Object) 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체이다. 비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능을 수행한다. 하지만, Spring Data JPA에서 DAO의 개념은 리포지토리(Repository)가 대체한다. DAO 클래스 생성 DAO 클래스는 일반적으로 '인터페이스-구현체' 구성으로 생성한다. DAO 클래스는 의존성 결합을 낮추기 위한 디자인 패턴이며, 서비스 레이어에 DAO 객체를 주입받을 때 인터페이스를 선언하는 방식으로 구성할 수 있다. ProductDao 구성 package com.springboot.jpa.data.dao; .. Book/스프링부트 핵심가이드 2023. 11. 3. JPA Repository 인터페이스 생성과 사용 방법 리포지토리 인터페이스 설계 Spring Data JPA는 JpaRepository를 기반으로 더욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공한다. 스프링부트로 JpaRepository를 상속하는 인터페이스를 생성하는 방법과 활용하는 방법을 알아보겠습니다. 리포지토리 인터페이스 생성 리포지토리(Repository)는 Spring Data JPA가 제공하는 인터페이스이다. 리포지토리는 엔티티가 생성한 데이터베이스에 접근하는데에 사용한다. package com.springboot.jpa.data.repository; import com.springboot.jpa.data.entity.Product; import org.springframework.data.jpa.repository.JpaReposit.. Book/스프링부트 핵심가이드 2023. 11. 2. 엔티티(Entity) 설계 및 클래스 구성 엔티티 설계와 클래스 구성 엔티티(Entity) 설계하는 것과 엔티티를 사용하기 위한 클래스 구성하는 방법에 대해서 알아보겠습니다. 엔티티 설계 Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없다. JPA에서는 엔티티는 데이터베이스의 테이블에 대응하는 클래스이다. 엔티티에는 데이터베이스에 쓰일 테이블과 칼럼을 정의한다. 엔티티에 어노테이션을 사용하면 테이블 간의 연관관계를 정의할 수 있다. 엔티티 클래스 내용 클래스 생성 후에 application.properties에 정의한 spring.jpa.hibernate.ddl-auto 값을 create 같은 테이블을 생성하는 옵션으로 생성하면 쿼리문을 작성하지 않아도 데이터베이스에 테이블이 자동으로 만들.. Book/스프링부트 핵심가이드 2023. 11. 2. 이전 1 2 3 다음