웹 백엔드/개념정리

개념정리3 - 데이터베이스 접속(Connection) 객체란 무엇이며, 해당 객체를 구하는 방법은?

Blue_bull 2025. 1. 19. 22:51

데이터베이스 접속(Connection) 객체란 무엇이며, 해당 객체를 구하는 방법은?

  • Connection 객체는 자바 프로그램과 데이터베이스 간의 연결을 나타냅니다.
  • 구하는 방법: DriverManager.getConnection(url, username, password)를 호출하여 생성합니다.

    추가 질문1 :

    1. 접속(Connection)이란, DriverManager.getConnection(url, username, password)가 무엇인가, 데이터베이스에서 객체란?

    2. Connection이 객체라는 건 Connection는 참조변수 또는 인스턴스인거야?

1. 접속(Connection)이란?

  • 접속(Connection) 은 자바 애플리케이션이 데이터베이스와 통신을 위한 연결을 설정하는 것을 의미합니다.
  • 이 연결은 클라이언트(자바 애플리케이션)와 서버(데이터베이스) 간 데이터 전송을 가능하게 하는 논리적 경로입니다.
  • Connection 객체를 사용해 데이터를 읽고 쓰거나, SQL 명령을 실행하며, 트랜잭션을 제어합니다.

2. DriverManager.getConnection(url, username, password)란?

  • 이 메소드는 JDBC에서 데이터베이스와 연결을 설정하는 데 사용됩니다.

  • 작동 과정:

    1. DriverManager는 등록된 JDBC 드라이버 중 적합한 드라이버를 선택.
    2. 드라이버를 통해 데이터베이스와 연결을 설정.
    3. 데이터베이스와 연결된 Connection 객체를 반환.
  • 매개변수:

    • url: 데이터베이스의 위치 및 접속 정보. 예: jdbc:mysql://localhost:3306/mydb.
    • username: 데이터베이스 사용자 이름.
    • password: 데이터베이스 사용자 비밀번호.
  • 예제:

    Connection conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/mydb", "user", "password");

3. 데이터베이스에서 객체란?

  • 데이터베이스 객체는 데이터베이스에서 데이터를 저장하거나 관리하는 모든 엔터티를 말합니다.

    • 예시:
      • 테이블: 데이터를 행과 열의 구조로 저장.
      • : 테이블의 특정 데이터에 대한 가상 테이블.
      • 인덱스: 데이터를 빠르게 검색하기 위한 구조.
      • 트리거: 특정 이벤트 발생 시 실행되는 코드.
      • 스토어드 프로시저: 미리 저장된 SQL 코드 블록.
  • Connection 객체는 데이터베이스와 애플리케이션 간 통신을 담당하는 객체입니다.


4. Connection이 객체라는 건 Connection은 참조변수 또는 인스턴스인 거야?

  • Connection은 객체의 참조변수입니다.

    • 객체: DriverManager.getConnection()이 반환하는 Connection 타입의 인스턴스.
    • 참조변수: 이 객체를 메모리에서 참조하기 위해 사용하는 변수.
  • 예시:

    Connection conn = DriverManager.getConnection(url, username, password);
    • connConnection 객체를 참조하는 변수입니다.
    • DriverManager.getConnection() 메소드가 Connection 객체를 생성(인스턴스화)하고, 이를 참조변수 conn에 저장합니다.

5. Connection 객체와 참조변수의 관계

  • Connection 객체DriverManager.getConnection() 메소드에서 생성되는 실제 객체.
  • 참조변수는 객체를 참조하기 위한 변수이며, 메모리 주소를 저장합니다.
  • 비유:
    • Connection conn은 책의 "책갈피"와 같고, Connection 객체는 실제 "책"입니다. 책갈피를 통해 책의 내용을 읽을 수 있는 것처럼, 참조변수를 통해 Connection 객체의 메소드에 접근할 수 있습니다.

결론

  1. 접속(Connection)은 자바 애플리케이션이 데이터베이스와 통신하기 위해 설정하는 연결.
  2. DriverManager.getConnection()은 데이터베이스 연결을 생성하고 Connection 객체를 반환.
  3. Connection 객체는 생성된 인스턴스이며, conn과 같은 변수는 그 객체를 참조하는 참조변수입니다.

추가질문2:

1. 트랜잭션은 자바와 연동된 상태에서 어떻게 사용할 수 있는가?

2. 엔터티가 속성과 행동을 가질 수 있다는 말은 엔터티명이 속성과 행동을 나타낸다는 것인가?

3. 트리거 코드는 어떤 방식으로 작성하는가?

4. 스토어드 프로시저에 포함되는 코드에는 어떤 것들이 있는가?

1. 트랜잭션(Transaction)이란?

  • 트랜잭션은 데이터베이스에서 논리적으로 하나의 작업 단위를 의미합니다.

  • 트랜잭션은 작업의 일관성을 보장하며, ACID 속성을 따릅니다:

    1. Atomicity(원자성): 작업이 모두 성공하거나, 실패 시 전혀 반영되지 않아야 함.
    2. Consistency(일관성): 데이터베이스가 항상 유효한 상태를 유지해야 함.
    3. Isolation(독립성): 여러 트랜잭션이 서로 간섭하지 않음.
    4. Durability(내구성): 트랜잭션이 완료되면 변경사항이 영구적으로 저장.
  • : 은행 계좌 이체

    • A 계좌에서 1000원을 빼고, B 계좌에 1000원을 더하는 작업은 하나의 트랜잭션으로 처리. 중간에 실패하면 A와 B 모두 원래 상태로 복구되어야 함.

2. 트랜잭션 제어란?

  • 트랜잭션 제어는 트랜잭션의 실행과 완료를 관리하는 작업입니다.
  • 데이터베이스의 트랜잭션 작업은 JDBC API나 SQL 명령어를 사용하여 제어됩니다.

트랜잭션 제어 주요 명령어

  1. COMMIT:
    • 트랜잭션을 성공적으로 완료하고 변경사항을 저장.
  2. ROLLBACK:
    • 트랜잭션의 작업을 취소하고 이전 상태로 되돌림.
  3. SAVEPOINT:
    • 트랜잭션 내에서 되돌릴 특정 지점을 설정.
  4. SET TRANSACTION:
    • 트랜잭션의 격리 수준 등 속성을 설정.

JDBC에서 트랜잭션 제어 예

Connection conn = DriverManager.getConnection(url, username, password);
try {
    conn.setAutoCommit(false); // 트랜잭션 시작
    Statement stmt = conn.createStatement();
    stmt.executeUpdate("UPDATE accounts SET balance = balance - 1000 WHERE id = 1");
    stmt.executeUpdate("UPDATE accounts SET balance = balance + 1000 WHERE id = 2");
    conn.commit(); // 성공적으로 완료
} catch (Exception e) {
    conn.rollback(); // 실패 시 롤백
} finally {
    conn.setAutoCommit(true); // 자동 커밋으로 복구
}

3. 엔터티(Entity)란?

  • 엔터티는 데이터베이스에서 저장할 수 있는 개체를 말합니다.
  • 현실 세계의 객체(예: 사람, 제품)를 데이터베이스 내에서 테이블로 표현한 것입니다.
  • 특징:
    • 엔터티는 속성(Attributes)행동(Behavior)을 가질 수 있음.
    • 관계형 데이터베이스에서는 주로 테이블로 나타냄.
  • :
    • 고객(Customer) 엔터티:
      • 속성: 이름, 나이, 이메일.
      • 데이터베이스 테이블: customers(id, name, age, email).

4. 트리거(Trigger)와 스토어드 프로시저(Stored Procedure)는 자바에서 만드는 코드인가?

트리거(Trigger)란?

  • 트리거는 데이터베이스에서 특정 이벤트가 발생할 때 자동으로 실행되는 SQL 코드입니다.
  • 자바 코드가 아닌, 데이터베이스 내부에 작성된 SQL 스크립트입니다.
  • 사용 예:
    • 특정 테이블에 데이터가 INSERT될 때 로그 테이블에 기록.

스토어드 프로시저(Stored Procedure)란?

  • 스토어드 프로시저는 데이터베이스에 저장된 미리 정의된 SQL 코드의 집합입니다.
  • 자바 코드가 아니라, 데이터베이스 내부에서 실행되는 서버 측 프로그램입니다.
  • 사용 예:
    • 복잡한 연산이나 여러 SQL 쿼리를 하나의 절차로 묶어 호출.

트리거와 스토어드 프로시저의 차이

구분 트리거 스토어드 프로시저
실행 시점 테이블의 이벤트 발생 시 자동 실행 명시적으로 호출해야 실행.
용도 특정 이벤트(INSERT, UPDATE 등) 처리. 복잡한 작업 절차를 정의하고 재사용.
작성 위치 데이터베이스 내부 데이터베이스 내부.

결론

  • 트랜잭션: 데이터베이스에서 하나의 논리적 작업 단위.
  • 트랜잭션 제어: 트랜잭션의 실행과 완료를 관리(COMMIT, ROLLBACK 등).
  • 엔터티: 데이터베이스에서 저장할 수 있는 개체(테이블로 표현).
  • 트리거와 스토어드 프로시저는 자바가 아닌 데이터베이스에서 작성된 SQL 코드로, 데이터 관리와 연산을 자동화하거나 최적화하는 데 사용됩니다.

추가질문3:

1. 자바와 Oracle에서의 트리거 예시

2. 자바와 Oracle에서의 스토어드 프로시저 예시

1. 자바와 Oracle에서 트리거 사용 예시

트리거는 Oracle 데이터베이스에서 작성되며, 자바 코드에서는 이를 직접적으로 작성하지 않고, 트리거가 실행되도록 데이터베이스에 영향을 주는 SQL 명령을 실행합니다. 아래는 자바와 Oracle 트리거를 연동하는 예시입니다.

Oracle 트리거 예제

  • 목적: orders 테이블에 데이터가 삽입될 때, 이를 order_logs 테이블에 기록.
CREATE OR REPLACE TRIGGER trg_after_insert_order
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    INSERT INTO order_logs (order_id, action, log_time)
    VALUES (:NEW.id, 'INSERT', SYSDATE);
END;
/

자바 코드 예제

  • 자바에서 orders 테이블에 데이터를 삽입하면, 트리거가 실행됩니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class TriggerExample {
    public static void main(String[] args) {
        String url = "jdbc:oracle:thin:@localhost:1521:xe";
        String username = "system";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // Insert into orders table
            String sql = "INSERT INTO orders (id, product_name, quantity) VALUES (?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, 1); // Order ID
            pstmt.setString(2, "Laptop"); // Product Name
            pstmt.setInt(3, 2); // Quantity
            pstmt.executeUpdate();

            System.out.println("Order inserted successfully. Trigger executed.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 자바와 Oracle에서 스토어드 프로시저 사용 예시

스토어드 프로시저는 Oracle 데이터베이스에서 작성되며, 자바에서는 이를 호출하여 실행합니다.

Oracle 스토어드 프로시저 예제

  • 목적: 특정 직원의 월급을 증가.
CREATE OR REPLACE PROCEDURE increase_salary (
    emp_id IN NUMBER,
    increment IN NUMBER
)
IS
BEGIN
    UPDATE employees
    SET salary = salary + increment
    WHERE id = emp_id;

    COMMIT;
END;
/

자바 코드에서 스토어드 프로시저 호출 예

  • 자바에서 Oracle의 스토어드 프로시저를 호출합니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.CallableStatement;

public class StoredProcedureExample {
    public static void main(String[] args) {
        String url = "jdbc:oracle:thin:@localhost:1521:xe";
        String username = "system";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // Call the stored procedure
            String sql = "{CALL increase_salary(?, ?)}";
            CallableStatement cstmt = conn.prepareCall(sql);

            // Set input parameters
            cstmt.setInt(1, 101); // Employee ID
            cstmt.setDouble(2, 5000.0); // Increment amount

            // Execute the stored procedure
            cstmt.execute();

            System.out.println("Salary updated successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

요약

  1. 트리거 예시:
    • Oracle에서 작성: 특정 이벤트 발생 시 데이터베이스 작업 자동 수행.
    • 자바에서 데이터 조작(SQL 실행) → 트리거 자동 실행.
  2. 스토어드 프로시저 예시:
    • Oracle에서 작성: 복잡한 SQL 로직을 묶어서 재사용 가능.
    • 자바에서 CallableStatement를 사용하여 스토어드 프로시저 호출.

추가질문4:

1. ORM과 JPA가 무엇인가?

2. ORM에서는 엔터티를 행동으로 어떻게 표현하는가?

1. ORM과 JPA란?

ORM(Object-Relational Mapping)

  • ORM은 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을 매핑(연결)하는 기술입니다.
  • 목적: 객체와 테이블 간의 데이터 변환을 자동화하여 SQL 코드를 줄이고 생산성을 높임.
  • 객체 지향적 접근 방식을 데이터베이스 작업에 적용.
  • 주요 ORM 프레임워크:
    • Hibernate: JPA 구현체 중 하나.
    • JPA: 자바에서 ORM을 표준화한 인터페이스.

JPA(Java Persistence API)

  • JPA는 자바에서 ORM 작업을 위한 표준 인터페이스입니다.
  • ORM 도구를 사용하기 위한 규칙을 정의한 API.
  • JPA는 자체적으로 동작하지 않으며, Hibernate, EclipseLink와 같은 구현체를 통해 사용됩니다.
  • 주요 특징:
    • SQL 대신 객체 중심으로 데이터베이스 작업 가능.
    • 엔터티(Entity)를 통해 테이블과 매핑.

2. ORM에서 엔터티를 행동으로 어떻게 표현하나?

  • ORM에서 엔터티는 데이터베이스의 테이블과 매핑된 클래스입니다.
  • 속성은 테이블의 컬럼, 행동은 비즈니스 로직(메소드)으로 표현됩니다.

예제: JPA를 사용하는 엔터티 클래스

import jakarta.persistence.*;

@Entity
@Table(name = "users") // 테이블 이름 매핑
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    // Getter & Setter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    // 행동 메소드
    public void updateEmail(String newEmail) {
        this.email = newEmail;
    }
}

설명:

  • 속성: 클래스 필드(id, name, email)가 데이터베이스 테이블의 컬럼과 매핑.
  • 행동: updateEmail(String newEmail) 메소드는 비즈니스 로직을 수행하며 데이터 상태를 변경.

요약

  1. ORM: 객체와 관계형 데이터베이스 간의 변환을 자동화하는 기술.
  2. JPA: ORM 작업을 위한 자바 표준 인터페이스.

추가 질문 5:

1. 자바와 데이터베이스의 연결은 JDBC를 이용하는 것 아닌가?

2. ORM과의 공통점과 차이점은 무엇인가?

1. 자바와 데이터베이스의 연결

  • 자바와 데이터베이스의 연결은 JDBC(Java Database Connectivity)를 사용합니다.
  • JDBC는 자바 프로그램이 데이터베이스와 통신할 수 있도록 설계된 표준 API입니다.
  • JDBC의 동작:
    1. 데이터베이스 드라이버를 통해 연결.
    2. SQL 명령을 전달.
    3. 데이터베이스에서 결과를 받아 처리.

2. JDBC와 ORM의 공통점과 차이

공통점

  1. 데이터베이스와의 상호작용:

    • JDBC와 ORM 모두 자바 애플리케이션과 데이터베이스 간의 연결을 관리.
    • SQL 명령어를 실행하고 데이터를 가져오는 역할.
  2. 데이터 조작:

    • 데이터를 삽입(INSERT), 조회(SELECT), 수정(UPDATE), 삭제(DELETE)하는 작업 가능.
  3. 트랜잭션 관리:

    • 트랜잭션을 처리하고, 커밋/롤백을 지원.

차이점

구분 JDBC ORM (JPA)
동작 방식 SQL 명령어를 직접 작성하여 데이터베이스와 상호작용. 객체와 테이블 간의 매핑을 통해 SQL 명령어를 자동으로 생성.
코드 작성량 SQL 작성 및 결과 처리 코드가 많음. SQL을 직접 작성하지 않아도, 자바 객체를 다루듯이 데이터베이스 조작 가능.
데이터 표현 SQL 명령어와 데이터베이스 결과(ResultSet) 처리. 데이터베이스의 테이블을 자바 클래스(Entity)로 매핑.
학습 곡선 간단하며, 추가 학습이 거의 필요 없음. JPA와 같은 ORM 프레임워크의 학습 필요.
확장성 데이터베이스마다 SQL 문법이 다르므로, 코드가 데이터베이스에 의존적임. 데이터베이스 독립성을 제공하며, 데이터베이스 변경 시에도 코드 수정이 최소화됨.
성능 직접 SQL을 작성하므로 성능이 더 뛰어날 수 있음(최적화된 쿼리 작성 가능). 자동 생성된 SQL이 성능이 다소 떨어질 가능성 있음. (다만, 적절한 튜닝과 캐싱으로 성능을 보완 가능)

3. JDBC와 ORM의 사용 예

JDBC 사용 예

  • 데이터 조회:
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
    String sql = "SELECT * FROM users WHERE id = ?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setInt(1, 1);
    ResultSet rs = pstmt.executeQuery();
    

while (rs.next()) {
System.out.println("User: " + rs.getString("name"));
}


#### **ORM (JPA) 사용 예**
- 데이터 조회:
```java
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    // getters and setters
}

// JPA Repository에서 데이터 조회
User user = entityManager.find(User.class, 1L);
System.out.println("User: " + user.getName());

4. JDBC와 ORM의 선택 기준

  • JDBC 사용이 적합한 경우:

    • 데이터베이스 의존적인 고성능 애플리케이션.
    • SQL 최적화를 직접 수행하고 싶은 경우.
    • 간단한 데이터베이스 작업이 필요한 경우.
  • ORM 사용이 적합한 경우:

    • 객체 지향 설계를 중시하며, 데이터베이스 독립성이 중요한 경우.
    • 데이터 모델과 비즈니스 로직을 깔끔하게 분리하고 싶은 경우.
    • 대규모 프로젝트에서 반복적인 SQL 작업을 줄이고 싶을 때.

요약

  1. 자바와 데이터베이스의 연결은 기본적으로 JDBC를 통해 이루어집니다.
  2. 공통점:
    • 데이터베이스와의 연결, 데이터 조작, 트랜잭션 관리 가능.
  3. 차이점:
    • JDBC는 SQL을 직접 작성해야 하고, ORM은 객체와 테이블 간 매핑으로 SQL을 자동 생성.
    • JDBC는 데이터베이스 의존적이고, ORM은 독립성을 보장.
  4. 선택 기준:
    • 프로젝트 규모, 데이터베이스 의존성, 성능 요구 사항에 따라 선택.

추가 질문6:

1. 자바와 Oracle에서의 JDBC와 ORM 코드 비교

자바와 Oracle에서의 JDBC와 ORM 코드 비교

목표: Oracle 데이터베이스의 users 테이블에서 데이터를 삽입, 조회하는 기능을 JDBCORM(JPA)로 각각 구현.


1. JDBC 코드

데이터 삽입(JDBC)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class JDBCInsertExample {
    public static void main(String[] args) {
        String url = "jdbc:oracle:thin:@localhost:1521:xe"; // Oracle DB 연결 URL
        String username = "system";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);

            pstmt.setInt(1, 1);  // ID 값
            pstmt.setString(2, "John Doe");  // Name 값
            pstmt.setString(3, "john.doe@example.com");  // Email 값

            int rowsInserted = pstmt.executeUpdate();
            if (rowsInserted > 0) {
                System.out.println("A new user was inserted successfully!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

데이터 조회(JDBC)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class JDBCSelectExample {
    public static void main(String[] args) {
        String url = "jdbc:oracle:thin:@localhost:1521:xe";
        String username = "system";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "SELECT * FROM users WHERE id = ?";
            PreparedStatement pstmt = conn.prepareStatement(sql);

            pstmt.setInt(1, 1);  // 조회할 ID 값
            ResultSet rs = pstmt.executeQuery();

            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id"));
                System.out.println("Name: " + rs.getString("name"));
                System.out.println("Email: " + rs.getString("email"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. ORM(JPA) 코드

엔터티 클래스 정의

import jakarta.persistence.*;

@Entity
@Table(name = "users") // Oracle 테이블 매핑
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    // Getter & Setter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

데이터 삽입(JPA)

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;

public class JPAInsertExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
        EntityManager em = emf.createEntityManager();

        User user = new User();
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");

        em.getTransaction().begin(); // 트랜잭션 시작
        em.persist(user); // 데이터 저장
        em.getTransaction().commit(); // 트랜잭션 커밋

        em.close();
        emf.close();
        System.out.println("User inserted successfully.");
    }
}

데이터 조회(JPA)

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;

public class JPASelectExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
        EntityManager em = emf.createEntityManager();

        User user = em.find(User.class, 1L); // ID가 1인 사용자 조회
        if (user != null) {
            System.out.println("ID: " + user.getId());
            System.out.println("Name: " + user.getName());
            System.out.println("Email: " + user.getEmail());
        } else {
            System.out.println("User not found.");
        }

        em.close();
        emf.close();
    }
}

3. JDBC와 ORM(JPA)의 코드 비교

구분 JDBC ORM (JPA)
코드 복잡성 SQL 문을 직접 작성. 코드가 길고 반복적. SQL 작성 없이 객체로 데이터를 처리. 코드 간결.
트랜잭션 트랜잭션을 수동으로 처리(setAutoCommit, commit). 트랜잭션이 자동으로 관리 (EntityManager).
데이터 처리 ResultSet으로 데이터를 직접 읽고 처리. 객체로 데이터를 가져오고 조작.
독립성 데이터베이스에 의존적(SQL 문법에 따라 수정 필요). 데이터베이스 독립성 보장.
초기 설정 드라이버와 URL만 설정하면 바로 사용 가능. 설정 파일(Persistence.xml)과 엔터티 정의 필요.

요약

  • JDBC:
    • 데이터베이스와 직접 통신.
    • SQL 작성이 필수이며, 코드가 복잡하고 데이터베이스에 의존적.
  • ORM(JPA):
    • 객체와 테이블 간 매핑을 통해 SQL 없이 데이터를 처리.
    • 코드가 간결하고 데이터베이스 독립성을 제공하지만, 초기 설정이 필요.