You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
스프링과 JPA는 자바 엔터프라이즈 시장의 주력 기술이다.
스프링이 DI 컨테이너를 포함한 애플리케이션 전반의 다양한 기능을 제공한다면 JPA ORM 데이터 접근 기술을 제공한다.
실무에서는 JPA를 더욱 편리하게 사용하기 위해 Spring Data JPA의 Querydsl 이라는 기술을 함께 사용한다. 중요한 것은 JPA이다. 스프링 데이터 JPA, Querydsl은 JPA를 편리하게 사용하도록 도와주는 도구라 생각하면 된다.
해당 기술들의 기본 기능과 왜 사용해야 하는지 각각의 장단점을 알아본다.
ORM 개념 1 - SQL 중심적인 개발의 문제점
SQL에 의존적인 개발을 피하기 어렵다.
패러다임의 불일치가 일어난다.
객체지향 프로그래밍
추상화, 캡슐화, 정보 은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.
관계형 데이터 베이스
객체를 관계형 데이터 베이스에 저장한다.
SQL 변환 : 개발자가 하는 일이다. SQL 매퍼 역할을 개발자가 해주고 있다.
컬렉션에서 조회하면 금방 상속된 객체를 저장할 수 있다.
상속이 없음(슈퍼, 서브 타입이 있지만..)
그리고 객체를 분할해야 한다.
JOIN을 하고(외래키로) 각각의 객체를 생성한다 ..
등 복잡하다.
참조로 연관관계를 맺는 편이다.
보통 객체를 테이블에 맞추어 모델링을 한다.
객체다운 모델링
객체 모델링, 자바 컬렉션에서 관리한다.
객체 모델링 조회
객체 그래프 탐색

처음 실행하는 SQL에 따라 탐색 범위를 결정할 수 있다.
객체는 자유롭게 객체 그래프를 탐색할 수 있어야한다.
엔티티 신뢰문제
모든 객체를 미리 로딩할 수 없다.
상황에 따라 동일한 회원 조회 메서드를 여러벌 생성해야 한다.
비교하기
비교하기 - 자바 컬렉션에서 조회
객체답게 모델링할수록 매핑작업만 늘어난다.
객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까
ORM 개념2 - JPA 소개
Java Persistence API
자바 진영의 인터페이스 표준
ORM
JPA는 애플리케이션과 JDBC 사이에서 동작

JPA의 동작 - 저장

JPA의 동작 - 조회

JPA :
EJB → 하이버네이트 (오픈소스) → JPA (자바 표준)
JPA를 왜 사용해야 하는가?
SQL 중심적인 개발에서 객체 중심으로 개발
생산성
유지보수
기존: 필드 변경시 모든 SQL 수정

JPA: 필드만 추가, SQL은 JPA가 처리

패러다임의 불일치 해결
JPA 상속
저장

조회

연관관계

객체 그래프 탐색

성능
JPA는 애플리케이션과 DB 사이에 계층이 있다.
동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.
1차 캐시와 동일성 보장
트랜잭션을 지원하는 쓰기 지연: INSERT
지연로딩
유지보수
기존 : 필드 변경시추가만 하면 된다.
JPA와 패러다임의 불일치 해결
JPA 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장
ORM은 객체와 RDB 두 기둥위에 있는 기술이라 둘다 이해해야 한다.
JPA 설정
spring-boot-starter-data-jpa 라이브러리를 사용하면 JPA와 스프링 데이터 JPA를 스프링 부트와 통합하고 설정도 아주 간단히 할 수 있다.
spring-boot-starter-data-jpa 라이브러리를 사용해서 간단히 설정하는 방법을 알아보자.
build.gradle에 다음 의존관계를 추가한다.implimentation 'org.springframework.boot:spring-boot-starter-data-jpa'org.mybatis~ implementation을 쓸때 JDBC template ㅍ없어도 된다.
하이버네이트 추가가 된다
스프링 데이터 jpa도 추가된다.
[application.properties](http://application.properties/)에 다음 설정 추가main = application.properties
test
org.hibernate.SQL=DEBUG: 하이버네이트가 생성하고 실행하는 SQL을 확인할 수 있다.org.hibernate.type.descriptor.sql.BasicBinder=TRACE: SQL에 바인딩 되는 파라미터를 확인할 수 있다.spring.jpa.show-sql=true: 참고로 이런 설정도 있다 이전 설정은 logger를 통해서 SQL이 출력된다. 이 설정은 System.out 콘솔을 통해서 SQL이 출력된다. 따라서 이 설정은 권장하지는 않는다.(둘다 켜면 logger, System.out 둘다 로그가 출력되어서 같은 로그가 중복해서 출력된다.)
All reactions