Post

JPA 0. SQL Table VS Java object

SQL 테이블과 자바 객체의 차이점, 그로인해 발생하는 문제들

JPA는 SQL 테이블과 자바 객체 사이의 불일치 문제를 해결하는 해결책을 제공해준다. JPA에 대해서 자세히 알아보기 이전에, SQL 테이블과 자바 객체 사이 불일치로 발생하는 문제점, 그리고 JPA에 대해서 간단하게 정리해보자

1. 수 많은 반복적인 SQL 문들

첫번째 문제는 테이블과 객체 사이 불일치로 인해 발생하는 문제는 아니지만, 자바 애플리케이션에서 SQL을 이용해서 객체를 저장하고, 디비에 저장할 때 발생하는 문제이다. 객체에 CRUD 작업을 진행할 때, 그에 대응하는 SQL 쿼리를 테이블마다 작성을 해야하고, 객체 속성이 추가되거나, 삭제될때마다 그에 따라 CRUD 쿼리를 모두 수정해줘야한다.

JPA를 사용하지 않으면 개발자가 직접 모든 객체 CRUD에 대한 SQL 쿼리를 작성해야하고, 테이블이 많거나, 객체 구조가 자주 바뀌는 환경에서 작업량은 정말 많을 것으로 예상된다.

2. 연관관계, 객체 상속

객체는 다른 객체를 상속하거나, 다른 객체를 참조해서 가질 수 있다

아래 코드 참조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Person {
  Long id;
  Long age;
  String name;
}

public class Member extends Person {

  LocalDateTime joinDate;
  Team team;

}

public class Team {
  String name;
  List<Member> members;
}

Member 객체를 SQL 테이블에 저장하기 위해서는 Person 테이블에도 값을 저장해야하고, Member 테이블에도 값을 저장해야한다. 조회할 때도 두 테이블에서 값을 읽어와야한다. 또 Member 객체의 나이를 변경하는 경우에는 Person 테이블의 값을 변경해야하는 어려움이 발생하기도 한다. 객체의 상속 관계는 더 많고 복잡한 쿼리 작성을 요구한다.

참조 관계에서도 어려움은 존재한다. 객체에서는 위 코드처럼 참조 관계를 표현하고, member.getTeam() 같은 메서드를 이용해서 참조 객체를 불러올 수 있다. 하지만 SQL에서는 외래키를 이용한 조인을 통해 데이터를 조회해야한다.


위 두 문제를 제외하고도 객체 그래프 탐색, 테이블에서 조회한 값 비교 문제 등등 여러 문제가 존재한다. JPA를 이용하면 개발자들은 SQL에 의존적이지 않고, 객체 중심적으로 개발할 수 있다.

3. JPA란

JPA는 자바 진영 ORM 기술의 표준이다.

ORM Object Relational Mapping, 개발자로 하여금 SQL 테이블을 객체로 다루는 것을 가능하게 해주는 기술이다.

개발자는 JPA에서 제공해주는 API를 사용해서 자바 객체 다루듯이 SQL 테이블에 CRUD 작업을 처리할 수 있다.

This post is licensed under CC BY 4.0 by the author.