JAVA Spring FRAMEWORK

[JAVA]JDBC란?

Home-M 2024. 11. 13. 23:14
728x90
반응형

*JDBC (Java Database Connectivity)**는 자바에서 데이터베이스와 연결하여 SQL 쿼리를 실행하고 데이터를 처리하는 기본적인 API입니다. JDBC데이터베이스와의 연결을 위한 표준 인터페이스를 제공하지만, 데이터베이스 작업을 더 쉽게 하려면 JDBC 기반의 라이브러리나 프레임워크를 사용하게 됩니다.

MyBatis 외에도 JDBC를 사용할 수 있는 여러 가지 프레임워크와 라이브러리가 존재합니다. 여기 몇 가지 대표적인 JDBC 관련 라이브러리를 소개합니다:

1. JPA (Java Persistence API)

  • JPAORM(Object-Relational Mapping) 표준 API로, 자바 객체와 관계형 데이터베이스 간의 매핑을 제공합니다. JPAJDBC를 기반으로 하고 있지만, SQL 쿼리를 자동으로 생성하거나 자바 객체와 데이터베이스의 테이블 간의 매핑을 자동으로 처리해줍니다.
  • JPAHibernateEclipseLink와 같은 구현체들이 존재합니다.

JPA의 특징:

  • 객체지향적: 데이터베이스와 자바 객체 간의 매핑을 자동으로 처리하여 SQL을 작성할 필요가 없습니다.
  • 표준화된 인터페이스: JPA는 표준화된 API를 제공하므로, 구현체를 바꾸는 것에 대한 유연성이 있습니다.

사용 예시:

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

2. Spring JDBC Template

  • Spring JDBC TemplateSpring Framework에서 제공하는 JDBC를 사용하기 위한 라이브러리로, JDBC 코드의 반복적인 부분을 간소화하고 예외 처리자원 관리를 자동으로 처리합니다.
  • JdbcTemplate을 사용하면 JDBC 코드의 복잡성을 줄이고, SQL 실행 및 결과 처리를 간단하게 할 수 있습니다.

Spring JDBC Template의 특징:

  • 간소화된 JDBC 코드: JdbcTemplate이 SQL 실행 및 리소스 관리(연결, 닫기 등)를 자동으로 처리해줍니다.
  • 예외 처리: SQL 예외를 Spring의 DataAccessException으로 변환하여 일관된 방식으로 예외를 처리할 수 있습니다.

사용 예시:

 
@Autowired
private JdbcTemplate jdbcTemplate;

public User getUserById(Long id) {
    String sql = "SELECT * FROM users WHERE id = ?";
    return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
}

3. Hibernate

  • HibernateJPA의 구현체이자, 객체-관계 매핑(ORM) 프레임워크입니다. JPA와 유사하게 데이터베이스와 자바 객체 간의 매핑을 자동으로 처리하고, SQL을 자동으로 생성하여 데이터베이스와 상호작용합니다.
  • HibernateJDBC를 직접 사용하여 SQL을 실행하지만, SQL을 개발자가 직접 작성할 필요 없이 자동화된 방식으로 처리합니다.

Hibernate의 특징:

  • 자동 매핑: 데이터베이스의 테이블과 자바 객체 간의 자동 매핑
  • SQL 생성: SQL을 자동으로 생성해주므로 개발자는 대부분의 작업을 객체 지향적으로 처리할 수 있습니다.
  • 쿼리 언어(HQL): **Hibernate Query Language (HQL)**을 사용하여 데이터베이스를 조회할 수 있습니다.

사용 예시:

 
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = session.get(User.class, 1);
tx.commit();
session.close();

4. JDBC의 기본 활용 (직접 사용)

  • JDBC는 기본적으로 SQL 연결, 실행, 결과 처리를 위한 API로, 데이터를 처리할 때 자바 코드로 직접 SQL 쿼리를 작성하고 실행합니다.
  • JDBC를 직접 사용하는 경우, Connection, Statement, ResultSet 객체를 사용하여 SQL 쿼리 실행 및 결과 반환을 수동으로 처리합니다.

JDBC의 기본 예시:

public User getUserById(Long id) {
    String sql = "SELECT * FROM users WHERE id = ?";
    try (Connection connection = DriverManager.getConnection(DB_URL, USER, PASS);
         PreparedStatement ps = connection.prepareStatement(sql)) {
        ps.setLong(1, id);
        try (ResultSet rs = ps.executeQuery()) {
            if (rs.next()) {
                return new User(rs.getLong("id"), rs.getString("name"));
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}
 

5. Spring Data JPA

  • Spring Data JPASpring Framework에서 JPA를 더욱 쉽게 사용할 수 있도록 도와주는 라이브러리입니다. 기본적인 CRUD 작업을 자동으로 처리할 수 있도록 해주며, JpaRepository를 사용하여 간단하게 데이터베이스 연동을 처리할 수 있습니다.

Spring Data JPA의 특징:

  • 간단한 설정: 기본적인 CRUD 메소드가 자동으로 생성됩니다.
  • JPA 기반: JPA를 쉽게 사용할 수 있도록 지원하며, Hibernate를 JPA 구현체로 사용합니다.

사용 예시:

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}

6. jOOQ (Java Object Oriented Querying)

  • jOOQSQL을 객체 지향적으로 작성할 수 있게 해주는 라이브러리입니다. SQL 쿼리를 자바 코드로 작성하고, 데이터베이스와 상호작용할 수 있는 타입 안전성을 제공합니다. JPA와는 다르게 자유로운 SQL 작성을 지원합니다.
  • jOOQSQL을 직접 작성하면서도 타입 안전성을 제공하는 특성이 있습니다.

jOOQ의 특징:

  • SQL에 대한 자유로운 접근: SQL을 직접 작성하면서도 자바 코드에서 타입 안전성을 제공.
  • 타입 안전: SQL을 자바 코드로 작성해도 컴파일 시점에 오류를 잡을 수 있습니다.

사용 예시:

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}

결론

  • MyBatis 외에도 JPA, Spring JDBC Template, Hibernate, Spring Data JPA, jOOQ 등 다양한 JDBC 기반의 라이브러리 및 프레임워크들이 존재합니다. 이들은 SQL 처리, ORM을 포함한 여러 기능을 제공하며, JDBC의 복잡성을 줄이고 편리한 데이터베이스 연동을 가능하게 합니다.
  • JDBC를 사용할 때는 라이브러리나 프레임워크를 선택하는 것이 중요한데, 복잡한 쿼리가 필요하면 MyBatisjOOQ를, 간단한 CRUD 작업Spring JDBC Template이나 Spring Data JPA를 사용하는 것이 적합할 수 있습니다.

 

 

 

728x90