카테고리:

업데이트:

1. 들어가기

이번 포스트는 JPA의 배경에 대해 알아보겠습니다.

2. JDBC

초창기 Java는 DB를 사용하기 위해 어떻게 작업했을까요?

모든 DB와 Java Application을 연결하기 위해서는 커넥션 연결을 해야하고,

해당 커넥션으로 SQL을 전달해 그에 대한 결과를 응답 받습니다.

하지만 우리가 아는 DBMS는 Oracle, MySQL, MS-SQL 등 여러 DBMS가 존재합니다.

DBMS마다 구조와 특징이 다르기 때문에 개발자는 각 DBMS에 맞게 API를 개발해야 했습니다.

뿐만 아니라, 새로운 DBMS를 사용하려면 추가적으로 해당 DBMS의 커넥션 방법을 알아야 했습니다.

이것은 개발자에게 많은 어려움이 있었습니다.

그래서 Java는 모든 DBMS에 동일하게 접근할 수 있도록 표준화를 진행했습니다.

Java는 모든 DBMS에 동일하게 접근할 수 있도록 인터페이스를 미리 정의한 후,

실제 구현인 드라이버는 DBMS 개발사에서 하게 했습니다.

이제 Java 개발자는 어떤 DBMS든 인터페이스의 메서드를 통해 커넥션을 요청할 수 있게 되었습니다.

어떤 DBMS든 연결 및 작업을 할 수 있는 메서드가 포함된 이 인터페이스를 JDBC라고 부릅니다.

3. JDBC의 문제점

JDBC로 인해 개발자들은 더 이상 각 DBMS에 맞게 구현할 필요가 없어졌습니다.

하지만, 또 다른 문제점이 있었는데요.

아래의 JDBC 코드를 보면서 JDBC의 문제점이 무엇인지 알아봅시다.

  Connection conn = null;
  try {
    // Load MySQL JDBC Driver
    Class.forName("com.mysql.cj.jdbc.Driver");
    
    // Connection
    conn = DriverManager.getConnection(MySQL URL, MySQL id, MySQL pwd);
    
    // Create Statement Object
    Statement stmt = conn.createStatement();
    
    StringBuffer sql = new StringBuffer("SELECT * FROM CUSTOMER_MST MST");
    sql.append("INNER JOIN ORDER ORD ON MST.CUSTOMER_NO = ORD.ORD_NO");
    ... 

    // Execute SQL
    List<Customer> PurchaseCustomerList = new ArrayList<>();
    ResultSet res = stat.executeQuery(sql.toString());

    while(res.next()) {
      Customer customer = Customer.builder()
                                  .customerNo(res.getString("customer_id"))
                                  .customerName(res.getString("customer_name"))
                                  ...
                                  .build();

      PurchaseCustomerList.add(customer);
    }
    
    // Disconnection
    stat.close();
    conn.close();
  } catch (Exception e) {
    // error 처리
  }

위의 예시는 정상적인 코드로 기능적인 문제점은 없습니다.

하지만 첫 번째, 커넥션과 SQL 문이 같은 코드 상에 있어 유지보수의 문제점이 있습니다.

두 번째, 실행 결과를 하나씩 매핑해야 하는 문제점이 있습니다.

이 두 문제를 해결하기 위해 Java Persistence Framework가 탄생했습니다.

4. Java Persistence Framework

Java Persistence Framework에는 두 가지 종류가 있습니다.

  1. SQL Mapper

    SQL Mapper는 SQL 문장으로 직접 데이터베이스 데이터를 다루는 SQL Helper로

    대표적인 예로는 MyBatis가 있습니다.

  2. ORM(Object Relational Mapping)

    ORM은 객체를 통해 간접적으로 데이터베이스 데이터를 다루고

    대표적인 예로는 이번 카테고리에서 알아볼 JPA가 있습니다.

5. 정리

이번 포스트는 JPA라는 기술의 배경에 대해 알아보았습니다.

간단하게 요약하면, JDBC는 유지보수, Object Mapping 문제점이 있었습니다.

그래서 그 문제점을 보완하고자 Java Persistence Framework가 만들어졌고,

Java Persistence Framework 중 ORM의 대표적인 예가 JPA입니다.

그럼 지금부터 JPA에 대해 알아봅시다.

            
              📕 개인 기록용 블로그입니다.
              😊 오타나 잘못된 정보가 있을 경우 댓글이나 메일로 말씀해주시면 바로 수정하겠습니다! 😊
          

댓글남기기