DB 처리 방식
Java에서 데이터베이스 처리 방식에는 여러 가지 방법이 있습니다. 대표적인 방법으로는 JDBC, DAO 패턴, 그리고 JPA가 있습니다. 이 글에서는 각각의 방법이 어떻게 데이터베이스와 상호작용하는지, 그리고 이들을 어떻게 효율적으로 사용할 수 있는지에 대해 자세히 설명합니다.
1. JDBC (Java Database Connectivity)
JDBC는 Java에서 데이터베이스와 연결하고 쿼리를 실행할 수 있는 기본적인 방법을 제공합니다. JDBC를 사용하면 SQL을 직접 작성하고, 결과를 받아와 처리하는 작업을 할 수 있습니다. 하지만, 이 방법은 직접적인 SQL 쿼리 작성과 결과 처리가 포함되어 있어 코드가 다소 복잡하고 유지보수가 어려운 경우가 많습니다.
1.1. JDBC 기본 흐름
- DB 연결: DriverManager를 사용하여 데이터베이스에 연결합니다.
- Statement 객체 생성: Statement 객체를 사용하여 SQL 쿼리를 실행합니다.
- SQL 쿼리 실행: executeQuery() 또는 executeUpdate() 메서드를 통해 SQL을 실행합니다.
- 결과 처리: ResultSet 객체를 사용하여 쿼리 결과를 처리합니다.
- 연결 종료: 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의 주요 기능:
- 다양한 DBMS 지원 (MySQL, PostgreSQL, Oracle 등)
- SQL 쿼리 실행 및 결과 시각화
- ER 다이어그램 생성
- 테이블 및 관계 구조 탐색
- 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 기본 구성
- Entity 클래스: 데이터베이스 테이블과 매핑되는 객체입니다.
- Repository 인터페이스: CRUD 작업을 처리하는 메서드를 제공하며, Spring Data JPA에서는 JpaRepository를 통해 자동으로 생성됩니다.
- EntityManager: JPA에서 엔티티 객체를 관리하며, DB 작업을 수행합니다.
3.2. JPA 코드 예시 (Entity Class + Repository)
- 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
}
- 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 애플리케이션에서 많이 사용됩니다.
'API > 이론' 카테고리의 다른 글
59. [ JAVA ] SpringData JPA로 Repository 인터페이스 생성 (0) | 2025.01.12 |
---|---|
58. [ JAVA ] SpringBoot 에서 JWT적용 및 구현 (0) | 2025.01.12 |
52. [ JAVA ] Spring Boot : 데이터 유효성 검사 적용방법(validation) (1) | 2025.01.10 |
43. [ JAVA ] JWT(Json Web Token)(보안) 정의 (0) | 2024.12.30 |
37. [ JAVA ] 서버 개발 환경 설정 (1) | 2024.12.18 |