기술 지식 쌓아가기 📚/Backend 🍔

[DB] Spring에서의 데이터베이스 처리: JDBC vs JPA

코양이🤍 2024. 10. 8. 13:33

⭐ JDBC란?

JDBC(Java Database Connectivity)는 Java에서 데이터베이스에 접근하기 위한 API입니다. 즉, Java 프로그램이 데이터베이스와 소통할 수 있게 해주는 도구입니다. JDBC를 사용하면 SQL 쿼리를 직접 작성하여 데이터베이스에 접근하고, 데이터를 가져오거나 수정할 수 있습니다.

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

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydb"; // 데이터베이스 URL
        String user = "username"; // 사용자 이름
        String password = "password"; // 비밀번호

        try {
            // 1. 데이터베이스 연결
            Connection conn = DriverManager.getConnection(url, user, password);

            // 2. SQL 문장 생성
            Statement stmt = conn.createStatement();
            String sql = "SELECT * FROM users"; // users 테이블에서 모든 데이터 조회

            // 3. 쿼리 실행
            ResultSet rs = stmt.executeQuery(sql);

            // 4. 결과 처리
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
            }

            // 5. 자원 해제
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

⭐ JPA란?

JPA(Java Persistence API)는 객체 지향 프로그래밍에서 데이터베이스와의 상호작용을 보다 쉽게 만들어주는 표준 API입니다. JPA는 ORM(Object-Relational Mapping)을 기반으로 하며, Java 객체와 데이터베이스의 테이블 간의 매핑을 자동으로 처리해줍니다.

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // 기본 생성자, getters, setters
    public User() {}

    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 class JpaExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
        EntityManager em = emf.createEntityManager();
        EntityTransaction transaction = em.getTransaction();

        try {
            // 1. 트랜잭션 시작
            transaction.begin();

            // 2. 사용자 객체 생성
            User user = new User();
            user.setName("John Doe");

            // 3. 데이터베이스에 객체 저장
            em.persist(user); // INSERT 쿼리가 자동으로 실행됨

            // 4. 트랜잭션 커밋
            transaction.commit();
            System.out.println("User saved with ID: " + user.getId());
        } catch (Exception e) {
            if (transaction.isActive()) {
                transaction.rollback(); // 오류 발생 시 롤백
            }
            e.printStackTrace();
        } finally {
            // 5. 자원 해제
            em.close();
            emf.close();
        }
    }
}

✅ JPA의 추상화

JPA는 높은 수준의 추상화를 제공합니다. 즉, SQL 쿼리문을 직접 작성하지 않고도 객체를 통해 데이터베이스에 접근할 수 있게 해줍니다.

이 덕분에 개발자는 데이터베이스의 세부 사항에 신경 쓰지 않고도 비즈니스 로직에 집중할 수 있습니다.

User user = new User();
user.setName("John");
entityManager.persist(user);  // DB에 자동으로 INSERT

✅ JDBC와 JPA의 차이점

 

  • SQL vs 객체: JDBC는 SQL 쿼리를 직접 작성해야 하지만, JPA는 객체를 통해 데이터베이스에 접근합니다.
  • 추상화 수준: JDBC는 낮은 수준의 API로, 세부적인 설정이 필요합니다. 반면, JPA는 높은 수준의 추상화를 제공하여 개발의 복잡성을 줄여줍니다.
  • 유지보수: JPA를 사용하면, 데이터베이스의 구조가 변경되더라도 객체 매핑만 수정하면 되므로 유지보수가 용이합니다. JDBC는 쿼리문을 직접 수정해야 할 수 있습니다.

 

🚩 결론

JDBC와 JPA는 Java에서 데이터베이스와 상호작용하는 두 가지 주요 방법입니다.

JDBC는 SQL 쿼리를 직접 작성해야 하며, 저수준의 데이터베이스 접근을 제공합니다.

반면, JPA는 ORM을 통해 객체 지향적인 방식으로 데이터베이스와 소통할 수 있게 해주어, 개발자가 비즈니스 로직에 집중할 수 있도록 도와줍니다.

두 기술은 각각의 장단점이 있으므로, 프로젝트의 요구사항과 상황에 맞게 적절한 방법을 선택하는 것이 중요합니다. 이러한 이해를 바탕으로 더 효율적인 데이터베이스 관리를 할 수 있기를 바랍니다!