자바를 통한 데이터 접근 방법

a·2023년 5월 19일

코테 프로젝트

목록 보기
4/4

자바를 통한 데이터 접근 방법

  • JDBC
  • Spring JDBC (Ex. JdbcTemplate)
  • Persistence Framework (Ex. Hibernate, Mybatis 등)

JPA(Java Persistence API)

  • Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함

ORM이란

Object Relational Mapping, 객체-관계 매핑

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
    • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
    • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
    • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
  • 객체를 RDB 테이블에 자동으로 영속화한다.

Statement와 Prepared Statement

SQL 실행 단계

1) 쿼리 문장 분석
2) 컴파일
3) 실행

Statement

String sqlstr = "SELECT name, memo FROM TABLE WHERE name =" + num
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery(sqlstr);
  • 쿼리문을 수행할 때마다 SQL 실행단계 1~3 단계를 거침
  • Statement는 정적인 쿼리문을 처리
  • 실행되는 SQL문을 확인 가능

Prepared Statement

String sqlstr = "SELECT name, memo FROM TABLE WHERE num = ?"
PreparedStatement stmt = conn.preparedStatement();
stmt.setInt(1, num);
ResultSet rst = stmt.executeQuery(sqlstr);
  • 컴파일이 미리 되어있기 때문에 Statement에 비해 좋은 성능
  • "?" 부분에만 변화를 주어 동적 쿼리문을 처리
  • 동적 쿼리문일 경우 sql문을 확인이 어려움
  • SQL injection 방지

Prepared Statement를 사용해야 하는 경우

  1. 동적 쿼리문을 실행하는 경우

  2. 쿼리 반복 수행 작업일 경우

Statement와 PreparedStatement의 차이

  • Statement를 사용하면 매번 쿼리를 수행할 때마다 계속적으로 단계를 거치면서 수행
  • PreparedStatement는 처음 한 번만 세 단계를 거친 후 캐시에 담아 재사용
  • 동일한 쿼리를 반복적으로 수행한다면 PrepardStatement가 DB에 훨씬 적은 부하를 주며, 성능도 좋다.

jpa와 jdbc(PreparedStatement)를 비교

특징JPAPreparedStatement
추상화 level높다낮다
ORMOX
SQL injection 방지OX
성능높다낮다
사용 난이도어려움쉬움

일반적으로 JPA가 더 나은 선택이다. 그러나 반복 수행이거나 성능 향상을 위해서 PreparedStatement가 더 나은 선택일 수 있다.

0개의 댓글