[SpringBoot-JPA 기본편] 자바 ORM 표준 JPA 프로그래밍 - 기본편: 1. JPA 소개
강의 출처: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)
관계이다. 따라서, 주문 상품 테이블에는 주문 테이블의 기본 키를 참조하는 외래 키가 포함된다.
개발자가 사용자에게 사용자
가 어제
주문
한 주문 상품
의 배송 정보
를 제공하려면, 다음과 같은 절차를 따른다:
- 회원 조회: 먼저, 사용자의 정보를 기반으로 회원 테이블에서 해당 회원을 찾는다.
- 주문 조회: 찾아낸 회원의 ID를 사용하여 주문 테이블에서 해당 회원의 주문 내역을 조회한다. 이때, 특정 날짜 조건을 만족하는 주문만 필터링한다. 이때 주문
테이블
의속성
에 대한조건
이 있으므로동적 쿼리
로 작성하여 조회한다. - 주문 상품 조회: 각 주문에 대해 주문 상품 테이블에서 해당 주문의 주문 상품들을 찾는다.
- 배송 정보 조회: 마지막으로, 각 주문 상품에 대해 배송 정보를 조회한다.
이 과정에서 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을 하는 과정을 정리 하겠다.