개발/Spring

[JDBC, JPA] JDBC와 JPA

난중후니 2023. 1. 4. 21:15
728x90
반응형

JDBC란?

  • JDBC(Java Database Connectivity)는 DB에 접근 할 수 있도록 Java에서 제공하는 API입니다.
  • JDBC는 관계형 데이터베이스에 사용되는 SQL문을 실행하기 위해 Java로 작성된 클래스와 인터페이스로 구성되어 있습니다.
  • 특정 DB나 메커니즘에 구애 받지않는 독립적인 인터페이스를 통해 다양한 DB에 접근하는 코드를 구현 할 수 있도록 제공하는 자바 클래스의 표준 집합입니다.
  • JDBC 클래스는 자바 패키지 java.sql과 javax.sql에 포함되어 있습니다.

JDBC 동작 방법

  1. Driver 로딩
  • JDBC Driver는 자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해줍니다.
    ex) Class.forName("com.mysql.jdbc.Driver"); // MySQL 드라이버 로딩
  1. Connection 연결
    ex) Connection con = DriverManager.getConnection(URL, userName, password);

2 ~ 3. SQL 실행
ex)

String sql = "select * from users";
String insertSql = "insert into users (user_id, user_name) values ('shbae', 'shbae');

PreparedStatement psmt = con.createStatement();
ResultSet rsInsert = psmt.executeQuery(insertSql); // 쿼리 실행(insert, update, delete)
ResultSet rsRead = psmt.executeQuery();
  1. SQL 결과값 조회
while(rsRead.next()){
    String userName = rsRead.getString("userName");
    String userId = rsRead.getString("userId");
}
  1. 자원 닫기
    rsInsert.close(); // ResultSet 종료
    rsRead.close(); // Statement 종료
    psmt.close(); // Conneciton 종료

JDBC API의 문제점

  • 쿼리를 실행하기 전과 후에 많은 코드를 작성해야 합니다.
    ex) connection, statement, driver ...
  • 트랜잭션을 처리해야 합니다.
  • 데이터베이스 로직에서 예외 처리 코드를 수행해야 합니다.

JDBC Template

  • Spring JDBC 접근 방법 중 하나로 위의 JDBC API의 문제점을 개선하였습니다.

Spring JDBC 역할

  • 자원의 생성과 반환(Connection, Statement, ResultSet...)
    • Statement 실행
    • ResultSet Loop 처리
    • Exception 처리와 반환
    • Transaction 처리

      Spring JDBC에서 개발자가 하는 역할

  • datasource 설정(url, driver, username, password ...)
  • SQL문 작성
  • 결과 처리

JPA(Java Persistence API)

  • Java에서 ORM(Object-Relation Mapping) 기술 표준으로 사용하는 인터페이스 모음입니다.
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스입니다.


출처 : https://ultrakain.gitbooks.io/jpa/content/chapter1/chapter1.3.html

JPA 장점

  1. 생산성 향상
  • DB 설계 중심에서 객체 설계 중심으로 개발 할 수 있습니다.
  • query를 작성하고 jdbc api 사용하는 지루하고 반복적인 일을 JPA가 대신 해줍니다.
  1. 유지보수가 좋습니다.
  • 엔티티에 필드가 추가될 경우 모든 SQL문을 변경하여야 하지만 엔티티는 필드값만 추가해주면 됩니다.
  1. 데이터베이스에 종속적이지 않습니다.
  • query를 직접 사용하는 경우에는 DB가 바뀌게 된다면 해당 DB에 맞는 값으로 전부 바꿔줘야 하지만 JPA를 사용하는 경우에는 driver만 변경해주면 자동으로 query가 생성됩니다.
728x90
반응형