JAVA/JPA

[JPA] JPA 소개

4Legs 2021. 3. 16. 00:55

SQL 중심 개발의 한계

다음 코드를 보자.

public class Member{
	private String memberId;
	private String name;
	//...
}
INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES ...
SELECT MEMBER_ID, NAME FROM MEMBER M
UPDATE MEMBER SET ...

 

위 코드에서, Member 객체에 전화번호 정보에 해당하는 필드 tel을 추가하고자 한다.

우리는 Member 객체에 단순히 tel 필드를 추가하는 것에 더해,

모든 MEMBER 관련 쿼리에 tel에 관한 정보를 추가해줘야 한다.

 

엔티티 신뢰성 문제

MemberDAO에서 Member 객체 하나를 꺼내왔다고 가정하고, 이 객체를 member라 하자.

(DAO : Data Access Object)

class MemberService{
	//...
	Member member = memberDAO.find(id);
	member.getOrder().getDelivery();
}

일반적인 객체 지향 코드에서는 member 객체의 주문 정보(Order)를 얻기 위해 위처럼 getter 메소드를 사용한다.

하지만 이 방법은 member가 항상 Order에 대한 정보를 가지고 있다고 보장된 경우에만 사용 가능하다.

(만약 member 객체가 Order 객체를 가지고 있지 않다면 NullPointerException이 발생할 것이다.)

즉, DAO를 통해 데이터를 가져올 때, 해당 쿼리가 우리가 원하는 정보를 포함하고 있는지 직접 확인해야 한다.

이러한 문제로 인해 SQL 의존적인 개발을 피하기 어렵게 된다.

 

패러다임의 불일치

결국 위의 문제들은 관계형 데이터베이스와 객체 지향 프로그래밍의 패러다임 차이에 의해서 발생한다.

관계형 데이터베이스는 "데이터를 어떻게 잘 저장할까?" 에 초점이 맞춰진 반면,

객체 지향 프로그래밍은 "데이터를 어떻게 더 추상화해 관리를 용이하게 할까?" 에 초점이 맞춰져 있기 때문이다.

이러한 관점의 차이에 의해, 우리는 객체 형태의 데이터를 항상 SQL로 매핑하게 된다. 문제는 이러한 매핑 작업이 과하다는 것이다.

 

JPA (Java Persistence API)

이러한 문제를 해결해주기 위해, 자바는 JPA라는 ORM 기술 표준을 제공한다. (ORM : Object-Relational Mapping)

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

이후의 포스팅에서는 JPA의 기초와 더불어 사용 시 어떤 이점이 있는지 자세하게 알아보자.

 

 

Reference

자바 ORM 표준 JPA 프로그래밍

'JAVA > JPA' 카테고리의 다른 글

[JPA] 영속성 컨텍스트 (Persistence Context) - (1)  (0) 2021.03.30
[JPA] 상속관계 매핑  (0) 2021.03.30
[JPA] 다양한 연관관계  (0) 2021.03.19
[JPA] 연관관계 매핑  (0) 2021.03.16
[JPA] JPA 매핑 - 기초  (0) 2021.03.16