BE/Java

[Java] JDBC와 JPA

baek-dev 2024. 12. 11. 18:31

JDBC

JDBC는 Java와 데이터베이스를 연결하는 기본적인 다리

데이터베이스에 직접 연결해서 SQL 쿼리를 실행하고 데이터를 가져오거나 저장할 수 있게 해준다

 

특징

 

  • 직접 SQL 사용: SQL 쿼리를 직접 작성해서 데이터베이스와 소통
  • 로우레벨 작업: 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 개발자가 하나씩 직접 처리
  • 유연하지만 복잡: 모든 세부 작업을 수동으로 처리해야 하므로 복잡한 코드가 될 수 있음

예제

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String user = "username";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {

            // SQL 실행
            String query = "SELECT * FROM users";
            ResultSet rs = stmt.executeQuery(query);

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

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

장점

  • 데이터베이스 작업을 상세히 조작할 수 있음
  • 특정 요구사항에 맞게 유연하게 커스터마이징 가능

단점

  • 코드가 길어지고 복잡해짐
  • 반복적인 작업이 많아 생산성이 낮아질 수 있음

JPA

JPA는 데이터베이스와의 작업을 더 편리하게 만들어주는 Java의 표준 ORM(Object-Relational Mapping) 프레임워크

특징

  1. SQL 대신 객체 사용: 데이터를 SQL로 처리하는 대신, Java 객체를 통해 데이터를 다룸
  2. 자동화된 데이터 처리: 반복적인 작업(SQL 작성, 매핑 등)을 자동으로 처리
  3. ORM(Object-Relational Mapping): 데이터베이스 테이블과 Java 객체를 연결

예제 (Hibernate 사용)

import jakarta.persistence.*;

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

    // Getters and Setters
}

// 데이터베이스 작업
public class JpaExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
        EntityManager em = emf.createEntityManager();

        em.getTransaction().begin();

        // 데이터 저장
        User user = new User();
        user.setName("John Doe");
        em.persist(user);

        // 데이터 조회
        User foundUser = em.find(User.class, user.getId());
        System.out.println("User Name: " + foundUser.getName());

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

장점

  • 코드가 간결하고 유지보수가 쉬움
  • 데이터베이스 작업을 객체 중심으로 처리해 생산성 향상
  • 데이터베이스 변경 시 SQL 쿼리를 수정하지 않아도 되는 경우가 많음

단점

  • 초기 설정이 복잡할 수 있음
  • 복잡한 SQL 쿼리는 성능 최적화가 필요할 수 있음
  • 데이터베이스를 완전히 추상화하므로, 내부 로직을 이해하기 어려울 수 있음

JDBC와 JPA의 차이점

특징 JDBC JPA
SQL 작성 직접 작성 필요 객체로 처리, SQL은 자동 생성
복잡도 낮은 수준의 작업, 복잡한 코드 높은 수준의 추상화, 간결한 코드
생산성 낮음 높음
학습 곡선 단순하지만 코드 작성이 많음 초기 학습 필요, 이후 간편
유연성 모든 것을 직접 제어 가능 ORM 방식에 제약이 있을 수 있음

 

  • JDBC를 사용해야 하는 경우
    • 단순한 작업이거나, SQL을 직접 세부적으로 제어해야 할 때
    • 프레임워크를 추가로 도입할 수 없는 제한적인 상황
  • JPA를 사용해야 하는 경우
    • 프로젝트가 크고 유지보수가 중요할 때
    • 데이터를 객체로 관리하는 것이 더 직관적일 때
    • 개발 속도를 높이고 반복 작업을 줄이고 싶을 때

Spring Data JPA -> JPA -> Hibernate -> JDBC -> DB Driver ->DBMS



 

 

출처 : ChatGPT

 

'BE > Java' 카테고리의 다른 글

[Java] 명령형 , 선언형 프로그래밍  (0) 2024.12.12
[Java] 어노테이션  (2) 2024.12.11
[Java] 람다식  (0) 2024.12.10
[Java] 스트림  (1) 2024.12.09
[Java] Map  (0) 2024.12.07