Backend/Spring Boot
[자바 ORM 표준 JPA 프로그래밍] 1장
lim.dev
2023. 4. 4. 20:46
1장에서는 객체지향적인 설계와 관계형 데이터베이스를 매핑하는 ORM(Object-Relational Mapping)의 등장 배경과 이점, 그리고 JPA(Java Persistence API)를 알 수 있었습니다.
- 객체지향적인 설계와 관계형 데이터베이스의 불일치 문제
- 객체지향적인 설계와 관계형 데이터베이스 간의 불일치 문제
- 등록, 수정, 삭제, 조회용 SQL을 반복해서 작성
- 객체지향의 장점을 포기하고 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 함
- ORM 기술의 등장 배경
- 객체 모델링을 적용하였으나 세밀화 될 수록 객체 저장 및 조회가 점점 어려워 짐
- 관계형 데이터베이스와 객체 간의 차이를 메우기 위해 더 많은 SQL 작성
- 객체 모델이 점점 데이터 중심의 모델로 변해감
- ORM: 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해주는 프레임워크
- 객체지향적인 설계와 관계형 데이터베이스 간의 불일치 문제
- ORM의 이점
- 객체지향 프로그래밍의 이점을 그대로 유지할 수 있다
- 객체 모델링과 관계형 데이터베이스 사이의 차이도 해결해줌
- 생산성을 높일 수 있다
- 반복적인 CRUD SQL을 알아서 처리해줌
- 조회된 결과를 객체로 매핑하는 작업을 대부분 자동으로 처리해줌
- 데이터 저장 계층의 작업량이 1/3으로 줄음
- 객체지향 프로그래밍의 이점을 그대로 유지할 수 있다
- JPA란?
- JPA는 자바 ORM 기술에 대한 API 표준 명세
- 자바에서 ORM을 구현하기 위한 표준 기술
- 즉, 인터페이스를 모아둔 것
- ORM 기술을 사용하기 위한 다양한 프레임워크 중 하나
- 성능에 대한 걱정
- JPA가 제공하는 네이티브 SQL 기능을 사용해서 직접 SQL을 작성
- 데이터베이스 쿼리 힌트로 사용
- JPA는 자바 ORM 기술에 대한 API 표준 명세
- JPA의 장점과 특징
- SQL을 직접 작성하지 않고 객체를 다루듯이 직관적인 방법으로 데이터를 다룰 수 있다
- 생산성 향상 -> 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전
- DBMS 종류에 따라 SQL 쿼리문이 달라지지 않아도 동일한 결과를 얻을 수 있다
- 유지보수, 유연 -> 개발자가 작성해야 했던 SQL과 JDBC API 코드를 JPA가 대신 처리해줌
- 객체지향적인 설계와 데이터베이스 스키마 간의 불일치(패러다임 불일치)를 해결할 수 있다
- 다양한 성능 최적화 기회 제공
- 데이터 접근 추상화와 벤더 독립성
- SQL을 직접 작성하지 않고 객체를 다루듯이 직관적인 방법으로 데이터를 다룰 수 있다
참고
- 동일성 비교: == 비교, 객체 인스턴스의 주소 값을 비교함
- 동등성 비교: equals() 메소드를 사용하여 객체 내부 값을 비교
JPA의 비교
- 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장한다.
String memberId = "100";
Member member1 = jpa.find(Member.class, MemberId);
Member member2 = jpa.find(Member.class, MemberId);
member1 == member2; // 같다