API/이론

65. [JAVA] DB 처리 방식 : JDBC, DAO 패턴, JPA

천재단미 2025. 1. 12. 22:04
728x90
반응형

 

 

 

 

 

 

DB 처리 방식 

 

 

Java에서 데이터베이스 처리 방식에는 여러 가지 방법이 있습니다. 대표적인 방법으로는 JDBC, DAO 패턴, 그리고 JPA가 있습니다. 이 글에서는 각각의 방법이 어떻게 데이터베이스와 상호작용하는지, 그리고 이들을 어떻게 효율적으로 사용할 수 있는지에 대해 자세히 설명합니다.


1. JDBC (Java Database Connectivity)

JDBC는 Java에서 데이터베이스와 연결하고 쿼리를 실행할 수 있는 기본적인 방법을 제공합니다. JDBC를 사용하면 SQL을 직접 작성하고, 결과를 받아와 처리하는 작업을 할 수 있습니다. 하지만, 이 방법은 직접적인 SQL 쿼리 작성결과 처리가 포함되어 있어 코드가 다소 복잡하고 유지보수가 어려운 경우가 많습니다.

 

1.1. JDBC 기본 흐름

  1. DB 연결: DriverManager를 사용하여 데이터베이스에 연결합니다.
  2. Statement 객체 생성: Statement 객체를 사용하여 SQL 쿼리를 실행합니다.
  3. SQL 쿼리 실행: executeQuery() 또는 executeUpdate() 메서드를 통해 SQL을 실행합니다.
  4. 결과 처리: ResultSet 객체를 사용하여 쿼리 결과를 처리합니다.
  5. 연결 종료: close() 메서드로 연결을 종료합니다.

 

1.2. JDBC 코드 예시

java
코드 복사
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {
    private Connection connection;

    public UserDAO() {
        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public List<User> getUsers() {
        List<User> users = new ArrayList<>();
        String query = "SELECT id, name, email FROM users";

        try (Statement stmt = connection.createStatement();
             ResultSet rs = stmt.executeQuery(query)) {

            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setEmail(rs.getString("email"));
                users.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return users;
    }
}

위 예시에서 ResultSet을 사용해 SQL 쿼리 결과를 자바 객체로 변환합니다. 이는 RowMapper와 유사한 역할을 하며, 각 행(row)을 객체로 변환하는 작업을 합니다.

 


2. DBeaver와 DAO 패턴 사용

2.1. DBeaver란?

DBeaver는 다양한 데이터베이스를 지원하는 데이터베이스 관리 툴입니다. SQL 쿼리 작성, 데이터베이스 구조 조회, 데이터를 시각적으로 관리할 수 있으며, 개발자가 데이터베이스와 상호작용하는 데 유용한 툴입니다.

  • DBeaver의 주요 기능:
    1. 다양한 DBMS 지원 (MySQL, PostgreSQL, Oracle 등)
    2. SQL 쿼리 실행 및 결과 시각화
    3. ER 다이어그램 생성
    4. 테이블 및 관계 구조 탐색
    5. SQL 자동완성 및 구문 강조 기능 제공

 

2.2. DAO 패턴

DAO (Data Access Object) 패턴은 데이터베이스와의 상호작용을 캡슐화하여, 데이터베이스 관련 코드와 비즈니스 로직을 분리하는 디자인 패턴입니다. DAO 패턴을 사용하면 DB 작업을 하나의 객체로 관리하고, 유지보수성과 확장성을 높일 수 있습니다.

 

2.3. DAO 패턴 예시

java
코드 복사
public class UserDAO {
    private Connection connection;

    public UserDAO(Connection connection) {
        this.connection = connection;
    }

    public User getUserById(int id) {
        String query = "SELECT * FROM users WHERE id = ?";
        try (PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.setInt(1, id);
            try (ResultSet rs = stmt.executeQuery()) {
                if (rs.next()) {
                    User user = new User();
                    user.setId(rs.getInt("id"));
                    user.setName(rs.getString("name"));
                    user.setEmail(rs.getString("email"));
                    return user;
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void saveUser(User user) {
        String query = "INSERT INTO users (name, email) VALUES (?, ?)";
        try (PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.setString(1, user.getName());
            stmt.setString(2, user.getEmail());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

이 예시에서, UserDAO 클래스는 DB와의 상호작용을 처리하며, CRUD(Create, Read, Update, Delete) 작업을 위한 메서드를 제공합니다. getUserById() 메서드는 특정 ID에 해당하는 사용자 정보를 데이터베이스에서 조회하고, saveUser() 메서드는 새 사용자를 데이터베이스에 저장합니다.

 


 

3. JPA (Java Persistence API)

JPA는 Java에서 객체와 관계형 데이터베이스를 매핑하는 데 사용되는 표준 API입니다. JPA는 객체지향적으로 데이터베이스 작업을 처리하며, SQL을 추상화하여 복잡한 쿼리 작업을 간소화할 수 있습니다. 이를 통해 개발자는 데이터베이스와 상호작용하는 로직을 더 직관적으로 작성할 수 있습니다.

 

3.1. JPA 기본 구성

  1. Entity 클래스: 데이터베이스 테이블과 매핑되는 객체입니다.
  2. Repository 인터페이스: CRUD 작업을 처리하는 메서드를 제공하며, Spring Data JPA에서는 JpaRepository를 통해 자동으로 생성됩니다.
  3. EntityManager: JPA에서 엔티티 객체를 관리하며, DB 작업을 수행합니다.

 

3.2. JPA 코드 예시 (Entity Class + Repository)

 

  1. Entity 클래스
java
코드 복사
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    private int id;
    private String name;
    private String email;

    // getters and setters
}

 

 

  1. Repository 인터페이스
java
코드 복사
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Integer> {
    // JPA에서 기본적인 CRUD 메서드는 자동으로 제공됩니다.
    List<User> findByName(String name);
}

위 예시에서는 User 엔티티 클래스를 정의하여 users 테이블과 매핑합니다. UserRepository 인터페이스는 **JpaRepository**를 확장하여, 기본적인 CRUD 작업을 자동으로 제공합니다. 또한, findByName() 메서드를 사용하여 이름으로 사용자를 검색할 수 있습니다.


4. JDBC vs DAO vs JPA 비교

특징 JDBC DAO 패턴 JPA

사용 방법 직접 SQL 쿼리 작성 및 실행 DB 작업을 캡슐화한 객체 객체 지향적으로 DB 작업 처리
복잡도 복잡하고 많은 코드 작성 필요 객체 단위로 관리, 코드가 깔끔 매우 간단하고 효율적
유연성 높은 유연성, 세밀한 제어 가능 유연성 보통 제약적일 수 있으나 편리함
성능 최적화 가능 성능에 약간의 부담이 있을 수 있음 성능 저하 없이 쿼리 자동 생성
디버깅 및 유지보수 까다로운 디버깅, 유지보수 어려움 유지보수 쉬움 유지보수 용이, 직관적인 코드

5. 결론

  • JDBC는 기본적이고 세밀한 제어가 필요한 경우 유용하지만, 코드가 복잡해지고 유지보수가 어려워질 수 있습니다.
  • DAO 패턴은 DB 작업을 객체로 추상화하여, 재사용성과 유지보수성을 높일 수 있습니다.
  • JPA는 객체와 데이터베이스 간의 매핑을 자동으로 처리해주며, 객체 지향적으로 DB 작업을 수행할 수 있어 개발의 편리함을 제공합니다. 특히 Spring Data JPA를 사용하면, CRUD 작업을 쉽게 처리할 수 있습니다.

각각의 방식은 사용할 상황에 따라 적합하게 선택해야 하며, JPA복잡한 SQL을 자동으로 처리하고 객체 모델로 다루기 쉬운 장점이 있어 현대 Java 애플리케이션에서 많이 사용됩니다.

728x90
반응형
home top bottom
}