![[자바 ORM 표준 JPA 프로그래밍 - 기본편] 1. JPA 소개](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVQUT0%2FbtsCUB3oGUD%2FWsgy3sKKhLbBZQIheGMVo0%2Fimg.png)
인프런 김영한 강사님의 [자바 ORM 표준 JPA 프로그래밍 - 기본편]을 수강하고 정리한 글입니다.
자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런
현업에서 실제로 JPA로 개발을 하고 있습니다. 그런 입장에서보면 지금 작성하고 있는 코드들이 어떻게 작동하는지 이해하는데 큰 도움을 주는 강의입니다. 다음은 제가 느낀 이 강의의 장점들
www.inflearn.com
📌 SQL 중심적 개발의 문제점
✅ 웹 개발 현황
애플리케이션 : 객체 지향 언어 (Java 등)으로 개발한다.
데이터베이스 : RDBMS (MySQL, Oracle ...)로 보통 개발한다. (NoSQL일 수도 있긴 함)
한마디로 대부분의 웹 개발은 객체를 관계형 DB에서 관리한다고 볼 수 있다.
✅ SQL 중심적 개발의 문제점
비슷한 쿼리문을 반복하여 작성하게 되어 지루하다.
객체 CRUD에서 필드를 추가할 때마다 쿼리문도 추가하게 되어 유지보수에 좋지 않다.
이는 SQL에 의존하는 개발을 피하기 점점 어려워짐을 의미한다.
객체 지향 프로그래밍은 객체 지향의 특징인 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 다양한 장치들을 활용할 수 있는데, SQL에 의존하는 개발을 하다 보니 개발자가 단순 SQL Mapper가 되어버린다.
연관관계를 표현하는 방식에서도 두 패러다임은 충돌한다.
객체는 참조를 사용하고, 테이블은 외래 키를 사용한다.
객체답게 설계하고 모델링하면 할 수록, 왠지 매핑 작업만 늘어난다.
객체를 Java의 Collection에 저장하듯이 DB에 저장할 수는 없을까?
📌 JPA 소개
✅ JPA
Java Persistence API의 줄임말.
Java 진영의 ORM 기술의 표준이다.
✅ ORM
Object-Relational Mapping의 줄임말. (객체 관계 매핑)
객체는 객체대로 설계하고, RDBMS는 RDBMS대로 설계한다.
대신 ORM Framework가 객체와 RDBMS 중간에서 매핑을 대신 해준다.
✅ JPA 동작
JPA는 애플리케이션과 JDBC 사이에서 동작한다.
기본적인 JPA의 동작들은 아래와 같다. (조회 / 저장)
✅ JPA 구현체
JPA는 기본적으로 인터페이스의 모음이다.
그리고 이 JPA 2.1의 표준 명세를 구현한 3 가지 구현체가 존재한다.
- Hibernate (하이버네이트)
- EclipseLink
- DataNucleus
✅ 왜 JPA를 사용해야 할까?
SQL 중심적인 개발에서 탈피하여, 객체 중심적인 개발로 이어진다.
이는 객체 지향 프로그래밍의 여러 특징들과 장점들을 더욱 잘 살릴 수 있는 기회다.
생산성 / 유지보수 / 성능 측면에서 우수하다.
객체와 RDBMS 사이의 패러다임의 불일치를 해결해준다.
데이터 접근 추상화와 벤더 독립성의 장점을 가진다.
데이터 접근 추상화란?
개발자가 데이터베이스 작업을 할 때, 구체적인 DB 작업에 집중하지 않고 비즈니스 로직에 더 집중하게 되어 객체 중심적인 사고를 할 수 있다.
이는 개발 과정을 단순화시키고, DB 작업을 더 직관적이고 객체 지향적으로 만든다.
벤더 독립성이란? (Vendor Independence)
개발자가 특정 DB 벤더에 종속되지 않게 해준다.
즉, JPA는 표준화된 API를 제공하기 때문에 개발자는 DB 공급자가 변경되더라도 애플리케이션 코드를 수정할 필요가 없다.
이는 DB 선택의 유연성을 제공하고, 장기적으로 기술 스택을 변경할 때 비용과 노력을 절약할 수 있게 해준다.
✅ JPA와 CRUD
- 저장
- jpa.persist()
- 조회
- jpa.find()
- 수정
- member.setName("")
- 삭제
- jpa.remove()
📌 JPA와 패러다임 불일치의 해결
✅ JPA와 상속
- 저장
// 개발자가 직접 입력하는 코드
jpa.persist(album);
// JPA가 알아서 처리하는 코드
INSERT INTO ITEM ...
INSERT INTO ALBUM ...
- 조회
// 개발자가 직접 입력하는 코드
Album album = jpa.find(Album.class, albumId)
// JPA가 알아서 처리하는 코드
SELECT I.*, A.*
FROM ITEM I
JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID
✅ JPA와 연관관계, 객체 그래프 탐색
// JPA로 연관관계 저장하는 법
member.setTeam(team);
jpa.persist(member);
// JPA로 객체 그래프 탐색하는 법
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();
✅ JPA에서 엔티티 비교하기
String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);
member1 == member2; //같다.
위 코드는 동일한 트랜잭션에서 조회한 엔티티는 서로 같다는 것을 보장한다.
'Backend > JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 6. 다양한 연관관계 매핑 (0) | 2024.01.04 |
---|---|
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 5. 연관관계 매핑 기초 (0) | 2024.01.04 |
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 4. 엔티티 매핑 (0) | 2024.01.04 |
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 3. 영속성 관리 - 내부 동작 방식 (0) | 2024.01.04 |
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 2. JPA 시작하기 (0) | 2024.01.03 |
개발자가 되고 싶어요.