Spring Boot/Spring Boot JPA-기본편 강의 정리(김영한)

[SpringBoot-JPA 기본편] 자바 ORM 표준 JPA 프로그래밍 - 기본편: 1. JPA 소개

조찬국 2024. 2. 23. 18:11
728x90

 

강의 출처:https://www.inflearn.com/course/ORM-JPA-Basic#curriculum

해당 강의는 Inflearn에 등록된 김영한님의 Spring Boot 강의입니다.

카테고리 시작 하기에 앞서 이번 카테고리는 JPA에 대한 간략한 소개만 할 예정이다. 이유는 JPA 활용편1과 겹치는 내용이 있는데 그 부분은 JPA 활용편1 카테고리에 정리 하겠다.

이번 장에는 JPA를 소개하는 글을 작성 할 예정이다. 우선 지난 포스팅에 업로드 했던 윈도우 사용자를 위한 IntelliJ 단축키를 다시 한번 작성 하겠다. 매 카테고리 시작마다 앞으로 단축키를 업로드 할 예정이다.
한번씩 읽어보시고 외워 주세요! 개발의 질이 달라집니다.

0. Intelli J(인텔리 제이) 단축키 모음 (윈도우 사용자)

  • Ctrl + /-> 주석 처리 및 주석 해제
  • Alt + enter-> 임포트 추가 및 함수 생성 등 대부분 빨간 줄 해결
  • 그냥 코드에 sout 입력+ tab->System.out.println();
  • Shift + F6 -> 클릭한 변수와 다른 변수들의 이름이 같으면 해당 변수들의 이름을 한번에 편집가능.
  • Ctrl + alt + v-> 선택한 코드 블록을 변수로 추출하는 단축키

  • Ctrl + alt + m -> 선택한 코드 블록을 메소드로 추출하는 단축키

  • Ctrl + alt + p-> 메서드 호출시 매개변수 자동생성 단축키임
  • Ctrl + alt + l-> Reformat Code. 즉, 코드를 예쁘게 꾸며 줌.
  • Ctrl + n -> 클래스 검색
  • Ctrl + shift-> 한컴입력기 or microsoft 입력기
    (한글 깔려 있는 사람들 주석 처리 안되면 microsoft입력기로 입력)
  • Fn + alt + insert -> generate 키
    (getter,setter,생성자, equals(), hashCode()등등 유용한 코드 블럭들을 사용 가능)

  • Ctrl + shift + T => 생성한 repository에서 테스트 케이스 작성 단축키

1. 객체와 관계형 데이터베이스의 차이

  • 상속
  • 연관관계
  • 데이터 타입
  • 데이터 식별 방법

자바 객체SQL문으로 변환하여 일일이 RDB(관계형 데이터 베이스) 에 저장 하는 과정이다.

좌측: 객체, 우측 엔티티

위에 예시들은 자바 애플리케이션에서 생성한 객체(도메인)들을 DB 도메인으로 매핑하기가 굉장히 어렵다.

그 뿐만 아니라 객체끼리의 관계를 정의 하는 것이 가장 어렵다.

 

데이터베이스에서 테이블 간의 관계는 외래 키(Foreign Key)를 통해 표현된다.

 

예를 들어보자. 회원(Member) 테이블과 주문(Order) 테이블이 있다고 해보자. 회원은 여러 번의 주문을 할 수 있으므로, 회원과 주문 사이에는 일대다(1:N) 관계가 형성된다. 이 관계를 데이터베이스에서 구현하기 위해, 주문 테이블에는 회원 테이블의 기본 키(Primary Key)를 참조하는 외래 키가 포함된다.

주문 테이블과 주문 상품(Order Item) 테이블 간에도 비슷한 관계가 있다. 하나의 주문은 여러 개의 주문 상품을 포함할 수 있으므로, 이 또한 일대다(1:N)관계이다. 따라서, 주문 상품 테이블에는 주문 테이블의 기본 키를 참조하는 외래 키가 포함된다.

 

개발자사용자에게 사용자어제 주문주문 상품배송 정보를 제공하려면, 다음과 같은 절차를 따른다:

  1. 회원 조회: 먼저, 사용자의 정보를 기반으로 회원 테이블에서 해당 회원을 찾는다.
  2. 주문 조회: 찾아낸 회원의 ID를 사용하여 주문 테이블에서 해당 회원의 주문 내역을 조회한다. 이때, 특정 날짜 조건을 만족하는 주문만 필터링한다. 이때 주문 테이블속성에 대한 조건이 있으므로 동적 쿼리로 작성하여 조회한다.
  3. 주문 상품 조회: 각 주문에 대해 주문 상품 테이블에서 해당 주문의 주문 상품들을 찾는다.
  4. 배송 정보 조회: 마지막으로, 각 주문 상품에 대해 배송 정보를 조회한다.

이 과정에서 SQL 쿼리는 여러 테이블을 조인하여 필요한 정보를 한 번에 조회할 수 있도록 작성된다. 예를 들어, 회원, 주문, 주문 상품, 그리고 배송 정보를 모두 조인하는 쿼리를 사용하여, 특정 회원이 특정 날짜에 주문한 모든 상품의 배송 상태를 한 번에 확인할 수 있다.

 

이렇게 복잡한 쿼리를 통해 데이터베이스에서 관계형 데이터를 조작하고 관리하는 과정은 ORM을 사용함으로써 추상화되고 간소화된다. JPA와 같은 ORM 기술을 사용하면, 개발자객체 지향적인 방식으로 이러한 데이터 관계표현할 수 있으며, 복잡한 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있다.

 

복잡한 쿼리는 백엔드 개발자와 밀접하지만 비즈니스 로직을 설계하는데도 시간이 오래 걸리는데 이러한 객체들의 관계들 마저도 쿼리 문장으로 만들어야하면 매우 힘든 작업이 될 것이다.

2. JPA와 ORM이란?

JPA(Java Persistence API):

  • 자바 ORM기술에 대한 표준 명세
  • 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 간소화한다.

ORM(Object-Relational Mapping-객체 관계 매핑):

  • 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간데이터변환하는 프로그래밍 기술이다.
  • 객체는 객체대로 설계하고, 관계형 데이터 베이스는 관계형 데이터 베이스대로 설계한다.
  • ORM 프레임워크인 JPA가 객체와 데이터 베이스와중간에서 매핑한다.
  • 즉, JPA를 사용하면 개발자객체 지향적으로 데이터를 관리할 수 있다.

2. JPA 동작 방식

1. JPA는 JAVA 애플리케이션과 JDBC사이에서 동작한다.

 

 

2. JPA 저장 동작

jpa는 저장시 객체를 영속성 컨텍스트라는곳에 저장한다. 혹은 객체에게 영속성을 부여 한다.

이때 영속성은 추후 영속성 컨텍스트 정리에서 설명하겠다

 

3. JPA 조회 동작

영속성 컨텍스트에 저장된 객체의 id만 find(조회)하면 entity object반환한다.

 

 

4. JPA와 연관관계 및 객체 그래프 탐색

연관관계 저장시 물론 좀 더 복잡하게 해야한다. 다만 관계만 제대로 정의하면 추가적인 쿼리 작성문이 필요없이 jpa의 메서드를 이용하여 로직을 처리할 수 있다.

 

예를들면, 객체 그래프 탐색과 같이 회원을 조회하고, 회원 객체에서 Team을 찾는 getter를 통해 회원이 속해있는 팀을 조회 할 수 있게 되었다. 이렇게 객체스럽게 조회 할 수 있게 해주는 것이 jpa이다.
(쿼리문은 자동으로 작성해서 db에서 조회함. 추후 콘솔창을 통해 확인 하겠습니다.)

3. JPA의 지연로딩과 즉시 로딩

다음과 같이 쿼리문을 보내는 방식을 선택 할 수 있다. 지금은 이정도만 있다고 넘어가면 된다.
(JPA 활용편1에서 지연로딩만 써야하는 이유를 성능과 N+1문제와 함께 설명하겠습니다.)

 

이번장에는 JPA에 대한 개념을 간략하게 소개해봤다. 다음시간부터는 실제로 JPA로 ORM을 하는 과정을 정리 하겠다.
728x90